diff --git a/tools/mkstubs/.classpath b/tools/mkstubs/.classpath index 49a6d6ca0..1b7d34b52 100644 --- a/tools/mkstubs/.classpath +++ b/tools/mkstubs/.classpath @@ -1,9 +1,9 @@ - - - - - - - - - + + + + + + + + + diff --git a/tools/mkstubs/Android.mk b/tools/mkstubs/Android.mk index a12bf1845..3e46a1d05 100644 --- a/tools/mkstubs/Android.mk +++ b/tools/mkstubs/Android.mk @@ -20,7 +20,7 @@ LOCAL_SRC_FILES := $(call all-java-files-under,src) LOCAL_JAR_MANIFEST := manifest.txt LOCAL_STATIC_JAVA_LIBRARIES := \ - asm-3.1 + asm-4.0 LOCAL_MODULE := mkstubs diff --git a/tools/mkstubs/src/com/android/mkstubs/FilterClassAdapter.java b/tools/mkstubs/src/com/android/mkstubs/FilterClassAdapter.java index 6f570c70b..e875f10cc 100644 --- a/tools/mkstubs/src/com/android/mkstubs/FilterClassAdapter.java +++ b/tools/mkstubs/src/com/android/mkstubs/FilterClassAdapter.java @@ -20,7 +20,6 @@ import com.android.mkstubs.Main.Logger; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; -import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; @@ -30,14 +29,14 @@ import org.objectweb.asm.Opcodes; * A class visitor that filters out all members (fields, methods and inner classes) that are * either private, default-access or rejected by the {@link Filter}. */ -class FilterClassAdapter extends ClassAdapter { +class FilterClassAdapter extends ClassVisitor { private final Logger mLog; private final Filter mFilter; private String mClassName; public FilterClassAdapter(ClassVisitor writer, Filter filter, Logger log) { - super(writer); + super(Opcodes.ASM4, writer); mFilter = filter; mLog = log; } diff --git a/tools/mkstubs/src/com/android/mkstubs/sourcer/AnnotationSourcer.java b/tools/mkstubs/src/com/android/mkstubs/sourcer/AnnotationSourcer.java index d2843a8ef..ea3ca67c7 100644 --- a/tools/mkstubs/src/com/android/mkstubs/sourcer/AnnotationSourcer.java +++ b/tools/mkstubs/src/com/android/mkstubs/sourcer/AnnotationSourcer.java @@ -17,11 +17,12 @@ package com.android.mkstubs.sourcer; import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.Opcodes; /** * An annotation visitor that generates Java source for an annotation. */ -class AnnotationSourcer implements AnnotationVisitor { +class AnnotationSourcer extends AnnotationVisitor { private final String mOpenChar; private final String mCloseChar; @@ -33,11 +34,13 @@ class AnnotationSourcer implements AnnotationVisitor { } public AnnotationSourcer(Output output, boolean isArray) { + super(Opcodes.ASM4); mOutput = output; mOpenChar = isArray ? "[" : "("; mCloseChar = isArray ? "]" : ")"; } + @Override public void visit(String name, Object value) { startOpen(); @@ -56,6 +59,7 @@ class AnnotationSourcer implements AnnotationVisitor { } } + @Override public void visitEnd() { if (mNeedClose) { mOutput.write(mCloseChar); @@ -63,18 +67,21 @@ class AnnotationSourcer implements AnnotationVisitor { mOutput.write("\n"); } + @Override public AnnotationVisitor visitAnnotation(String name, String desc) { startOpen(); - + mOutput.write("@%s", name); return this; } + @Override public AnnotationVisitor visitArray(String name) { startOpen(); return new AnnotationSourcer(mOutput, true /*isArray*/); } + @Override public void visitEnum(String name, String desc, String value) { mOutput.write("/* annotation enum not supported: %s */\n", name); } diff --git a/tools/mkstubs/src/com/android/mkstubs/sourcer/ClassSourcer.java b/tools/mkstubs/src/com/android/mkstubs/sourcer/ClassSourcer.java index 3d95039bd..c005b0c4f 100644 --- a/tools/mkstubs/src/com/android/mkstubs/sourcer/ClassSourcer.java +++ b/tools/mkstubs/src/com/android/mkstubs/sourcer/ClassSourcer.java @@ -27,23 +27,25 @@ import org.objectweb.asm.signature.SignatureReader; /** * A class visitor that writes a java source. */ -public class ClassSourcer implements ClassVisitor { +public class ClassSourcer extends ClassVisitor { private final Output mOutput; private final AccessSourcer mAccessSourcer; private String mClassName; public ClassSourcer(Output output) { + super(Opcodes.ASM4); mOutput = output; mAccessSourcer = new AccessSourcer(mOutput); } - + /* Examples: * name = com/foo/MyClass * signature = null (if not generic) * superName = java/lang/Object * interfaces = [ java/lang/Runnable ... ] */ + @Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { @@ -63,13 +65,13 @@ public class ClassSourcer implements ClassVisitor { SignatureReader sigReader = new SignatureReader(signature); SignatureSourcer sigSourcer = new SignatureSourcer(); sigReader.accept(sigSourcer); - + if (sigSourcer.hasFormalsContent()) { mOutput.write(sigSourcer.formalsToString()); } mOutput.write(" extends %s", sigSourcer.getSuperClass().toString()); - + } else { // write non-generic super type mOutput.write(" extends %s", superName.replace('/', '.')); @@ -87,35 +89,40 @@ public class ClassSourcer implements ClassVisitor { need_sep = true; } } - + // open class body mOutput.write(" {\n"); } + @Override public void visitEnd() { mOutput.write("}\n"); } + @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { mOutput.write("@%s", desc); return new AnnotationSourcer(mOutput); } + @Override public void visitAttribute(Attribute attr) { mOutput.write("%s /* non-standard class attribute */ ", attr.type); } + @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { // skip synthetic fields if ((access & Opcodes.ACC_SYNTHETIC) != 0) { return null; } - + return new FieldSourcer(mOutput, access, name, desc, signature); } + @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { @@ -123,15 +130,18 @@ public class ClassSourcer implements ClassVisitor { return new MethodSourcer(mOutput, mClassName, access, name, desc, signature, exceptions); } + @Override public void visitInnerClass(String name, String outerName, String innerName, int access) { // Skip inner classes. This just indicates there's an inner class definition but // they are visited at the top level as separate classes. } + @Override public void visitOuterClass(String owner, String name, String desc) { // Skip outer classes. } + @Override public void visitSource(String source, String debug) { // Skip source information. } diff --git a/tools/mkstubs/src/com/android/mkstubs/sourcer/FieldSourcer.java b/tools/mkstubs/src/com/android/mkstubs/sourcer/FieldSourcer.java index 7f30a2440..68eae7186 100644 --- a/tools/mkstubs/src/com/android/mkstubs/sourcer/FieldSourcer.java +++ b/tools/mkstubs/src/com/android/mkstubs/sourcer/FieldSourcer.java @@ -19,13 +19,14 @@ package com.android.mkstubs.sourcer; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; import org.objectweb.asm.FieldVisitor; +import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.signature.SignatureReader; /** - * A field visitor that generates Java source defining a field. + * A field visitor that generates Java source defining a field. */ -class FieldSourcer implements FieldVisitor { +class FieldSourcer extends FieldVisitor { private final Output mOutput; private final int mAccess; @@ -34,6 +35,7 @@ class FieldSourcer implements FieldVisitor { private final String mSignature; public FieldSourcer(Output output, int access, String name, String desc, String signature) { + super(Opcodes.ASM4); mOutput = output; mAccess = access; mName = name; @@ -41,21 +43,24 @@ class FieldSourcer implements FieldVisitor { mSignature = signature; } + @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { mOutput.write("@%s", desc); return new AnnotationSourcer(mOutput); } + @Override public void visitAttribute(Attribute attr) { mOutput.write("%s /* non-standard attribute */ ", attr.type); } + @Override public void visitEnd() { // Need to write type and field name after the annotations and attributes. AccessSourcer as = new AccessSourcer(mOutput); as.write(mAccess, AccessSourcer.IS_FIELD); - + if (mSignature == null) { mOutput.write(" %s", Type.getType(mDesc).getClassName()); } else { diff --git a/tools/mkstubs/src/com/android/mkstubs/sourcer/MethodSourcer.java b/tools/mkstubs/src/com/android/mkstubs/sourcer/MethodSourcer.java index f58de3249..26e8870ec 100644 --- a/tools/mkstubs/src/com/android/mkstubs/sourcer/MethodSourcer.java +++ b/tools/mkstubs/src/com/android/mkstubs/sourcer/MethodSourcer.java @@ -20,15 +20,16 @@ import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.signature.SignatureReader; import java.util.ArrayList; /** - * A method visitor that generates the Java source for a whole method. + * A method visitor that generates the Java source for a whole method. */ -class MethodSourcer implements MethodVisitor { +class MethodSourcer extends MethodVisitor { private final Output mOutput; private final int mAccess; @@ -42,6 +43,7 @@ class MethodSourcer implements MethodVisitor { public MethodSourcer(Output output, String className, int access, String name, String desc, String signature, String[] exceptions) { + super(Opcodes.ASM4); mOutput = output; mClassName = className; mAccess = access; @@ -49,16 +51,16 @@ class MethodSourcer implements MethodVisitor { mDesc = desc; mSignature = signature; mExceptions = exceptions; - + mNeedDeclaration = true; mIsConstructor = "".equals(name); } - - private void writeHeader() { + + private void writeHeader() { if (!mNeedDeclaration) { return; } - + AccessSourcer as = new AccessSourcer(mOutput); as.write(mAccess, AccessSourcer.IS_METHOD); @@ -68,19 +70,19 @@ class MethodSourcer implements MethodVisitor { SignatureReader sigReader = new SignatureReader(mSignature); sigSourcer = new SignatureSourcer(); sigReader.accept(sigSourcer); - + if (sigSourcer.hasFormalsContent()) { // dump formal template parameter definitions mOutput.write(" %s", sigSourcer.formalsToString()); } } - + // output return type (constructor have no return type) if (!mIsConstructor) { // The signature overrides desc, if present if (sigSourcer == null || sigSourcer.getReturnType() == null) { mOutput.write(" %s", Type.getReturnType(mDesc).getClassName()); - + } else { mOutput.write(" %s", sigSourcer.getReturnType().toString()); } @@ -88,11 +90,11 @@ class MethodSourcer implements MethodVisitor { // output name mOutput.write(" %s(", mIsConstructor ? mClassName : mName); - + // output arguments. The signature overrides desc, if present if (mSignature == null) { Type[] types = Type.getArgumentTypes(mDesc); - + for(int i = 0; i < types.length; i++) { if (i > 0) { mOutput.write(", "); @@ -101,7 +103,7 @@ class MethodSourcer implements MethodVisitor { } } else { ArrayList params = sigSourcer.getParameters(); - + for(int i = 0; i < params.size(); i++) { if (i > 0) { mOutput.write(", "); @@ -114,7 +116,7 @@ class MethodSourcer implements MethodVisitor { // output throwable exceptions if (mExceptions != null && mExceptions.length > 0) { mOutput.write(" throws "); - + for (int i = 0; i < mExceptions.length; i++) { if (i > 0) { mOutput.write(", "); @@ -128,106 +130,130 @@ class MethodSourcer implements MethodVisitor { mNeedDeclaration = false; } + @Override public void visitCode() { writeHeader(); - + // write the stub itself mOutput.write("throw new RuntimeException(\"Stub\");"); } + @Override public void visitEnd() { writeHeader(); mOutput.write("\n}\n"); } + @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { mOutput.write("@%s", desc); return new AnnotationSourcer(mOutput); } + @Override public AnnotationVisitor visitAnnotationDefault() { // pass return null; } + @Override public void visitAttribute(Attribute attr) { mOutput.write("%s /* non-standard method attribute */ ", attr.type); } + @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { // pass } + @Override public void visitFrame(int type, int local, Object[] local2, int stack, Object[] stack2) { // pass } + @Override public void visitIincInsn(int var, int increment) { // pass } + @Override public void visitInsn(int opcode) { // pass } + @Override public void visitIntInsn(int opcode, int operand) { // pass } + @Override public void visitJumpInsn(int opcode, Label label) { // pass } + @Override public void visitLabel(Label label) { // pass } + @Override public void visitLdcInsn(Object cst) { // pass } + @Override public void visitLineNumber(int line, Label start) { // pass } + @Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { // pass } + @Override public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { // pass } + @Override public void visitMaxs(int maxStack, int maxLocals) { // pass } + @Override public void visitMethodInsn(int opcode, String owner, String name, String desc) { // pass } + @Override public void visitMultiANewArrayInsn(String desc, int dims) { // pass } + @Override public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { // pass return null; } + @Override public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { // pass } + @Override public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { // pass } + @Override public void visitTypeInsn(int opcode, String type) { // pass } + @Override public void visitVarInsn(int opcode, int var) { // pass } diff --git a/tools/mkstubs/src/com/android/mkstubs/sourcer/SignatureSourcer.java b/tools/mkstubs/src/com/android/mkstubs/sourcer/SignatureSourcer.java index 7805d7df8..ab9094558 100644 --- a/tools/mkstubs/src/com/android/mkstubs/sourcer/SignatureSourcer.java +++ b/tools/mkstubs/src/com/android/mkstubs/sourcer/SignatureSourcer.java @@ -16,6 +16,7 @@ package com.android.mkstubs.sourcer; +import org.objectweb.asm.Opcodes; import org.objectweb.asm.Type; import org.objectweb.asm.signature.SignatureReader; import org.objectweb.asm.signature.SignatureVisitor; @@ -36,12 +37,12 @@ import java.util.ArrayList; *

* Note: When processing a method's signature, the signature order is the reverse of the source * order, e.g. the signature is written as "(parameters)return-type" where we want to generate - * "return-type method-name (parameters)". To hanlde this case, the return-type and parameters + * "return-type method-name (parameters)". To handle this case, the return-type and parameters * are not output directly but are instead accumulated in internal variables that you can * get later using {@link #getReturnType()}, {@link #getParameters()}, {@link #getSuperClass()} * and {@link #formalsToString()}. */ -class SignatureSourcer implements SignatureVisitor { +class SignatureSourcer extends SignatureVisitor { /** * Buffer used to construct the signature. @@ -85,13 +86,14 @@ class SignatureSourcer implements SignatureVisitor { private ArrayList mParameters = new ArrayList(); - + /** * Constructs a new {@link SignatureWriter} object. */ public SignatureSourcer() { + super(Opcodes.ASM4); } - + private StringBuilder getBuf() { if (mWritingFormals) { return mFormalsBuf; @@ -117,7 +119,7 @@ class SignatureSourcer implements SignatureVisitor { public SignatureSourcer getReturnType() { return mReturnType; } - + /** * Will be non-empty if a parameters were processed * by {@link SignatureReader#accept(SignatureVisitor)} @@ -125,19 +127,19 @@ class SignatureSourcer implements SignatureVisitor { public ArrayList getParameters() { return mParameters; } - + /** - * True if the signature contains formal type parameters, which are available + * True if the signature contains formal type parameters, which are available * via {@link #formalsToString()} after calling {@link SignatureReader#accept(SignatureVisitor)} */ public boolean hasFormalsContent() { return mFormalsBuf.length() > 0; } - + public String formalsToString() { return mFormalsBuf.toString(); } - + /** * Will be non-null if a super class was processed * by {@link SignatureReader#accept(SignatureVisitor)} @@ -150,6 +152,7 @@ class SignatureSourcer implements SignatureVisitor { // Implementation of the SignatureVisitor interface // ------------------------------------------------------------------------ + @Override public void visitFormalTypeParameter(final String name) { if (!mWritingFormals) { mWritingFormals = true; @@ -161,16 +164,19 @@ class SignatureSourcer implements SignatureVisitor { getBuf().append(" extends "); } + @Override public SignatureVisitor visitClassBound() { - // we don't differentiate between visiting a sub class or interface type + // we don't differentiate between visiting a sub class or interface type return this; } + @Override public SignatureVisitor visitInterfaceBound() { - // we don't differentiate between visiting a sub class or interface type + // we don't differentiate between visiting a sub class or interface type return this; } + @Override public SignatureVisitor visitSuperclass() { endFormals(); SignatureSourcer sourcer = new SignatureSourcer(); @@ -179,10 +185,12 @@ class SignatureSourcer implements SignatureVisitor { return sourcer; } + @Override public SignatureVisitor visitInterface() { return this; } + @Override public SignatureVisitor visitParameterType() { endFormals(); SignatureSourcer sourcer = new SignatureSourcer(); @@ -190,6 +198,7 @@ class SignatureSourcer implements SignatureVisitor { return sourcer; } + @Override public SignatureVisitor visitReturnType() { endFormals(); SignatureSourcer sourcer = new SignatureSourcer(); @@ -198,29 +207,35 @@ class SignatureSourcer implements SignatureVisitor { return sourcer; } + @Override public SignatureVisitor visitExceptionType() { getBuf().append('^'); return this; } + @Override public void visitBaseType(final char descriptor) { getBuf().append(Type.getType(Character.toString(descriptor)).getClassName()); } + @Override public void visitTypeVariable(final String name) { getBuf().append(name.replace('/', '.')); } + @Override public SignatureVisitor visitArrayType() { getBuf().append('['); return this; } + @Override public void visitClassType(final String name) { getBuf().append(name.replace('/', '.')); mArgumentStack *= 2; } + @Override public void visitInnerClassType(final String name) { endArguments(); getBuf().append('.'); @@ -228,6 +243,7 @@ class SignatureSourcer implements SignatureVisitor { mArgumentStack *= 2; } + @Override public void visitTypeArgument() { if (mArgumentStack % 2 == 0) { ++mArgumentStack; @@ -238,6 +254,7 @@ class SignatureSourcer implements SignatureVisitor { getBuf().append('*'); } + @Override public SignatureVisitor visitTypeArgument(final char wildcard) { if (mArgumentStack % 2 == 0) { ++mArgumentStack; @@ -258,6 +275,7 @@ class SignatureSourcer implements SignatureVisitor { return this; } + @Override public void visitEnd() { endArguments(); } diff --git a/tools/mkstubs/src/com/android/mkstubs/stubber/ClassStubber.java b/tools/mkstubs/src/com/android/mkstubs/stubber/ClassStubber.java index 8f9ae113c..f66c7a7f1 100644 --- a/tools/mkstubs/src/com/android/mkstubs/stubber/ClassStubber.java +++ b/tools/mkstubs/src/com/android/mkstubs/stubber/ClassStubber.java @@ -18,19 +18,19 @@ package com.android.mkstubs.stubber; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; -import org.objectweb.asm.ClassAdapter; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.FieldVisitor; import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; /** * A class visitor that generates stubs for all methods of the visited class. * Everything else is passed as-is. */ -public class ClassStubber extends ClassAdapter { +public class ClassStubber extends ClassVisitor { public ClassStubber(ClassVisitor cv) { - super(cv); + super(Opcodes.ASM4, cv); } @Override @@ -41,45 +41,45 @@ public class ClassStubber extends ClassAdapter { String[] interfaces) { super.visit(version, access, name, signature, superName, interfaces); } - + @Override public void visitEnd() { super.visitEnd(); } - + @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return super.visitAnnotation(desc, visible); } - + @Override public void visitAttribute(Attribute attr) { super.visitAttribute(attr); } - + @Override public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { MethodVisitor mw = super.visitMethod(access, name, desc, signature, exceptions); return new MethodStubber(mw, access, name, desc, signature, exceptions); } - + @Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { return super.visitField(access, name, desc, signature, value); } - + @Override public void visitInnerClass(String name, String outerName, String innerName, int access) { super.visitInnerClass(name, outerName, innerName, access); } - + @Override public void visitOuterClass(String owner, String name, String desc) { super.visitOuterClass(owner, name, desc); } - + @Override public void visitSource(String source, String debug) { super.visitSource(source, debug); diff --git a/tools/mkstubs/src/com/android/mkstubs/stubber/MethodStubber.java b/tools/mkstubs/src/com/android/mkstubs/stubber/MethodStubber.java index 161780995..89aa221ef 100644 --- a/tools/mkstubs/src/com/android/mkstubs/stubber/MethodStubber.java +++ b/tools/mkstubs/src/com/android/mkstubs/stubber/MethodStubber.java @@ -19,7 +19,6 @@ package com.android.mkstubs.stubber; import org.objectweb.asm.AnnotationVisitor; import org.objectweb.asm.Attribute; import org.objectweb.asm.Label; -import org.objectweb.asm.MethodAdapter; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; @@ -32,13 +31,13 @@ import org.objectweb.asm.Opcodes; * Note that constructors rewritten this way will probably fail with the runtime bytecode * verifier since no call to super is generated. */ -public class MethodStubber extends MethodAdapter { +public class MethodStubber extends MethodVisitor { public MethodStubber(MethodVisitor mw, int access, String name, String desc, String signature, String[] exceptions) { - super(mw); + super(Opcodes.ASM4, mw); } - + @Override public void visitCode() { Label l0 = new Label(); @@ -64,7 +63,7 @@ public class MethodStubber extends MethodAdapter { 0); // index mv.visitMaxs(3, 1); // maxStack, maxLocals } - + @Override public void visitEnd() { super.visitEnd(); @@ -74,110 +73,110 @@ public class MethodStubber extends MethodAdapter { public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return super.visitAnnotation(desc, visible); } - + @Override public AnnotationVisitor visitAnnotationDefault() { return super.visitAnnotationDefault(); } - + @Override public void visitAttribute(Attribute attr) { super.visitAttribute(attr); } - + @Override public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) { return super.visitParameterAnnotation(parameter, desc, visible); } // -- stuff that gets skipped - + @Override public void visitFieldInsn(int opcode, String owner, String name, String desc) { // skip } - + @Override public void visitFrame(int type, int local, Object[] local2, int stack, Object[] stack2) { // skip } - + @Override public void visitIincInsn(int var, int increment) { // skip } - + @Override public void visitInsn(int opcode) { // skip } - + @Override public void visitIntInsn(int opcode, int operand) { // skip } - + @Override public void visitJumpInsn(int opcode, Label label) { // skip } - + @Override public void visitLabel(Label label) { // skip } - + @Override public void visitLdcInsn(Object cst) { // skip } - + @Override public void visitLineNumber(int line, Label start) { // skip } - + @Override public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index) { // skip } - + @Override public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) { // skip } - + @Override public void visitMaxs(int maxStack, int maxLocals) { // skip } - + @Override public void visitMethodInsn(int opcode, String owner, String name, String desc) { // skip } - + @Override public void visitMultiANewArrayInsn(String desc, int dims) { // skip } - + @Override public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) { // skip } - + @Override public void visitTryCatchBlock(Label start, Label end, Label handler, String type) { // skip } - + @Override public void visitTypeInsn(int opcode, String type) { // skip } - + @Override public void visitVarInsn(int opcode, int var) { // skip