Source:
public static StubJarClassEntry of( LibraryReader input, Path path, @Nullable AbiGenerationMode compatibilityMode, boolean isKotlinModule, Map<String, List<String>> inlineFunctionsMap) throws IOException { ClassNode stub = new ClassNode(Opcodes.ASM7); List<String> methodBodiesToRetain = Collections.emptyList(); boolean isKotlinClass = false; boolean retainAllMethodBodies = false; if (isKotlinModule) { AnnotationNode kotlinMetadataAnnotation = findKotlinMetadataAnnotation(input, path); if (kotlinMetadataAnnotation != null) { isKotlinClass = true; if (path.toString().contains("$sam$i")) { input.visitClass(path, stub, false); return new StubJarClassEntry( path, stub, Collections.emptySet(), Collections.emptyList(), true); } ClassNode dummyStub = new ClassNode(Opcodes.ASM7); input.visitClass(path, dummyStub, true); retainAllMethodBodies = retainAllMethodBodies( inlineFunctionsMap, path, dummyStub.outerClass, dummyStub.outerMethod); if (retainAllMethodBodies) { methodBodiesToRetain = dummyStub.methods.stream() .map(methodNode -> methodNode.name) .collect(Collectors.toList()); } else { methodBodiesToRetain = KotlinMetadataReaderKt.getInlineFunctions(kotlinMetadataAnnotation); } } } ClassReferenceTracker referenceTracker = new ClassReferenceTracker(stub); ClassVisitor firstLevelFiltering = new AbiFilteringClassVisitor(referenceTracker, methodBodiesToRetain); if (compatibilityMode != null && compatibilityMode != AbiGenerationMode.CLASS) { firstLevelFiltering = new SourceAbiCompatibleVisitor(firstLevelFiltering, compatibilityMode); } input.visitClass(path, firstLevelFiltering, !isKotlinClass); if (!((isSyntheticClass(stub) && !isKotlinModule) || isAnonymousOrLocalClass(stub)) || retainAllMethodBodies || stub.name.endsWith("/package-info")) { return new StubJarClassEntry( path, stub, referenceTracker.getReferencedClassNames(), methodBodiesToRetain, false); } return null; }

Target:
public static StubJarClassEntry of( LibraryReader input, Path path, @Nullable AbiGenerationMode compatibilityMode, boolean isKotlinModule, Map<String, List<String>> inlineFunctionsMap) throws IOException { ClassNode stub = new ClassNode(Opcodes.ASM7); List<String> methodBodiesToRetain = Collections.emptyList(); boolean isKotlinClass = false; boolean retainAllMethodBodies = false; if (isKotlinModule) { AnnotationNode kotlinMetadataAnnotation = findKotlinMetadataAnnotation(input, path); if (kotlinMetadataAnnotation != null) { isKotlinClass = true; if (path.toString().contains("$sam$i")) { input.visitClass(path, stub, false); return new StubJarClassEntry( path, stub, Collections.emptySet(), Collections.emptyList(), true); } ClassNode dummyStub = new ClassNode(Opcodes.ASM7); input.visitClass(path, dummyStub, true); retainAllMethodBodies = retainAllMethodBodies( inlineFunctionsMap, path, dummyStub.outerClass, dummyStub.outerMethod); if (retainAllMethodBodies) { methodBodiesToRetain = dummyStub.methods.stream() .map(methodNode -> methodNode.name) .collect(Collectors.toList()); } else { methodBodiesToRetain = KotlinMetadataReaderKt.getInlineFunctions(kotlinMetadataAnnotation); } } } ClassReferenceTracker referenceTracker = new ClassReferenceTracker(stub); ClassVisitor firstLevelFiltering = new AbiFilteringClassVisitor(referenceTracker, methodBodiesToRetain); if (compatibilityMode != null && compatibilityMode != AbiGenerationMode.CLASS) { firstLevelFiltering = new SourceAbiCompatibleVisitor(firstLevelFiltering, compatibilityMode); } input.visitClass(path, firstLevelFiltering, !isKotlinClass); if ((isSyntheticClass(stub) && isKotlinModule) || !(isSyntheticClass(stub) || isAnonymousOrLocalClass(stub)) || retainAllMethodBodies || stub.name.endsWith("/package-info")) { return new StubJarClassEntry( path, stub, referenceTracker.getReferencedClassNames(), methodBodiesToRetain, false); } return null; }