private void handleTraceEntry()

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);
    }