This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 282bd7b070465c2a8aea9161cb22c1d0699a4f0e Author: Gary Gregory <[email protected]> AuthorDate: Tue Jan 18 13:53:51 2022 -0500 Port StackAllocator changes from from release 2.x. - Do not allocate an extra collection. - Constants should be in upper case. --- .../logging/log4j/util/StackLocatorUtilTest.java | 1 - .../apache/logging/log4j/util/StackLocator.java | 23 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java index 3a944a2..82829e1 100644 --- a/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java +++ b/log4j-api-test/src/test/java/org/apache/logging/log4j/util/StackLocatorUtilTest.java @@ -31,7 +31,6 @@ import org.junit.runners.ParentRunner; @RunWith(BlockJUnit4ClassRunner.class) public class StackLocatorUtilTest { - @Test public void testStackTraceEquivalence() throws Throwable { StackTraceElement[] stackTraceElements = expectedStack(new Throwable().getStackTrace()); diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java index 6807901..0203886 100644 --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/StackLocator.java @@ -27,9 +27,9 @@ import java.util.stream.Collectors; */ public final class StackLocator { - private final static StackWalker walker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); + private final static StackWalker WALKER = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); - private final static StackWalker stackWalker = StackWalker.getInstance(); + private final static StackWalker STACK_WALKER = StackWalker.getInstance(); private final static StackLocator INSTANCE = new StackLocator(); @@ -53,7 +53,7 @@ public final class StackLocator { if (callerPredicate == null) { throw new IllegalArgumentException("callerPredicate cannot be null"); } - return walker.walk(s -> s + return WALKER.walk(s -> s .map(StackWalker.StackFrame::getDeclaringClass) // Skip until the sentinel class is found .dropWhile(clazz -> !sentinelClass.equals(clazz)) @@ -69,7 +69,7 @@ public final class StackLocator { @PerformanceSensitive public Class<?> getCallerClass(final String fqcn, final String pkg) { - return walker.walk(s -> s + return WALKER.walk(s -> s .dropWhile(f -> !f.getClassName().equals(fqcn)) .dropWhile(f -> f.getClassName().equals(fqcn)) .dropWhile(f -> !f.getClassName().startsWith(pkg)) @@ -80,7 +80,7 @@ public final class StackLocator { @PerformanceSensitive public Class<?> getCallerClass(final Class<?> anchor) { - return walker.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)). + return WALKER.walk(s -> s.dropWhile(f -> !f.getDeclaringClass().equals(anchor)). dropWhile(f -> f.getDeclaringClass().equals(anchor)).findFirst()). map(StackWalker.StackFrame::getDeclaringClass).orElse(null); } @@ -95,7 +95,7 @@ public final class StackLocator { */ @PerformanceSensitive public Class<?> getCallerClass(final int depth) { - return walker.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null); + return WALKER.walk(s -> s.skip(depth).findFirst()).map(StackWalker.StackFrame::getDeclaringClass).orElse(null); } @PerformanceSensitive @@ -104,18 +104,23 @@ public final class StackLocator { if (PrivateSecurityManagerStackTraceUtil.isEnabled()) { return PrivateSecurityManagerStackTraceUtil.getCurrentStackTrace(); } - return new ArrayDeque<>(walker.walk(s -> s.map(StackWalker.StackFrame::getDeclaringClass).collect(Collectors.toList()))); + final Deque<Class<?>> stack = new ArrayDeque<>(); + return WALKER.walk(s -> { + s.forEach(f -> stack.add(f.getDeclaringClass())); + return stack; + }); + } public StackTraceElement calcLocation(final String fqcnOfLogger) { - return stackWalker.walk( + return STACK_WALKER.walk( s -> s.dropWhile(f -> !f.getClassName().equals(fqcnOfLogger)) // drop the top frames until we reach the logger .dropWhile(f -> f.getClassName().equals(fqcnOfLogger)) // drop the logger frames .findFirst()).map(StackWalker.StackFrame::toStackTraceElement).orElse(null); } public StackTraceElement getStackTraceElement(final int depth) { - return stackWalker.walk(s -> s.skip(depth).findFirst()) + return STACK_WALKER.walk(s -> s.skip(depth).findFirst()) .map(StackWalker.StackFrame::toStackTraceElement).orElse(null); } }
