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

Print this page

        

*** 60,69 **** --- 60,71 ---- import jdk.internal.org.objectweb.asm.AnnotationVisitor; import jdk.internal.org.objectweb.asm.Attribute; import jdk.internal.org.objectweb.asm.FieldVisitor; import jdk.internal.org.objectweb.asm.Opcodes; + import jdk.internal.org.objectweb.asm.TypePath; + import jdk.internal.org.objectweb.asm.TypeReference; /** * A {@link FieldVisitor} that checks that its methods are properly used. */ public class CheckFieldAdapter extends FieldVisitor {
*** 73,114 **** /** * Constructs a new {@link CheckFieldAdapter}. <i>Subclasses must not use * this constructor</i>. Instead, they must use the * {@link #CheckFieldAdapter(int, FieldVisitor)} version. * ! * @param fv the field visitor to which this adapter must delegate calls. */ public CheckFieldAdapter(final FieldVisitor fv) { ! this(Opcodes.ASM4, fv); } /** * Constructs a new {@link CheckFieldAdapter}. * ! * @param api the ASM API version implemented by this visitor. Must be one ! * of {@link Opcodes#ASM4}. ! * @param fv the field visitor to which this adapter must delegate calls. */ protected CheckFieldAdapter(final int api, final FieldVisitor fv) { super(api, fv); } @Override ! public AnnotationVisitor visitAnnotation( ! final String desc, ! final boolean visible) ! { checkEnd(); CheckMethodAdapter.checkDesc(desc, false); return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible)); } @Override public void visitAttribute(final Attribute attr) { checkEnd(); if (attr == null) { ! throw new IllegalArgumentException("Invalid attribute (must not be null)"); } super.visitAttribute(attr); } @Override --- 75,133 ---- /** * Constructs a new {@link CheckFieldAdapter}. <i>Subclasses must not use * this constructor</i>. Instead, they must use the * {@link #CheckFieldAdapter(int, FieldVisitor)} version. * ! * @param fv ! * the field visitor to which this adapter must delegate calls. */ public CheckFieldAdapter(final FieldVisitor fv) { ! this(Opcodes.ASM5, fv); } /** * Constructs a new {@link CheckFieldAdapter}. * ! * @param api ! * the ASM API version implemented by this visitor. Must be one ! * of {@link Opcodes#ASM4} or {@link Opcodes#ASM5}. ! * @param fv ! * the field visitor to which this adapter must delegate calls. */ protected CheckFieldAdapter(final int api, final FieldVisitor fv) { super(api, fv); } @Override ! public AnnotationVisitor visitAnnotation(final String desc, ! final boolean visible) { checkEnd(); CheckMethodAdapter.checkDesc(desc, false); return new CheckAnnotationAdapter(super.visitAnnotation(desc, visible)); } @Override + public AnnotationVisitor visitTypeAnnotation(final int typeRef, + final TypePath typePath, final String desc, final boolean visible) { + checkEnd(); + int sort = typeRef >>> 24; + if (sort != TypeReference.FIELD) { + throw new IllegalArgumentException("Invalid type reference sort 0x" + + Integer.toHexString(sort)); + } + CheckClassAdapter.checkTypeRefAndPath(typeRef, typePath); + CheckMethodAdapter.checkDesc(desc, false); + return new CheckAnnotationAdapter(super.visitTypeAnnotation(typeRef, + typePath, desc, visible)); + } + + @Override public void visitAttribute(final Attribute attr) { checkEnd(); if (attr == null) { ! throw new IllegalArgumentException( ! "Invalid attribute (must not be null)"); } super.visitAttribute(attr); } @Override
*** 118,126 **** super.visitEnd(); } private void checkEnd() { if (end) { ! throw new IllegalStateException("Cannot call a visit method after visitEnd has been called"); } } } --- 137,146 ---- super.visitEnd(); } private void checkEnd() { if (end) { ! throw new IllegalStateException( ! "Cannot call a visit method after visitEnd has been called"); } } }