in log4j-weaver/src/main/java/org/apache/logging/log4j/weaver/log4j2/LoggerConversionHandler.java [255:292]
private void handleTraceEntry(LocationMethodVisitor mv, String descriptor) {
final Type[] types = Type.getArgumentTypes(descriptor);
final int[] vars = new int[types.length];
for (int i = vars.length - 1; i >= 0; i--) {
vars[i] = mv.nextLocal();
mv.storeLocal(vars[i]);
}
// only Logger on stack
mv.dup();
final int loggerIdx = mv.nextLocal();
mv.storeLocal(loggerIdx, LOGGER_TYPE);
mv.invokeInterface(LOGGER_TYPE, AT_TRACE_METHOD);
mv.storeLocation();
mv.getStatic(ABSTRACT_LOGGER_TYPE, ENTRY_MARKER, MARKER_TYPE);
mv.invokeInterface(LOG_BUILDER_TYPE, WITH_MARKER_METHOD);
mv.loadLocal(loggerIdx, LOGGER_TYPE);
if (types.length == 0) {
mv.push((String) null);
mv.push((String) null);
mv.invokeSupplierLambda(SupplierLambdaType.ENTRY_MESSAGE_STRING_OBJECTS);
} else if (types[0].equals(MESSAGE_TYPE)) {
mv.loadLocal(vars[0]);
mv.invokeSupplierLambda(SupplierLambdaType.ENTRY_MESSAGE_MESSAGE);
} else {
if (types.length == 1) {
mv.push((String) null);
}
for (int i = 0; i < vars.length; i++) {
mv.loadLocal(vars[i]);
}
final boolean usesSuppliers = types[types.length - 1].equals(SUPPLIER_ARRAY_TYPE);
mv.invokeSupplierLambda(
usesSuppliers
? SupplierLambdaType.ENTRY_MESSAGE_STRING_SUPPLIERS
: SupplierLambdaType.ENTRY_MESSAGE_STRING_OBJECTS);
}
mv.invokeInterface(LOG_BUILDER_TYPE, LOG_AND_GET_METHOD);
}