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) {