src/share/classes/jdk/internal/org/objectweb/asm/util/Printer.java

Print this page

        

*** 64,73 **** --- 64,74 ---- import jdk.internal.org.objectweb.asm.Attribute; import jdk.internal.org.objectweb.asm.Handle; import jdk.internal.org.objectweb.asm.Label; import jdk.internal.org.objectweb.asm.Opcodes; + import jdk.internal.org.objectweb.asm.TypePath; /** * An abstract converter from visit events to text. * * @author Eric Bruneton
*** 143,153 **** } } /** * The ASM API version implemented by this class. The value of this field ! * must be one of {@link Opcodes#ASM4}. */ protected final int api; /** * A buffer that can be used to create strings. --- 144,154 ---- } } /** * The ASM API version implemented by this class. The value of this field ! * must be one of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}. */ protected final int api; /** * A buffer that can be used to create strings.
*** 176,518 **** this.buf = new StringBuffer(); this.text = new ArrayList<Object>(); } /** ! * Class header. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visit}. */ ! public abstract void visit( ! final int version, ! final int access, ! final String name, ! final String signature, ! final String superName, final String[] interfaces); /** ! * Class source. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitSource}. */ public abstract void visitSource(final String file, final String debug); /** ! * Class outer class. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitOuterClass}. */ ! public abstract void visitOuterClass( ! final String owner, ! final String name, final String desc); /** ! * Class annotation. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitAnnotation}. */ ! public abstract Printer visitClassAnnotation( ! final String desc, final boolean visible); /** ! * Class attribute. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitAttribute}. */ public abstract void visitClassAttribute(final Attribute attr); /** ! * Class inner name. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitInnerClass}. */ ! public abstract void visitInnerClass( ! final String name, ! final String outerName, ! final String innerName, ! final int access); /** ! * Class field. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitField}. */ ! public abstract Printer visitField( ! final int access, ! final String name, ! final String desc, ! final String signature, ! final Object value); /** ! * Class method. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitMethod}. */ ! public abstract Printer visitMethod( ! final int access, ! final String name, ! final String desc, ! final String signature, ! final String[] exceptions); /** ! * Class end. ! * See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitEnd}. */ public abstract void visitClassEnd(); // ------------------------------------------------------------------------ // Annotations // ------------------------------------------------------------------------ /** ! * Annotation value. ! * See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visit}. */ public abstract void visit(final String name, final Object value); /** ! * Annotation enum value. ! * See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitEnum}. */ ! public abstract void visitEnum( ! final String name, ! final String desc, final String value); /** ! * Nested annotation value. ! * See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitAnnotation}. */ ! public abstract Printer visitAnnotation( ! final String name, ! final String desc); /** ! * Annotation array value. ! * See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitArray}. */ public abstract Printer visitArray(final String name); /** ! * Annotation end. ! * See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitEnd}. */ public abstract void visitAnnotationEnd(); // ------------------------------------------------------------------------ // Fields // ------------------------------------------------------------------------ /** ! * Field annotation. ! * See {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitAnnotation}. */ ! public abstract Printer visitFieldAnnotation( ! final String desc, final boolean visible); /** ! * Field attribute. ! * See {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitAttribute}. */ public abstract void visitFieldAttribute(final Attribute attr); /** ! * Field end. ! * See {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitEnd}. */ public abstract void visitFieldEnd(); // ------------------------------------------------------------------------ // Methods // ------------------------------------------------------------------------ /** ! * Method default annotation. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAnnotationDefault}. */ public abstract Printer visitAnnotationDefault(); /** ! * Method annotation. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAnnotation}. */ ! public abstract Printer visitMethodAnnotation( ! final String desc, final boolean visible); /** ! * Method parameter annotation. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitParameterAnnotation}. */ ! public abstract Printer visitParameterAnnotation( ! final int parameter, ! final String desc, ! final boolean visible); /** ! * Method attribute. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAttribute}. */ public abstract void visitMethodAttribute(final Attribute attr); /** ! * Method start. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitCode}. */ public abstract void visitCode(); /** ! * Method stack frame. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitFrame}. */ ! public abstract void visitFrame( ! final int type, ! final int nLocal, ! final Object[] local, ! final int nStack, ! final Object[] stack); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitInsn}. */ public abstract void visitInsn(final int opcode); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitIntInsn}. */ public abstract void visitIntInsn(final int opcode, final int operand); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitVarInsn}. */ public abstract void visitVarInsn(final int opcode, final int var); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTypeInsn}. */ public abstract void visitTypeInsn(final int opcode, final String type); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitFieldInsn}. */ ! public abstract void visitFieldInsn( ! final int opcode, ! final String owner, ! final String name, ! final String desc); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMethodInsn}. */ ! public abstract void visitMethodInsn( ! final int opcode, ! final String owner, ! final String name, ! final String desc); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitInvokeDynamicInsn}. */ ! public abstract void visitInvokeDynamicInsn( ! String name, ! String desc, ! Handle bsm, ! Object... bsmArgs); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitJumpInsn}. */ public abstract void visitJumpInsn(final int opcode, final Label label); /** ! * Method label. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLabel}. */ public abstract void visitLabel(final Label label); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLdcInsn}. */ public abstract void visitLdcInsn(final Object cst); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitIincInsn}. */ public abstract void visitIincInsn(final int var, final int increment); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTableSwitchInsn}. */ ! public abstract void visitTableSwitchInsn( ! final int min, ! final int max, ! final Label dflt, ! final Label... labels); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLookupSwitchInsn}. */ ! public abstract void visitLookupSwitchInsn( ! final Label dflt, ! final int[] keys, ! final Label[] labels); /** ! * Method instruction. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMultiANewArrayInsn}. */ ! public abstract void visitMultiANewArrayInsn( ! final String desc, final int dims); /** ! * Method exception handler. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTryCatchBlock}. */ ! public abstract void visitTryCatchBlock( ! final Label start, ! final Label end, ! final Label handler, ! final String type); /** ! * Method debug info. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLocalVariable}. */ ! public abstract void visitLocalVariable( ! final String name, ! final String desc, ! final String signature, ! final Label start, ! final Label end, ! final int index); /** ! * Method debug info. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLineNumber}. */ public abstract void visitLineNumber(final int line, final Label start); /** ! * Method max stack and max locals. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMaxs}. */ public abstract void visitMaxs(final int maxStack, final int maxLocals); /** ! * Method end. ! * See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitEnd}. */ public abstract void visitMethodEnd(); /** * Returns the text constructed by this visitor. --- 177,519 ---- this.buf = new StringBuffer(); this.text = new ArrayList<Object>(); } /** ! * Class header. See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visit}. */ ! public abstract void visit(final int version, final int access, ! final String name, final String signature, final String superName, final String[] interfaces); /** ! * Class source. See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitSource}. */ public abstract void visitSource(final String file, final String debug); /** ! * Class outer class. See ! * {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitOuterClass}. */ ! public abstract void visitOuterClass(final String owner, final String name, final String desc); /** ! * Class annotation. See ! * {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitAnnotation}. */ ! public abstract Printer visitClassAnnotation(final String desc, final boolean visible); /** ! * Class type annotation. See ! * {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitTypeAnnotation}. */ + public Printer visitClassTypeAnnotation(final int typeRef, + final TypePath typePath, final String desc, final boolean visible) { + throw new RuntimeException("Must be overriden"); + } + + /** + * Class attribute. See + * {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitAttribute}. + */ public abstract void visitClassAttribute(final Attribute attr); /** ! * Class inner name. See ! * {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitInnerClass}. */ ! public abstract void visitInnerClass(final String name, ! final String outerName, final String innerName, final int access); /** ! * Class field. See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitField}. */ ! public abstract Printer visitField(final int access, final String name, ! final String desc, final String signature, final Object value); /** ! * Class method. See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitMethod}. */ ! public abstract Printer visitMethod(final int access, final String name, ! final String desc, final String signature, final String[] exceptions); /** ! * Class end. See {@link jdk.internal.org.objectweb.asm.ClassVisitor#visitEnd}. */ public abstract void visitClassEnd(); // ------------------------------------------------------------------------ // Annotations // ------------------------------------------------------------------------ /** ! * Annotation value. See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visit}. */ public abstract void visit(final String name, final Object value); /** ! * Annotation enum value. See ! * {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitEnum}. */ ! public abstract void visitEnum(final String name, final String desc, final String value); /** ! * Nested annotation value. See ! * {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitAnnotation}. */ ! public abstract Printer visitAnnotation(final String name, final String desc); /** ! * Annotation array value. See ! * {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitArray}. */ public abstract Printer visitArray(final String name); /** ! * Annotation end. See {@link jdk.internal.org.objectweb.asm.AnnotationVisitor#visitEnd}. */ public abstract void visitAnnotationEnd(); // ------------------------------------------------------------------------ // Fields // ------------------------------------------------------------------------ /** ! * Field annotation. See ! * {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitAnnotation}. */ ! public abstract Printer visitFieldAnnotation(final String desc, final boolean visible); /** ! * Field type annotation. See ! * {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitTypeAnnotation}. */ + public Printer visitFieldTypeAnnotation(final int typeRef, + final TypePath typePath, final String desc, final boolean visible) { + throw new RuntimeException("Must be overriden"); + } + + /** + * Field attribute. See + * {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitAttribute}. + */ public abstract void visitFieldAttribute(final Attribute attr); /** ! * Field end. See {@link jdk.internal.org.objectweb.asm.FieldVisitor#visitEnd}. */ public abstract void visitFieldEnd(); // ------------------------------------------------------------------------ // Methods // ------------------------------------------------------------------------ /** ! * Method parameter. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitParameter(String, int)}. */ + public void visitParameter(String name, int access) { + throw new RuntimeException("Must be overriden"); + } + + /** + * Method default annotation. See + * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAnnotationDefault}. + */ public abstract Printer visitAnnotationDefault(); /** ! * Method annotation. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAnnotation}. */ ! public abstract Printer visitMethodAnnotation(final String desc, final boolean visible); /** ! * Method type annotation. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTypeAnnotation}. */ ! public Printer visitMethodTypeAnnotation(final int typeRef, ! final TypePath typePath, final String desc, final boolean visible) { ! throw new RuntimeException("Must be overriden"); ! } /** ! * Method parameter annotation. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitParameterAnnotation}. */ + public abstract Printer visitParameterAnnotation(final int parameter, + final String desc, final boolean visible); + + /** + * Method attribute. See + * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitAttribute}. + */ public abstract void visitMethodAttribute(final Attribute attr); /** ! * Method start. See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitCode}. */ public abstract void visitCode(); /** ! * Method stack frame. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitFrame}. */ ! public abstract void visitFrame(final int type, final int nLocal, ! final Object[] local, final int nStack, final Object[] stack); /** ! * Method instruction. See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitInsn} ! * . */ public abstract void visitInsn(final int opcode); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitIntInsn}. */ public abstract void visitIntInsn(final int opcode, final int operand); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitVarInsn}. */ public abstract void visitVarInsn(final int opcode, final int var); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTypeInsn}. */ public abstract void visitTypeInsn(final int opcode, final String type); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitFieldInsn}. */ ! public abstract void visitFieldInsn(final int opcode, final String owner, ! final String name, final String desc); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMethodInsn}. */ ! public abstract void visitMethodInsn(final int opcode, final String owner, ! final String name, final String desc); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitInvokeDynamicInsn}. */ ! public abstract void visitInvokeDynamicInsn(String name, String desc, ! Handle bsm, Object... bsmArgs); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitJumpInsn}. */ public abstract void visitJumpInsn(final int opcode, final Label label); /** ! * Method label. See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLabel}. */ public abstract void visitLabel(final Label label); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLdcInsn}. */ public abstract void visitLdcInsn(final Object cst); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitIincInsn}. */ public abstract void visitIincInsn(final int var, final int increment); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTableSwitchInsn}. */ ! public abstract void visitTableSwitchInsn(final int min, final int max, ! final Label dflt, final Label... labels); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLookupSwitchInsn}. */ ! public abstract void visitLookupSwitchInsn(final Label dflt, ! final int[] keys, final Label[] labels); /** ! * Method instruction. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMultiANewArrayInsn}. */ ! public abstract void visitMultiANewArrayInsn(final String desc, final int dims); /** ! * Instruction type annotation. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitInsnAnnotation}. */ ! public Printer visitInsnAnnotation(final int typeRef, ! final TypePath typePath, final String desc, final boolean visible) { ! throw new RuntimeException("Must be overriden"); ! } /** ! * Method exception handler. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTryCatchBlock}. */ ! public abstract void visitTryCatchBlock(final Label start, final Label end, ! final Label handler, final String type); /** ! * Try catch block type annotation. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTryCatchAnnotation}. */ + public Printer visitTryCatchAnnotation(final int typeRef, + final TypePath typePath, final String desc, final boolean visible) { + throw new RuntimeException("Must be overriden"); + } + + /** + * Method debug info. See + * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLocalVariable}. + */ + public abstract void visitLocalVariable(final String name, + final String desc, final String signature, final Label start, + final Label end, final int index); + + /** + * Local variable type annotation. See + * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitTryCatchAnnotation}. + */ + public Printer visitLocalVariableAnnotation(final int typeRef, + final TypePath typePath, final Label[] start, final Label[] end, + final int[] index, final String desc, final boolean visible) { + throw new RuntimeException("Must be overriden"); + } + + /** + * Method debug info. See + * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitLineNumber}. + */ public abstract void visitLineNumber(final int line, final Label start); /** ! * Method max stack and max locals. See ! * {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitMaxs}. */ public abstract void visitMaxs(final int maxStack, final int maxLocals); /** ! * Method end. See {@link jdk.internal.org.objectweb.asm.MethodVisitor#visitEnd}. */ public abstract void visitMethodEnd(); /** * Returns the text constructed by this visitor.
*** 524,544 **** } /** * Prints the text constructed by this visitor. * ! * @param pw the print writer to be used. */ public void print(final PrintWriter pw) { printList(pw, text); } /** * Appends a quoted string to a given buffer. * ! * @param buf the buffer where the string must be added. ! * @param s the string to be added. */ public static void appendString(final StringBuffer buf, final String s) { buf.append('\"'); for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i); --- 525,548 ---- } /** * Prints the text constructed by this visitor. * ! * @param pw ! * the print writer to be used. */ public void print(final PrintWriter pw) { printList(pw, text); } /** * Appends a quoted string to a given buffer. * ! * @param buf ! * the buffer where the string must be added. ! * @param s ! * the string to be added. */ public static void appendString(final StringBuffer buf, final String s) { buf.append('\"'); for (int i = 0; i < s.length(); ++i) { char c = s.charAt(i);
*** 568,580 **** } /** * Prints the given string tree. * ! * @param pw the writer to be used to print the tree. ! * @param l a string tree, i.e., a string list that can contain other string ! * lists, and so on recursively. */ static void printList(final PrintWriter pw, final List<?> l) { for (int i = 0; i < l.size(); ++i) { Object o = l.get(i); if (o instanceof List) { --- 572,586 ---- } /** * Prints the given string tree. * ! * @param pw ! * the writer to be used to print the tree. ! * @param l ! * a string tree, i.e., a string list that can contain other ! * string lists, and so on recursively. */ static void printList(final PrintWriter pw, final List<?> l) { for (int i = 0; i < l.size(); ++i) { Object o = l.get(i); if (o instanceof List) {