// Path: jar-analyzer/src/main/java/mb/jar_analyzer/jar/ClassProcessor.java
// @FunctionalInterface
// public interface ClassProcessor {
// 
//     void accept(ClassReader classReader);
// 
// }


import java.io.PrintStream;
import java.util.Optional;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import mb.jar_analyzer.jar.ClassProcessor;
        out.println(name);
        out.println("S " + superName);
        for(String intf : interfaceNames) {
            out.println("I " + intf);
        }
    }

    @Override public void visitOuterClass(String owner, String name, String desc) {
        out.println("O " + owner);
    }

    @Override public void visitInnerClass(String name, String outerName, String innerName, int access) {
        if(outerName == null || outerName.equals(currentName)) {
            out.println("C " + innerName + " " + name + " (in " + outerName + ")");
        }
    }

    @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
        out.println("F " + name);
        final Type type = Type.getType(desc);
        getReferenceType(type).ifPresent(t -> {
            out.println("  T " + t);
        });
        return new FieldVisitor(this.api) {

        };
    }

    @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature,
            String[] exceptions) {
// Path: jar-analyzer/src/main/java/mb/jar_analyzer/jar/ClassProcessor.java
// @FunctionalInterface
// public interface ClassProcessor {
// 
//     void accept(ClassReader classReader);
// 
// }


// Path: jar-analyzer/src/main/java/mb/jar_analyzer/SummaryPrinter.java
import java.io.PrintStream;
import java.util.Optional;
import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.FieldVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.Type;
import mb.jar_analyzer.jar.ClassProcessor;

        out.println(name);
        out.println("S " + superName);
        for(String intf : interfaceNames) {
            out.println("I " + intf);
        }
    }

    @Override public void visitOuterClass(String owner, String name, String desc) {
        out.println("O " + owner);
    }

    @Override public void visitInnerClass(String name, String outerName, String innerName, int access) {
        if(outerName == null || outerName.equals(currentName)) {
            out.println("C " + innerName + " " + name + " (in " + outerName + ")");
        }
    }

    @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
        out.println("F " + name);
        final Type type = Type.getType(desc);
        getReferenceType(type).ifPresent(t -> {
            out.println("  T " + t);
        });
        return new FieldVisitor(this.api) {

        };
    }

    @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature,
            String[] exceptions) {
        out.println("M " + name);