Java 7 keeps creeping in here and there. I'm all for making Java 7 the required platform... I'm probably in the minority...
Gary ---------- Forwarded message ---------- From: <[email protected]> Date: Tue, May 20, 2014 at 11:00 PM Subject: svn commit: r1596446 - /logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java To: [email protected] Author: mattsicker Date: Wed May 21 03:00:17 2014 New Revision: 1596446 URL: http://svn.apache.org/r1596446 Log: Add empty iterator implementation (yay 1.7) along with some warning suppression (it's ok to share immutable collection classes as public fields). Modified: logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java Modified: logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java URL: http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java?rev=1596446&r1=1596445&r2=1596446&view=diff ============================================================================== --- logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java (original) +++ logging/log4j/log4j2/trunk/log4j-api/src/main/java/org/apache/logging/log4j/ThreadContext.java Wed May 21 03:00:17 2014 @@ -24,6 +24,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.NoSuchElementException; import org.apache.logging.log4j.message.ParameterizedMessage; import org.apache.logging.log4j.spi.DefaultThreadContextMap; @@ -52,6 +53,8 @@ public final class ThreadContext { private static final long serialVersionUID = 1L; + private static final Iterator<String> EMPTY_ITERATOR = new EmptyIterator<String>(); + @Override public String pop() { return null; @@ -131,8 +134,7 @@ public final class ThreadContext { @Override public Iterator<String> iterator() { - List<String> empty = Collections.emptyList(); - return empty.iterator(); + return EMPTY_ITERATOR; } @Override @@ -143,13 +145,37 @@ public final class ThreadContext { } /** + * An empty iterator. Since Java 1.7 added the Collections.emptyIterator() method, we have to make do. + * @param <E> the type of the empty iterator + */ + private static class EmptyIterator<E> implements Iterator<E> { + + @Override + public boolean hasNext() { + return false; + } + + @Override + public E next() { + throw new NoSuchElementException("This is an empty iterator!"); + } + + @Override + public void remove() { + // no-op + } + } + + /** * Empty, immutable Map. */ + @SuppressWarnings("PublicStaticCollectionField") public static final Map<String, String> EMPTY_MAP = Collections.emptyMap(); /** * Empty, immutable ContextStack. */ + @SuppressWarnings("PublicStaticCollectionField") public static final ThreadContextStack EMPTY_STACK = new EmptyThreadContextStack(); private static final String DISABLE_MAP = "disableThreadContextMap"; @@ -334,7 +360,7 @@ public final class ThreadContext { * @param stack The stack to use. */ public static void setStack(final Collection<String> stack) { - if (stack.size() == 0 || !useStack) { + if (stack.isEmpty() || !useStack) { return; } contextStack.clear(); -- E-Mail: [email protected] | [email protected] Java Persistence with Hibernate, Second Edition<http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory
