ThreadContext.ContextStack is already (conceptually) a collection of Strings so it should be a Collection<String> instead of it's sub-interface ThreadContextStack being a Collection<String>. What's the value of ThreadContextStack now? Should we keep it as a placeholder? It is not documented in its Javadoc. Note that all implementations of ContextStack are implementations of ThreadContextStack, so this change has no effect on implementors. Note that Log4jLogEvent holds a ContextStack so this makes it a Collection<String> which happens to save a lot of work for XML and JSON IO for the Jackson based receivers and layouts I am working on.

git-svn-id: https://svn.apache.org/repos/asf/logging/log4j/log4j2/trunk@1593125 13f79535-47bb-0310-9956-ffa450edef68