This is an automated email from the ASF dual-hosted git repository.
pkarwasz pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
The following commit(s) were added to refs/heads/2.x by this push:
new f059acf293 Fix modified method parameters
f059acf293 is described below
commit f059acf293cee25dc0af758b681011443b3f08cd
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Sun Jun 4 23:31:09 2023 +0200
Fix modified method parameters
---
.../org/apache/log4j/helpers/PatternConverter.java | 9 ++--
.../logging/log4j/message/MapMessageTest.java | 3 +-
.../core/appender/MemoryMappedFileManager.java | 12 +++--
.../core/layout/ByteBufferDestinationHelper.java | 12 +++--
.../logging/log4j/core/lookup/StrMatcher.java | 5 +-
.../log4j/core/pattern/LevelPatternConverter.java | 2 +-
.../core/pattern/MessagePatternConverter.java | 2 +-
.../logging/log4j/core/util/StringEncoder.java | 22 +++++----
.../log4j/core/util/datetime/FixedDateFormat.java | 18 ++++----
.../log4j/perf/jmh/StringEncodingBenchmark.java | 44 ++++++++++--------
.../log4j/perf/jmh/TimeFormatBenchmark.java | 54 +++++++++++-----------
.../logging/log4j/perf/nogc/OpenHashStringMap.java | 41 ++++++++--------
.../logging/log4j/perf/util/StackDriver.java | 8 ++--
13 files changed, 126 insertions(+), 106 deletions(-)
diff --git
a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternConverter.java
b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternConverter.java
index 2d91a9d165..a19b107701 100644
--- a/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternConverter.java
+++ b/log4j-1.2-api/src/main/java/org/apache/log4j/helpers/PatternConverter.java
@@ -96,14 +96,15 @@ public abstract class PatternConverter {
*/
public
void spacePad(final StringBuffer sbuf, final int length) {
- while(length >= 32) {
+ int l = length;
+ while(l >= 32) {
sbuf.append(SPACES[5]);
- length -= 32;
+ l -= 32;
}
for(int i = 4; i >= 0; i--) {
- if((length & (1<<i)) != 0) {
- sbuf.append(SPACES[i]);
+ if((l & (1<<i)) != 0) {
+ sbuf.append(SPACES[i]);
}
}
}
diff --git
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
index d1c30be157..d7344c30d4 100644
---
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
+++
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/MapMessageTest.java
@@ -187,7 +187,8 @@ public class MapMessageTest {
public static String testJsonFormatterMaxDepth(final int depth) {
List<Object> list = new LinkedList<>();
list.add(1);
- while (--depth > 0) {
+ int currentDepth = depth;
+ while (--currentDepth > 0) {
list = new LinkedList<>(Collections.singletonList(list));
}
return new ObjectMapMessage()
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
index 473024f9cf..6e5ec79627 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/MemoryMappedFileManager.java
@@ -125,14 +125,16 @@ public class MemoryMappedFileManager extends
OutputStreamManager {
@Override
protected synchronized void write(final byte[] bytes, final int offset,
final int length, final boolean immediateFlush) {
- while (length > mappedBuffer.remaining()) {
+ int currentOffset = offset;
+ int currentLength = length;
+ while (currentLength > mappedBuffer.remaining()) {
final int chunk = mappedBuffer.remaining();
- mappedBuffer.put(bytes, offset, chunk);
- offset += chunk;
- length -= chunk;
+ mappedBuffer.put(bytes, currentOffset, chunk);
+ currentOffset += chunk;
+ currentLength -= chunk;
remap();
}
- mappedBuffer.put(bytes, offset, length);
+ mappedBuffer.put(bytes, currentOffset, currentLength);
// no need to call flush() if force is true,
// already done in AbstractOutputStreamAppender.append
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ByteBufferDestinationHelper.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ByteBufferDestinationHelper.java
index 7b552d304c..1c2107e2ea 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ByteBufferDestinationHelper.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/ByteBufferDestinationHelper.java
@@ -60,14 +60,16 @@ public final class ByteBufferDestinationHelper {
public static void writeToUnsynchronized(final byte[] data, final int
offset, final int length,
final ByteBufferDestination destination) {
ByteBuffer buffer = destination.getByteBuffer();
- while (length > buffer.remaining()) {
+ int currentOffset = offset;
+ int currentLength = length;
+ while (currentLength > buffer.remaining()) {
final int chunk = buffer.remaining();
- buffer.put(data, offset, chunk);
- offset += chunk;
- length -= chunk;
+ buffer.put(data, currentOffset, chunk);
+ currentOffset += chunk;
+ currentLength -= chunk;
buffer = destination.drain(buffer);
}
- buffer.put(data, offset, length);
+ buffer.put(data, currentOffset, currentLength);
// No drain in the end.
}
}
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrMatcher.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrMatcher.java
index 67924e160a..701fbaf8e2 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrMatcher.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/lookup/StrMatcher.java
@@ -359,8 +359,9 @@ public abstract class StrMatcher {
if (pos + len > bufferEnd) {
return 0;
}
- for (int i = 0; i < chars.length; i++, pos++) {
- if (chars[i] != buffer[pos]) {
+ int p = pos;
+ for (int i = 0; i < chars.length; i++, p++) {
+ if (chars[i] != buffer[p]) {
return 0;
}
}
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java
index e212b09a54..2613c2a434 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/LevelPatternConverter.java
@@ -33,7 +33,7 @@ import org.apache.logging.log4j.util.PerformanceSensitive;
@Plugin(name = "LevelPatternConverter", category = PatternConverter.CATEGORY)
@ConverterKeys({"p", "level"})
@PerformanceSensitive("allocation")
-public final class LevelPatternConverter extends LogEventPatternConverter {
+public abstract class LevelPatternConverter extends LogEventPatternConverter {
private static final String OPTION_LENGTH = "length";
private static final String OPTION_LOWER = "lowerCase";
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
index 04164dbb7c..d9fd5a9804 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/MessagePatternConverter.java
@@ -38,7 +38,7 @@ import org.apache.logging.log4j.util.Strings;
@Plugin(name = "MessagePatternConverter", category = PatternConverter.CATEGORY)
@ConverterKeys({"m", "msg", "message"})
@PerformanceSensitive("allocation")
-public final class MessagePatternConverter extends LogEventPatternConverter {
+public abstract class MessagePatternConverter extends LogEventPatternConverter
{
private static final String LOOKUPS = "lookups";
private static final String NOLOOKUPS = "nolookups";
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/StringEncoder.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/StringEncoder.java
index b94e4a3700..5a61db64b8 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/StringEncoder.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/StringEncoder.java
@@ -92,22 +92,24 @@ public final class StringEncoder {
int byteOffset = 0;
int length = Math.min(charLength, byteArray.length);
int charDoneIndex = charOffset + length;
- while (charOffset < charDoneIndex) {
- final int done = encodeIsoChars(charArray, charOffset, byteArray,
byteOffset, length);
- charOffset += done;
+ int currentCharOffset = charOffset;
+ int currentCharLength = charLength;
+ while (currentCharOffset < charDoneIndex) {
+ final int done = encodeIsoChars(charArray, currentCharOffset,
byteArray, byteOffset, length);
+ currentCharOffset += done;
byteOffset += done;
if (done != length) {
- final char c = charArray.charAt(charOffset++);
- if ((Character.isHighSurrogate(c)) && (charOffset <
charDoneIndex)
- &&
(Character.isLowSurrogate(charArray.charAt(charOffset)))) {
- if (charLength > byteArray.length) {
+ final char c = charArray.charAt(currentCharOffset++);
+ if ((Character.isHighSurrogate(c)) && (currentCharOffset <
charDoneIndex)
+ &&
(Character.isLowSurrogate(charArray.charAt(currentCharOffset)))) {
+ if (currentCharLength > byteArray.length) {
charDoneIndex++;
- charLength--;
+ currentCharLength--;
}
- charOffset++;
+ currentCharOffset++;
}
byteArray[(byteOffset++)] = '?';
- length = Math.min(charDoneIndex - charOffset, byteArray.length
- byteOffset);
+ length = Math.min(charDoneIndex - currentCharOffset,
byteArray.length - byteOffset);
}
}
return byteOffset;
diff --git
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java
index e90a263512..f6d210d1df 100644
---
a/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java
+++
b/log4j-core/src/main/java/org/apache/logging/log4j/core/util/datetime/FixedDateFormat.java
@@ -355,33 +355,33 @@ public class FixedDateFormat {
// 262 bytes (will be inlined when hot enough: <=
-XX:FreqInlineSize=325 bytes on Linux)
private int write(final int offset, final char[] buffer, final int
pos) {
// This method duplicates part of writeTime()
-
- buffer[pos++] = offset < 0 ? '-' : '+';
+ int p = pos;
+ buffer[p++] = offset < 0 ? '-' : '+';
final int absOffset = Math.abs(offset);
final int hours = absOffset / 3600000;
int ms = absOffset - (3600000 * hours);
// Hour
int temp = hours / 10;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (hours - 10 * temp + '0'));
+ buffer[p++] = ((char) (hours - 10 * temp + '0'));
// Minute
if (useMinutes) {
- buffer[pos] = timeSeparatorChar;
- pos += timeSeparatorCharLen;
+ buffer[p] = timeSeparatorChar;
+ p += timeSeparatorCharLen;
final int minutes = ms / 60000;
ms -= 60000 * minutes;
temp = minutes / 10;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (minutes - 10 * temp + '0'));
+ buffer[p++] = ((char) (minutes - 10 * temp + '0'));
}
- return pos;
+ return p;
}
}
diff --git
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StringEncodingBenchmark.java
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StringEncodingBenchmark.java
index fc1abe66f0..2c686a5057 100644
---
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StringEncodingBenchmark.java
+++
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/StringEncodingBenchmark.java
@@ -204,22 +204,24 @@ public class StringEncodingBenchmark {
int offset = 0;
int length = Math.min(charLength, byteArray.length);
int charDoneIndex = charOffset + length;
- while (charOffset < charDoneIndex) {
- final int m = encodeISOArray(charArray, charOffset, byteArray,
offset, length);
- charOffset += m;
+ int currentCharOffset = charOffset;
+ int currentCharLength = charLength;
+ while (currentCharOffset < charDoneIndex) {
+ final int m = encodeISOArray(charArray, currentCharOffset,
byteArray, offset, length);
+ currentCharOffset += m;
offset += m;
if (m != length) {
- final char c = charArray.charAt(charOffset++);
- if ((Character.isHighSurrogate(c)) && (charOffset <
charDoneIndex)
- &&
(Character.isLowSurrogate(charArray.charAt(charOffset)))) {
- if (charLength > byteArray.length) {
+ final char c = charArray.charAt(currentCharOffset++);
+ if ((Character.isHighSurrogate(c)) && (currentCharOffset <
charDoneIndex)
+ &&
(Character.isLowSurrogate(charArray.charAt(currentCharOffset)))) {
+ if (currentCharLength > byteArray.length) {
charDoneIndex++;
- charLength--;
+ currentCharLength--;
}
- charOffset++;
+ currentCharOffset++;
}
byteArray[(offset++)] = '?';
- length = Math.min(charDoneIndex - charOffset, byteArray.length
- offset);
+ length = Math.min(charDoneIndex - currentCharOffset,
byteArray.length - offset);
}
}
return offset;
@@ -252,22 +254,24 @@ public class StringEncodingBenchmark {
int offset = 0;
int length = Math.min(charLength, byteArray.length);
int charDoneIndex = charOffset + length;
- while (charOffset < charDoneIndex) {
- final int m = encodeISOArray0(charArray, charOffset, byteArray,
offset, length);
- charOffset += m;
+ int currentCharOffset = charOffset;
+ int currentCharLength = charLength;
+ while (currentCharOffset < charDoneIndex) {
+ final int m = encodeISOArray0(charArray, currentCharOffset,
byteArray, offset, length);
+ currentCharOffset += m;
offset += m;
if (m != length) {
- final char c = charArray[(charOffset++)];
- if ((Character.isHighSurrogate(c)) && (charOffset <
charDoneIndex)
- &&
(Character.isLowSurrogate(charArray[(charOffset)]))) {
- if (charLength > byteArray.length) {
+ final char c = charArray[(currentCharOffset++)];
+ if ((Character.isHighSurrogate(c)) && (currentCharOffset <
charDoneIndex)
+ &&
(Character.isLowSurrogate(charArray[(currentCharOffset)]))) {
+ if (currentCharLength > byteArray.length) {
charDoneIndex++;
- charLength--;
+ currentCharLength--;
}
- charOffset++;
+ currentCharOffset++;
}
byteArray[(offset++)] = '?';
- length = Math.min(charDoneIndex - charOffset, byteArray.length
- offset);
+ length = Math.min(charDoneIndex - currentCharOffset,
byteArray.length - offset);
}
}
return offset;
diff --git
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TimeFormatBenchmark.java
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TimeFormatBenchmark.java
index bc7b4273be..699a253c54 100644
---
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TimeFormatBenchmark.java
+++
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/jmh/TimeFormatBenchmark.java
@@ -167,40 +167,41 @@ public class TimeFormatBenchmark {
// Hour
// 13/128 is nearly the same as /10 for values up to 65
int temp = (hour * 13) >> 7;
- buffer[pos++] = ((char) (temp + '0'));
+ int p = pos;
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (hour - 10 * temp + '0'));
- buffer[pos++] = ((char) ':');
+ buffer[p++] = ((char) (hour - 10 * temp + '0'));
+ buffer[p++] = ((char) ':');
// Minute
// 13/128 is nearly the same as /10 for values up to 65
temp = (minute * 13) >> 7;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (minute - 10 * temp + '0'));
- buffer[pos++] = ((char) ':');
+ buffer[p++] = ((char) (minute - 10 * temp + '0'));
+ buffer[p++] = ((char) ':');
// Second
// 13/128 is nearly the same as /10 for values up to 65
temp = (second * 13) >> 7;
- buffer[pos++] = ((char) (temp + '0'));
- buffer[pos++] = ((char) (second - 10 * temp + '0'));
- buffer[pos++] = ((char) '.');
+ buffer[p++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (second - 10 * temp + '0'));
+ buffer[p++] = ((char) '.');
// Millisecond
// 41/4096 is nearly the same as /100
temp = (ms * 41) >> 12;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
ms -= 100 * temp;
temp = (ms * 205) >> 11; // 205/2048 is nearly the same as /10
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
ms -= 10 * temp;
- buffer[pos++] = ((char) (ms + '0'));
- return pos;
+ buffer[p++] = ((char) (ms + '0'));
+ return p;
}
StringBuilder formatStringBuilder(final long time, final StringBuilder
buffer) {
@@ -274,36 +275,37 @@ public class TimeFormatBenchmark {
// Hour
int temp = hours / 10;
- buffer[pos++] = ((char) (temp + '0'));
+ int p = pos;
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (hours - 10 * temp + '0'));
- buffer[pos++] = ((char) ':');
+ buffer[p++] = ((char) (hours - 10 * temp + '0'));
+ buffer[p++] = ((char) ':');
// Minute
temp = minutes / 10;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
// Do subtract to get remainder instead of doing % 10
- buffer[pos++] = ((char) (minutes - 10 * temp + '0'));
- buffer[pos++] = ((char) ':');
+ buffer[p++] = ((char) (minutes - 10 * temp + '0'));
+ buffer[p++] = ((char) ':');
// Second
temp = seconds / 10;
- buffer[pos++] = ((char) (temp + '0'));
- buffer[pos++] = ((char) (seconds - 10 * temp + '0'));
- buffer[pos++] = ((char) '.');
+ buffer[p++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (seconds - 10 * temp + '0'));
+ buffer[p++] = ((char) '.');
// Millisecond
temp = ms / 100;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
ms -= 100 * temp;
temp = ms / 10;
- buffer[pos++] = ((char) (temp + '0'));
+ buffer[p++] = ((char) (temp + '0'));
ms -= 10 * temp;
- buffer[pos++] = ((char) (ms + '0'));
- return pos;
+ buffer[p++] = ((char) (ms + '0'));
+ return p;
}
}
diff --git
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
index b5b5ace8f3..db9979161e 100644
---
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
+++
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/nogc/OpenHashStringMap.java
@@ -818,12 +818,13 @@ public class OpenHashStringMap<K, V> implements
StringMap, ThreadContextMap {
* @return a hash value with good avalanching properties.
*/
public static int murmurHash3(final int x) {
- x ^= x >>> 16;
- x *= 0x85ebca6b;
- x ^= x >>> 13;
- x *= 0xc2b2ae35;
- x ^= x >>> 16;
- return x;
+ int h = x;
+ h ^= h >>> 16;
+ h *= 0x85ebca6b;
+ h ^= h >>> 13;
+ h *= 0xc2b2ae35;
+ h ^= h >>> 16;
+ return h;
}
/**
@@ -863,12 +864,13 @@ public class OpenHashStringMap<K, V> implements
StringMap, ThreadContextMap {
if (x == 0) {
return 1;
}
- x--;
- x |= x >> 1;
- x |= x >> 2;
- x |= x >> 4;
- x |= x >> 8;
- return (x | x >> 16) + 1;
+ int r = x;
+ r--;
+ r |= r >> 1;
+ r |= r >> 2;
+ r |= r >> 4;
+ r |= r >> 8;
+ return (r | r >> 16) + 1;
}
/** Return the least power of two greater than or equal to the
specified value.
@@ -882,13 +884,14 @@ public class OpenHashStringMap<K, V> implements
StringMap, ThreadContextMap {
if (x == 0) {
return 1;
}
- x--;
- x |= x >> 1;
- x |= x >> 2;
- x |= x >> 4;
- x |= x >> 8;
- x |= x >> 16;
- return (x | x >> 32) + 1;
+ long r = x;
+ r--;
+ r |= r >> 1;
+ r |= r >> 2;
+ r |= r >> 4;
+ r |= r >> 8;
+ r |= r >> 16;
+ return (r | r >> 32) + 1;
}
diff --git
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/util/StackDriver.java
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/util/StackDriver.java
index c40d60b0d0..30f88655be 100644
---
a/log4j-perf/src/main/java/org/apache/logging/log4j/perf/util/StackDriver.java
+++
b/log4j-perf/src/main/java/org/apache/logging/log4j/perf/util/StackDriver.java
@@ -24,18 +24,20 @@ import java.util.function.Function;
*/
public class StackDriver {
public StackTraceElement deepCall(final int initialDepth, final Integer
targetDepth, final Function<String, StackTraceElement> supplier) {
- if (--initialDepth == 0) {
+ int depth = initialDepth;
+ if (--depth == 0) {
final Processor processor = new Processor();
return processor.apply(targetDepth, supplier);
}
- return deepCall(initialDepth, targetDepth, supplier);
+ return deepCall(depth, targetDepth, supplier);
}
public static class Processor implements BiFunction<Integer,
Function<String, StackTraceElement>, StackTraceElement> {
private static final String FQCN = Processor.class.getName();
@Override
- public StackTraceElement apply(final Integer depth, final
Function<String, StackTraceElement> function) {
+ public StackTraceElement apply(final Integer initialDepth, final
Function<String, StackTraceElement> function) {
+ int depth = initialDepth;
if (--depth == 0) {
return function.apply(FQCN);
}