From 36e63f0a974966f7fcb06e6bedc67fb6172dbb0d Mon Sep 17 00:00:00 2001 From: Michael Ernst Date: Fri, 11 Oct 2024 08:34:46 -0700 Subject: [PATCH 1/5] Add annotations --- .../objectweb/asm/tree/analysis/Analyzer.java | 8 +- .../asm/tree/analysis/MethodNodeBuilder.java | 2 +- .../asm/tree/analysis/SimpleVerifierTest.java | 2 +- .../objectweb/asm/commons/AdviceAdapter.java | 12 +- .../asm/commons/AnalyzerAdapter.java | 16 +-- .../objectweb/asm/commons/ClassRemapper.java | 24 ++-- .../asm/commons/CodeSizeEvaluator.java | 10 +- .../asm/commons/GeneratorAdapter.java | 6 +- .../asm/commons/InstructionAdapter.java | 34 +++--- .../asm/commons/JSRInlinerAdapter.java | 4 +- .../org/objectweb/asm/commons/Method.java | 2 +- .../objectweb/asm/commons/MethodRemapper.java | 12 +- .../objectweb/asm/commons/ModuleRemapper.java | 8 +- .../org/objectweb/asm/commons/Remapper.java | 24 ++-- .../asm/commons/SerialVersionUIDAdder.java | 22 ++-- .../objectweb/asm/commons/SimpleRemapper.java | 4 +- .../asm/commons/StaticInitMerger.java | 10 +- .../asm/commons/TryCatchBlockSorter.java | 4 +- .../asm/commons/AdviceAdapterTest.java | 2 +- .../asm/commons/AnalyzerAdapterTest.java | 20 ++-- .../asm/commons/ClassRemapperTest.java | 19 +-- .../asm/commons/CodeSizeEvaluatorTest.java | 2 +- .../asm/commons/InstructionAdapterTest.java | 2 +- .../asm/commons/JsrInlinerAdapterTest.java | 2 +- .../asm/commons/LocalVariablesSorterTest.java | 2 +- .../asm/commons/MethodNodeBuilder.java | 4 +- .../asm/commons/TryCatchBlockSorterTest.java | 2 +- .../java/org/objectweb/asm/test/AsmTest.java | 6 +- .../org/objectweb/asm/tree/ClassNode.java | 34 +++--- .../org/objectweb/asm/tree/FieldInsnNode.java | 8 +- .../org/objectweb/asm/tree/FieldNode.java | 12 +- .../objectweb/asm/tree/InnerClassNode.java | 8 +- .../objectweb/asm/tree/MethodInsnNode.java | 6 +- .../org/objectweb/asm/tree/MethodNode.java | 20 ++-- .../objectweb/asm/tree/ModuleExportNode.java | 6 +- .../org/objectweb/asm/tree/ModuleNode.java | 22 ++-- .../objectweb/asm/tree/ModuleOpenNode.java | 6 +- .../objectweb/asm/tree/ModuleProvideNode.java | 6 +- .../objectweb/asm/tree/ModuleRequireNode.java | 4 +- .../objectweb/asm/tree/TryCatchBlockNode.java | 4 +- .../org/objectweb/asm/tree/TypeInsnNode.java | 4 +- .../org/objectweb/asm/tree/ClassNodeTest.java | 18 +-- .../objectweb/asm/tree/MethodNodeTest.java | 2 +- .../java/org/objectweb/asm/util/ASMifier.java | 40 +++---- .../objectweb/asm/util/CheckClassAdapter.java | 30 ++--- .../asm/util/CheckFrameAnalyzer.java | 8 +- .../asm/util/CheckMethodAdapter.java | 16 +-- .../asm/util/CheckModuleAdapter.java | 14 +-- .../java/org/objectweb/asm/util/Printer.java | 50 ++++---- .../org/objectweb/asm/util/Textifier.java | 66 +++++------ .../objectweb/asm/util/TraceClassVisitor.java | 22 ++-- .../asm/util/TraceMethodVisitor.java | 12 +- .../asm/util/TraceModuleVisitor.java | 8 +- .../org/objectweb/asm/util/PrinterTest.java | 20 ++-- .../asm/util/SignaturesProviders.java | 12 +- .../asm/util/TraceClassVisitorTest.java | 6 +- .../java/org/objectweb/asm/ClassReader.java | 97 ++++++++-------- .../objectweb/asm/ClassTooLargeException.java | 8 +- .../java/org/objectweb/asm/ClassVisitor.java | 30 +++-- .../java/org/objectweb/asm/ClassWriter.java | 56 +++++---- .../org/objectweb/asm/ConstantDynamic.java | 7 +- .../java/org/objectweb/asm/Constants.java | 6 +- .../java/org/objectweb/asm/FieldVisitor.java | 2 +- .../java/org/objectweb/asm/FieldWriter.java | 4 +- .../main/java/org/objectweb/asm/Frame.java | 28 ++--- .../main/java/org/objectweb/asm/Handle.java | 10 +- .../main/java/org/objectweb/asm/Handler.java | 6 +- .../asm/MethodTooLargeException.java | 13 ++- .../java/org/objectweb/asm/MethodVisitor.java | 34 +++--- .../java/org/objectweb/asm/MethodWriter.java | 24 ++-- .../java/org/objectweb/asm/ModuleVisitor.java | 17 +-- .../java/org/objectweb/asm/ModuleWriter.java | 17 +-- .../main/java/org/objectweb/asm/Symbol.java | 6 +- .../java/org/objectweb/asm/SymbolTable.java | 59 +++++----- asm/src/main/java/org/objectweb/asm/Type.java | 20 ++-- .../asm/signature/SignatureReader.java | 6 +- .../asm/signature/SignatureVisitor.java | 3 +- .../objectweb/asm/AnnotationVisitorTest.java | 4 +- .../org/objectweb/asm/ClassReaderTest.java | 44 +++---- .../org/objectweb/asm/ClassVisitorTest.java | 32 +++--- .../asm/ClassWriterComputeMaxsTest.java | 2 +- .../objectweb/asm/ClassWriterFlagsTest.java | 2 +- .../org/objectweb/asm/ClassWriterTest.java | 32 +++--- .../org/objectweb/asm/MethodVisitorTest.java | 20 ++-- .../test/java/org/objectweb/asm/TypeTest.java | 2 +- .../asm/signature/SignaturesProviders.java | 12 +- .../org/objectweb/asm/benchmarks/Adapter.java | 6 +- .../objectweb/asm/benchmarks/AsmAdapter.java | 30 ++--- .../asm/benchmarks/TypeBenchmark.java | 16 +-- build.gradle | 23 ++++ .../org/objectweb/asm/tools/Retrofitter.java | 108 ++++++++++-------- 91 files changed, 807 insertions(+), 708 deletions(-) diff --git a/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/Analyzer.java b/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/Analyzer.java index 668a81ef..d4496f76 100644 --- a/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/Analyzer.java +++ b/asm-analysis/src/main/java/org/objectweb/asm/tree/analysis/Analyzer.java @@ -103,7 +103,7 @@ public Analyzer(final Interpreter interpreter) { * @throws AnalyzerException if a problem occurs during the analysis. */ @SuppressWarnings("unchecked") - public Frame[] analyze(final String owner, final MethodNode method) throws AnalyzerException { + public Frame[] analyze(final @InternalForm String owner, final MethodNode method) throws AnalyzerException { if ((method.access & (ACC_ABSTRACT | ACC_NATIVE)) != 0) { frames = (Frame[]) new Frame[0]; return frames; @@ -307,7 +307,7 @@ public Frame[] analyze(final String owner, final MethodNode method) throws An * instruction cannot be reached (dead code). * @throws AnalyzerException if a problem occurs during the analysis. */ - public Frame[] analyzeAndComputeMaxs(final String owner, final MethodNode method) + public Frame[] analyzeAndComputeMaxs(final @InternalForm String owner, final MethodNode method) throws AnalyzerException { method.maxLocals = computeMaxLocals(method); method.maxStack = -1; @@ -492,7 +492,7 @@ private void findSubroutine( * @param method the method to be analyzed. * @return the initial execution stack frame of the 'method'. */ - private Frame computeInitialFrame(final String owner, final MethodNode method) { + private Frame computeInitialFrame(final @InternalForm String owner, final MethodNode method) { Frame frame = newFrame(method.maxLocals, method.maxStack); int currentLocal = 0; boolean isInstanceMethod = (method.access & ACC_STATIC) == 0; @@ -552,7 +552,7 @@ public List getHandlers(final int insnIndex) { * @param method the method to be analyzed. * @throws AnalyzerException if a problem occurs. */ - protected void init(final String owner, final MethodNode method) throws AnalyzerException { + protected void init(final @InternalForm String owner, final MethodNode method) throws AnalyzerException { // Nothing to do. } diff --git a/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/MethodNodeBuilder.java b/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/MethodNodeBuilder.java index 6051488a..a87e7f93 100644 --- a/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/MethodNodeBuilder.java +++ b/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/MethodNodeBuilder.java @@ -75,7 +75,7 @@ MethodNodeBuilder typeInsn(final int opcode, final String operand) { MethodNodeBuilder methodInsn( final int opcode, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { diff --git a/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java b/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java index 034ade19..99f95a12 100644 --- a/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java +++ b/asm-analysis/src/test/java/org/objectweb/asm/tree/analysis/SimpleVerifierTest.java @@ -62,7 +62,7 @@ void testConstructor() { "java/util/Map, java/util/List, java/lang/Object" }) void testMerge_objectTypes( - final String internalName1, final String internalName2, final String expectedInternalName) { + final @InternalForm String internalName1, final @InternalForm String internalName2, final @InternalForm String expectedInternalName) { BasicValue value1 = new BasicValue(Type.getObjectType(internalName1)); BasicValue value2 = new BasicValue(Type.getObjectType(internalName2)); SimpleVerifier verifier = new SimpleVerifier(); diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/AdviceAdapter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/AdviceAdapter.java index 8f1ad1b8..c72cf64c 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/AdviceAdapter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/AdviceAdapter.java @@ -364,7 +364,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { super.visitFieldInsn(opcode, owner, name, descriptor); if (isConstructor && !superClassConstructorCalled) { char firstDescriptorChar = descriptor.charAt(0); @@ -422,7 +422,7 @@ public void visitLdcInsn(final Object value) { } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { super.visitMultiANewArrayInsn(descriptor, numDimensions); if (isConstructor && !superClassConstructorCalled) { for (int i = 0; i < numDimensions; i++) { @@ -433,7 +433,7 @@ public void visitMultiANewArrayInsn(final String descriptor, final int numDimens } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { super.visitTypeInsn(opcode, type); // ANEWARRAY, CHECKCAST or INSTANCEOF don't change stack. if (isConstructor && !superClassConstructorCalled && opcode == NEW) { @@ -444,8 +444,8 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -567,7 +567,7 @@ public void visitTableSwitchInsn( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { super.visitTryCatchBlock(start, end, handler, type); // By definition of 'forwardJumpStackFrames', 'handler' should be pushed only if there is an // instruction between 'start' and 'end' at which the super class constructor is not yet diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/AnalyzerAdapter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/AnalyzerAdapter.java index c97a79e2..39f1e769 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/AnalyzerAdapter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/AnalyzerAdapter.java @@ -97,7 +97,7 @@ public class AnalyzerAdapter extends MethodVisitor { private int maxLocals; /** The owner's class name. */ - private String owner; + private @InternalForm String owner; /** * Constructs a new {@link AnalyzerAdapter}. Subclasses must not use this constructor. @@ -113,7 +113,7 @@ public class AnalyzerAdapter extends MethodVisitor { * @throws IllegalStateException If a subclass calls this constructor. */ public AnalyzerAdapter( - final String owner, + final @InternalForm String owner, final int access, final String name, final String descriptor, @@ -138,7 +138,7 @@ public AnalyzerAdapter( */ protected AnalyzerAdapter( final int api, - final String owner, + final @InternalForm String owner, final int access, final String name, final String descriptor, @@ -256,7 +256,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { if (opcode == Opcodes.NEW) { if (labels == null) { Label label = new Label(); @@ -276,7 +276,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { super.visitFieldInsn(opcode, owner, name, descriptor); execute(opcode, 0, descriptor); } @@ -284,8 +284,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -424,7 +424,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { super.visitMultiANewArrayInsn(descriptor, numDimensions); execute(Opcodes.MULTIANEWARRAY, numDimensions, descriptor); } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/ClassRemapper.java b/asm-commons/src/main/java/org/objectweb/asm/commons/ClassRemapper.java index baea2c81..5835ea66 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/ClassRemapper.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/ClassRemapper.java @@ -64,7 +64,7 @@ public class ClassRemapper extends ClassVisitor { protected final Remapper remapper; /** The internal name of the visited class. */ - protected String className; + protected @InternalForm String className; /** * Constructs a new {@link ClassRemapper}. Subclasses must not use this constructor. @@ -94,10 +94,10 @@ protected ClassRemapper(final int api, final ClassVisitor classVisitor, final Re public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { this.className = name; super.visit( version, @@ -161,8 +161,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { FieldVisitor fieldVisitor = @@ -181,7 +181,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { String remappedDescriptor = remapper.mapMethodDesc(descriptor); MethodVisitor methodVisitor = super.visitMethod( @@ -195,7 +195,7 @@ public MethodVisitor visitMethod( @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { super.visitInnerClass( remapper.mapType(name), outerName == null ? null : remapper.mapType(outerName), @@ -204,7 +204,7 @@ public void visitInnerClass( } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { super.visitOuterClass( remapper.mapType(owner), name == null ? null : remapper.mapMethodName(owner, name, descriptor), @@ -212,17 +212,17 @@ public void visitOuterClass(final String owner, final String name, final String } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { super.visitNestHost(remapper.mapType(nestHost)); } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { super.visitNestMember(remapper.mapType(nestMember)); } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { super.visitPermittedSubclass(remapper.mapType(permittedSubclass)); } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/CodeSizeEvaluator.java b/asm-commons/src/main/java/org/objectweb/asm/commons/CodeSizeEvaluator.java index 148ad6ba..e01d3def 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/CodeSizeEvaluator.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/CodeSizeEvaluator.java @@ -97,7 +97,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { minSize += 3; maxSize += 3; super.visitTypeInsn(opcode, type); @@ -105,7 +105,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { minSize += 3; maxSize += 3; super.visitFieldInsn(opcode, owner, name, descriptor); @@ -114,8 +114,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -199,7 +199,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { minSize += 4; maxSize += 4; super.visitMultiANewArrayInsn(descriptor, numDimensions); diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/GeneratorAdapter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/GeneratorAdapter.java index 1b90115c..54dd6981 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/GeneratorAdapter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/GeneratorAdapter.java @@ -278,7 +278,7 @@ public GeneratorAdapter( * @param types a set of types. * @return the internal names of the given types (see {@link Type#getInternalName()}). */ - private static String[] getInternalNames(final Type[] types) { + private static @InternalForm String[] getInternalNames(final Type[] types) { String[] names = new String[types.length]; for (int i = 0; i < names.length; ++i) { names[i] = types[i].getInternalName(); @@ -1186,7 +1186,7 @@ public void putField(final Type owner, final String name, final Type type) { */ private void invokeInsn( final int opcode, final Type type, final Method method, final boolean isInterface) { - String owner = type.getSort() == Type.ARRAY ? type.getDescriptor() : type.getInternalName(); + @InternalForm String owner = type.getSort() == Type.ARRAY ? type.getDescriptor() : type.getInternalName(); mv.visitMethodInsn(opcode, owner, method.getName(), method.getDescriptor(), isInterface); } @@ -1357,7 +1357,7 @@ public void endMethod() { * * @param start beginning of the exception handler's scope (inclusive). * @param end end of the exception handler's scope (exclusive). - * @param exception internal name of the type of exceptions handled by the handler (see {@link + * @param exception the type of exceptions handled by the handler (see {@link * Type#getInternalName()}). */ public void catchException(final Label start, final Label end, final Type exception) { diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/InstructionAdapter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/InstructionAdapter.java index afe8d689..9a842d60 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/InstructionAdapter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/InstructionAdapter.java @@ -465,7 +465,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { Type objectType = Type.getObjectType(type); switch (opcode) { case Opcodes.NEW: @@ -487,7 +487,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { switch (opcode) { case Opcodes.GETSTATIC: getstatic(owner, name, descriptor); @@ -509,8 +509,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -619,7 +619,7 @@ public void visitLdcInsn(final Object value) { if (api < Opcodes.ASM5 && (value instanceof Handle || (value instanceof Type && ((Type) value).getSort() == Type.METHOD))) { - throw new UnsupportedOperationException("This feature requires ASM5"); + throw new UnsupportedOperationException("visitLdcInsn requires ASM5, found " + (api >> 16)); } if (api < Opcodes.ASM7 && value instanceof ConstantDynamic) { throw new UnsupportedOperationException("This feature requires ASM7"); @@ -670,7 +670,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { multianewarray(descriptor, numDimensions); } @@ -1044,19 +1044,19 @@ public void areturn(final Type type) { mv.visitInsn(type.getOpcode(Opcodes.IRETURN)); } - public void getstatic(final String owner, final String name, final String descriptor) { + public void getstatic(final @InternalForm String owner, final String name, final String descriptor) { mv.visitFieldInsn(Opcodes.GETSTATIC, owner, name, descriptor); } - public void putstatic(final String owner, final String name, final String descriptor) { + public void putstatic(final @InternalForm String owner, final String name, final String descriptor) { mv.visitFieldInsn(Opcodes.PUTSTATIC, owner, name, descriptor); } - public void getfield(final String owner, final String name, final String descriptor) { + public void getfield(final @InternalForm String owner, final String name, final String descriptor) { mv.visitFieldInsn(Opcodes.GETFIELD, owner, name, descriptor); } - public void putfield(final String owner, final String name, final String descriptor) { + public void putfield(final @InternalForm String owner, final String name, final String descriptor) { mv.visitFieldInsn(Opcodes.PUTFIELD, owner, name, descriptor); } @@ -1070,7 +1070,7 @@ public void putfield(final String owner, final String name, final String descrip * @deprecated use {@link #invokevirtual(String, String, String, boolean)} instead. */ @Deprecated - public void invokevirtual(final String owner, final String name, final String descriptor) { + public void invokevirtual(final @InternalForm String owner, final String name, final String descriptor) { if (api >= Opcodes.ASM5) { invokevirtual(owner, name, descriptor, false); return; @@ -1088,7 +1088,7 @@ public void invokevirtual(final String owner, final String name, final String de * @param isInterface if the method's owner class is an interface. */ public void invokevirtual( - final String owner, final String name, final String descriptor, final boolean isInterface) { + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5) { if (isInterface) { throw new UnsupportedOperationException("INVOKEVIRTUAL on interfaces require ASM 5"); @@ -1109,7 +1109,7 @@ public void invokevirtual( * @deprecated use {@link #invokespecial(String, String, String, boolean)} instead. */ @Deprecated - public void invokespecial(final String owner, final String name, final String descriptor) { + public void invokespecial(final @InternalForm String owner, final String name, final String descriptor) { if (api >= Opcodes.ASM5) { invokespecial(owner, name, descriptor, false); return; @@ -1127,7 +1127,7 @@ public void invokespecial(final String owner, final String name, final String de * @param isInterface if the method's owner class is an interface. */ public void invokespecial( - final String owner, final String name, final String descriptor, final boolean isInterface) { + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5) { if (isInterface) { throw new UnsupportedOperationException("INVOKESPECIAL on interfaces require ASM 5"); @@ -1148,7 +1148,7 @@ public void invokespecial( * @deprecated use {@link #invokestatic(String, String, String, boolean)} instead. */ @Deprecated - public void invokestatic(final String owner, final String name, final String descriptor) { + public void invokestatic(final @InternalForm String owner, final String name, final String descriptor) { if (api >= Opcodes.ASM5) { invokestatic(owner, name, descriptor, false); return; @@ -1166,7 +1166,7 @@ public void invokestatic(final String owner, final String name, final String des * @param isInterface if the method's owner class is an interface. */ public void invokestatic( - final String owner, final String name, final String descriptor, final boolean isInterface) { + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5) { if (isInterface) { throw new UnsupportedOperationException("INVOKESTATIC on interfaces require ASM 5"); @@ -1185,7 +1185,7 @@ public void invokestatic( * @param name the method's name. * @param descriptor the method's descriptor (see {@link Type}). */ - public void invokeinterface(final String owner, final String name, final String descriptor) { + public void invokeinterface(final @InternalForm String owner, final String name, final String descriptor) { mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, owner, name, descriptor, true); } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/JSRInlinerAdapter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/JSRInlinerAdapter.java index cdcbd9fc..db93069d 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/JSRInlinerAdapter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/JSRInlinerAdapter.java @@ -98,7 +98,7 @@ public JSRInlinerAdapter( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { this( /* latest api = */ Opcodes.ASM9, methodVisitor, @@ -134,7 +134,7 @@ protected JSRInlinerAdapter( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { super(api, access, name, descriptor, signature, exceptions); this.mv = methodVisitor; } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/Method.java b/asm-commons/src/main/java/org/objectweb/asm/commons/Method.java index 5b6d0443..508bf230 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/Method.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/Method.java @@ -141,7 +141,7 @@ public static Method getMethod(final String method, final boolean defaultPackage throw new IllegalArgumentException(); } final String returnType = method.substring(0, spaceIndex); - final String methodName = + final @Identifier String methodName = method.substring(spaceIndex + 1, currentArgumentStartIndex - 1).trim(); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append('('); diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/MethodRemapper.java b/asm-commons/src/main/java/org/objectweb/asm/commons/MethodRemapper.java index c889d47d..3f7a92fb 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/MethodRemapper.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/MethodRemapper.java @@ -141,7 +141,7 @@ private Object[] remapFrameTypes(final int numTypes, final Object[] frameTypes) @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { super.visitFieldInsn( opcode, remapper.mapType(owner), @@ -152,8 +152,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -187,7 +187,7 @@ public void visitInvokeDynamicInsn( } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { super.visitTypeInsn(opcode, remapper.mapType(type)); } @@ -197,7 +197,7 @@ public void visitLdcInsn(final Object value) { } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { super.visitMultiANewArrayInsn(remapper.mapDesc(descriptor), numDimensions); } @@ -213,7 +213,7 @@ public AnnotationVisitor visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { super.visitTryCatchBlock(start, end, handler, type == null ? null : remapper.mapType(type)); } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/ModuleRemapper.java b/asm-commons/src/main/java/org/objectweb/asm/commons/ModuleRemapper.java index 926a4f95..82703b15 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/ModuleRemapper.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/ModuleRemapper.java @@ -67,12 +67,12 @@ protected ModuleRemapper( } @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { super.visitMainClass(remapper.mapType(mainClass)); } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { super.visitPackage(remapper.mapPackageName(packaze)); } @@ -82,7 +82,7 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { String[] remappedModules = null; if (modules != null) { remappedModules = new String[modules.length]; @@ -94,7 +94,7 @@ public void visitExport(final String packaze, final int access, final String... } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { String[] remappedModules = null; if (modules != null) { remappedModules = new String[modules.length]; diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/Remapper.java b/asm-commons/src/main/java/org/objectweb/asm/commons/Remapper.java index 3004b4d2..344c6652 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/Remapper.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/Remapper.java @@ -92,7 +92,7 @@ private Type mapType(final Type type) { * @return the given internal name, remapped with {@link #map(String)} (see {@link * Type#getInternalName()}). */ - public String mapType(final String internalName) { + public @InternalForm String mapType(final @InternalForm String internalName) { if (internalName == null) { return null; } @@ -107,10 +107,10 @@ public String mapType(final String internalName) { * @return the given internal name, remapped with {@link #map(String)} (see {@link * Type#getInternalName()}). */ - public String[] mapTypes(final String[] internalNames) { - String[] remappedInternalNames = null; + public @InternalForm String[] mapTypes(final @InternalForm String[] internalNames) { + @InternalForm String[] remappedInternalNames = null; for (int i = 0; i < internalNames.length; ++i) { - String internalName = internalNames[i]; + @InternalForm String internalName = internalNames[i]; String remappedInternalName = mapType(internalName); if (remappedInternalName != null) { if (remappedInternalNames == null) { @@ -259,7 +259,7 @@ public String mapAnnotationAttributeName(final String descriptor, final String n * strategy that will work for inner classes produced by Java, but not necessarily other * languages. Subclasses can override. * - * @param name the fully-qualified internal name of the inner class (see {@link + * @param name the internal name of the inner class (see {@link * Type#getInternalName()}). * @param ownerName the internal name of the owner class of the inner class (see {@link * Type#getInternalName()}). @@ -267,7 +267,7 @@ public String mapAnnotationAttributeName(final String descriptor, final String n * @return the new inner name of the inner class. */ public String mapInnerClassName( - final String name, final String ownerName, final String innerName) { + final @InternalForm String name, final @InternalForm String ownerName, final @InternalForm String innerName) { final String remappedInnerName = this.mapType(name); if (remappedInnerName.equals(name)) { @@ -305,7 +305,7 @@ public String mapInnerClassName( * @param descriptor the descriptor of the method. * @return the new name of the method. */ - public String mapMethodName(final String owner, final String name, final String descriptor) { + public String mapMethodName(final @InternalForm String owner, final String name, final String descriptor) { return name; } @@ -332,7 +332,7 @@ public String mapInvokeDynamicMethodName(final String name, final String descrip * @return the new name of the field. */ public String mapRecordComponentName( - final String owner, final String name, final String descriptor) { + final @InternalForm String owner, final String name, final String descriptor) { return name; } @@ -346,7 +346,7 @@ public String mapRecordComponentName( * @param descriptor the descriptor of the field. * @return the new name of the field. */ - public String mapFieldName(final String owner, final String name, final String descriptor) { + public String mapFieldName(final @InternalForm String owner, final String name, final String descriptor) { return name; } @@ -357,7 +357,7 @@ public String mapFieldName(final String owner, final String name, final String d * @param name the fully qualified name of the package (using dots). * @return the new name of the package. */ - public String mapPackageName(final String name) { + public String mapPackageName(final @DotSeparatedIdentifiers String name) { return name; } @@ -368,7 +368,7 @@ public String mapPackageName(final String name) { * @param name the fully qualified name (using dots) of a module. * @return the new name of the module. */ - public String mapModuleName(final String name) { + public String mapModuleName(final @DotSeparatedIdentifiers String name) { return name; } @@ -379,7 +379,7 @@ public String mapModuleName(final String name) { * @param internalName the internal name of a class (see {@link Type#getInternalName()}). * @return the new internal name (see {@link Type#getInternalName()}). */ - public String map(final String internalName) { + public @InternalForm String map(final @InternalForm String internalName) { return internalName; } } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/SerialVersionUIDAdder.java b/asm-commons/src/main/java/org/objectweb/asm/commons/SerialVersionUIDAdder.java index 7daaaec2..d32e6d49 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/SerialVersionUIDAdder.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/SerialVersionUIDAdder.java @@ -124,10 +124,10 @@ public class SerialVersionUIDAdder extends ClassVisitor { private int access; /** The internal name of the class. */ - private String name; + private @InternalForm String name; /** The interfaces implemented by the class. */ - private String[] interfaces; + private @InternalForm String [] interfaces; /** The fields of the class that are needed to compute the SVUID. */ private Collection svuidFields; @@ -175,10 +175,10 @@ protected SerialVersionUIDAdder(final int api, final ClassVisitor classVisitor) public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { // Get the class name, access flags, and interfaces information (step 1, 2 and 3) for SVUID // computation. computeSvuid = (access & Opcodes.ACC_ENUM) == 0; @@ -201,7 +201,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { // Get constructor and method information (step 5 and 7). Also determine if there is a class // initializer (step 6). if (computeSvuid) { @@ -238,8 +238,8 @@ public MethodVisitor visitMethod( @Override public FieldVisitor visitField( final int access, - final String name, - final String desc, + final @Identifier String name, + final @FieldDescriptor String desc, final String signature, final Object value) { // Get the class field information for step 4 of the algorithm. Also determine if the class @@ -273,9 +273,9 @@ public FieldVisitor visitField( @Override public void visitInnerClass( - final String innerClassName, - final String outerName, - final String innerName, + final @InternalForm String innerClassName, + final @InternalForm String outerName, + final @Identifier String innerName, final int innerClassAccess) { // Handles a bizarre special case. Nested classes (static classes declared inside another class) // that are protected have their access bit set to public in their class files to deal with some diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/SimpleRemapper.java b/asm-commons/src/main/java/org/objectweb/asm/commons/SimpleRemapper.java index 44f3442d..a137bb76 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/SimpleRemapper.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/SimpleRemapper.java @@ -76,7 +76,7 @@ public SimpleRemapper(final String oldName, final String newName) { } @Override - public String mapMethodName(final String owner, final String name, final String descriptor) { + public String mapMethodName(final @InternalForm String owner, final String name, final String descriptor) { String remappedName = map(owner + '.' + name + descriptor); return remappedName == null ? name : remappedName; } @@ -94,7 +94,7 @@ public String mapAnnotationAttributeName(final String descriptor, final String n } @Override - public String mapFieldName(final String owner, final String name, final String descriptor) { + public String mapFieldName(final @InternalForm String owner, final String name, final String descriptor) { String remappedName = map(owner + '.' + name); return remappedName == null ? name : remappedName; } diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/StaticInitMerger.java b/asm-commons/src/main/java/org/objectweb/asm/commons/StaticInitMerger.java index 9c1144c3..a5970d33 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/StaticInitMerger.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/StaticInitMerger.java @@ -41,7 +41,7 @@ public class StaticInitMerger extends ClassVisitor { /** The internal name of the visited class. */ - private String owner; + private @InternalForm String owner; /** The prefix to use to rename the existing <clinit> methods. */ private final String renamedClinitMethodPrefix; @@ -82,10 +82,10 @@ protected StaticInitMerger(final int api, final String prefix, final ClassVisito public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { super.visit(version, access, name, signature, superName, interfaces); this.owner = name; } @@ -96,7 +96,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor; if ("".equals(name)) { int newAccess = Opcodes.ACC_PRIVATE + Opcodes.ACC_STATIC; diff --git a/asm-commons/src/main/java/org/objectweb/asm/commons/TryCatchBlockSorter.java b/asm-commons/src/main/java/org/objectweb/asm/commons/TryCatchBlockSorter.java index b6dffeed..9764f0b3 100644 --- a/asm-commons/src/main/java/org/objectweb/asm/commons/TryCatchBlockSorter.java +++ b/asm-commons/src/main/java/org/objectweb/asm/commons/TryCatchBlockSorter.java @@ -69,7 +69,7 @@ public TryCatchBlockSorter( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { this( /* latest api = */ Opcodes.ASM9, methodVisitor, @@ -90,7 +90,7 @@ protected TryCatchBlockSorter( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { super(api, access, name, descriptor, signature, exceptions); this.mv = methodVisitor; } diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/AdviceAdapterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/AdviceAdapterTest.java index dcf7625d..c5550062 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/AdviceAdapterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/AdviceAdapterTest.java @@ -831,7 +831,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions); if (methodVisitor == null || (access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_NATIVE)) > 0) { diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/AnalyzerAdapterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/AnalyzerAdapterTest.java index 9866c009..fa9af0b4 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/AnalyzerAdapterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/AnalyzerAdapterTest.java @@ -129,7 +129,7 @@ void testAllMethods_precompiledClass( */ static class ClassAnalyzerAdapter extends ClassVisitor { - private String owner; + private @InternalForm String owner; ClassAnalyzerAdapter(final int api, final ClassVisitor classVisitor) { super(api, classVisitor); @@ -139,10 +139,10 @@ static class ClassAnalyzerAdapter extends ClassVisitor { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { owner = name; super.visit(version, access, name, signature, superName, interfaces); } @@ -153,7 +153,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions); AnalyzedFramesInserter inserter = new AnalyzedFramesInserter(methodVisitor); @@ -249,14 +249,14 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { maybeInsertFrame(); super.visitTypeInsn(opcode, type); } @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { maybeInsertFrame(); super.visitFieldInsn(opcode, owner, name, descriptor); } @@ -264,8 +264,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { maybeInsertFrame(); @@ -315,7 +315,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { maybeInsertFrame(); super.visitMultiANewArrayInsn(descriptor, numDimensions); } diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/ClassRemapperTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/ClassRemapperTest.java index 58c171d4..630e7b4a 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/ClassRemapperTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/ClassRemapperTest.java @@ -102,7 +102,7 @@ void testVisitInnerClass() { classNode, new Remapper() { @Override - public String map(final String internalName) { + public String map(final @InternalForm String internalName) { if ("pkg/C".equals(internalName)) { return "a"; } @@ -129,7 +129,7 @@ void testVisitInnerClass_localInnerClass() { classNode, new Remapper() { @Override - public String map(final String internalName) { + public String map(final @InternalForm String internalName) { if ("pkg/C".equals(internalName)) { return "a"; } @@ -156,7 +156,7 @@ void testVisitInnerClass_specialRemap() { classNode, new Remapper() { @Override - public String map(final String internalName) { + public String map(final @InternalForm String internalName) { if ("pkg/C".equals(internalName)) { return "pkg2/C"; } @@ -211,7 +211,7 @@ public String mapInvokeDynamicMethodName(final String name, final String descrip } @Override - public String map(final String internalName) { + public @InternalForm String map(final @InternalForm String internalName) { if (internalName.equals("java/lang/String")) { return "java/lang/Integer"; } @@ -248,7 +248,7 @@ void testInvokeDynamicInsn_field() { new Remapper() { @Override public String mapFieldName( - final String owner, final String name, final String descriptor) { + final @InternalForm String owner, final String name, final String descriptor) { if ("a".equals(name)) { return "demo"; } @@ -334,7 +334,7 @@ private static void checkDescriptor(final String descriptor) { checkMethodAdapter.visitFieldInsn(Opcodes.GETFIELD, "Owner", "name", descriptor); } - private static void checkInternalName(final String internalName) { + private static void checkInternalName(final @InternalForm String internalName) { CheckMethodAdapter checkMethodAdapter = new CheckMethodAdapter(null); checkMethodAdapter.version = Opcodes.V1_5; checkMethodAdapter.visitCode(); @@ -372,7 +372,8 @@ public String mapDesc(final String descriptor) { } @Override - public String mapType(final String type) { + // The argument may be "module-info" or an "ASM internal name". + public String mapType(final @InternalForm String type) { if (type != null && !type.equals("module-info")) { checkInternalName(type); } @@ -380,7 +381,7 @@ public String mapType(final String type) { } @Override - public String mapMethodName(final String owner, final String name, final String descriptor) { + public String mapMethodName(final @InternalForm String owner, final String name, final String descriptor) { if (name.equals("") || name.equals("")) { return name; } @@ -393,7 +394,7 @@ public String mapInvokeDynamicMethodName(final String name, final String descrip } @Override - public String mapFieldName(final String owner, final String name, final String descriptor) { + public String mapFieldName(final @InternalForm String owner, final String name, final String descriptor) { return owner.equals(internalClassName) ? name.toUpperCase(LOCALE) : name; } diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java index 204c9782..8755e8ee 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/CodeSizeEvaluatorTest.java @@ -120,7 +120,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions); return new CodeSizeEvaluator(api, methodVisitor) { diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/InstructionAdapterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/InstructionAdapterTest.java index 8141359d..8d2bbf7e 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/InstructionAdapterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/InstructionAdapterTest.java @@ -292,7 +292,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new InstructionAdapter( api, super.visitMethod(access, name, descriptor, signature, exceptions)) {}; } diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/JsrInlinerAdapterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/JsrInlinerAdapterTest.java index a96eff5e..d6c944df 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/JsrInlinerAdapterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/JsrInlinerAdapterTest.java @@ -1529,7 +1529,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions); return new JSRInlinerAdapter( diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/LocalVariablesSorterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/LocalVariablesSorterTest.java index bafcedb7..c7253ebd 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/LocalVariablesSorterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/LocalVariablesSorterTest.java @@ -239,7 +239,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodVisitor methodVisitor = super.visitMethod(access, name, descriptor, signature, exceptions); return new LocalVariablesSorter(api, access, descriptor, methodVisitor) {}; diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/MethodNodeBuilder.java b/asm-commons/src/test/java/org/objectweb/asm/commons/MethodNodeBuilder.java index 9ef289aa..a9faea07 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/MethodNodeBuilder.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/MethodNodeBuilder.java @@ -78,14 +78,14 @@ MethodNodeBuilder typeInsn(final int opcode, final String operand) { } MethodNodeBuilder fieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final String descriptor) { methodNode.visitFieldInsn(opcode, owner, name, descriptor); return this; } MethodNodeBuilder methodInsn( final int opcode, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { diff --git a/asm-commons/src/test/java/org/objectweb/asm/commons/TryCatchBlockSorterTest.java b/asm-commons/src/test/java/org/objectweb/asm/commons/TryCatchBlockSorterTest.java index e66689d0..79ebfc09 100644 --- a/asm-commons/src/test/java/org/objectweb/asm/commons/TryCatchBlockSorterTest.java +++ b/asm-commons/src/test/java/org/objectweb/asm/commons/TryCatchBlockSorterTest.java @@ -71,7 +71,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new TryCatchBlockSorter( super.visitMethod(access, name, descriptor, signature, exceptions), access, diff --git a/asm-test/src/main/java/org/objectweb/asm/test/AsmTest.java b/asm-test/src/main/java/org/objectweb/asm/test/AsmTest.java index ee0ad099..1d64a39d 100644 --- a/asm-test/src/main/java/org/objectweb/asm/test/AsmTest.java +++ b/asm-test/src/main/java/org/objectweb/asm/test/AsmTest.java @@ -188,7 +188,7 @@ public enum PrecompiledClass { * * @return the fully qualified name of this class. */ - public String getName() { + public @FullyQualifiedName String getName() { return name; } @@ -197,7 +197,7 @@ public String getName() { * * @return the internal name of this class. */ - public String getInternalName() { + public @InternalForm String getInternalName() { return name.endsWith(ClassFile.MODULE_INFO) ? ClassFile.MODULE_INFO : name.replace('.', '/'); } @@ -280,7 +280,7 @@ public enum InvalidClass { * * @return the fully qualified name of this class. */ - public String getName() { + public @FullyQualifiedName String getName() { return name; } diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ClassNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ClassNode.java index 3cbd221d..026e8a2c 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ClassNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ClassNode.java @@ -59,7 +59,7 @@ public class ClassNode extends ClassVisitor { public int access; /** The internal name of this class (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public String name; + public @InternalForm String name; /** The signature of this class. May be {@literal null}. */ public String signature; @@ -69,13 +69,13 @@ public class ClassNode extends ClassVisitor { * For interfaces, the super class is {@link Object}. May be {@literal null}, but only for the * {@link Object} class. */ - public String superName; + public @InternalForm String superName; /** * The internal names of the interfaces directly implemented by this class (see {@link * org.objectweb.asm.Type#getInternalName()}). */ - public List interfaces; + public List<@InternalForm String> interfaces; /** The name of the source file from which this class was compiled. May be {@literal null}. */ public String sourceFile; @@ -93,7 +93,7 @@ public class ClassNode extends ClassVisitor { * org.objectweb.asm.Type#getInternalName()}). Must be {@literal null} if this class is not a * local or anonymous class. */ - public String outerClass; + public @InternalForm String outerClass; /** * The name of the method that contains the class, or {@literal null} if the class has no @@ -133,19 +133,19 @@ public class ClassNode extends ClassVisitor { * The internal name of the nest host class of this class (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public String nestHostClass; + public @InternalForm String nestHostClass; /** * The internal names of the nest members of this class (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public List nestMembers; + public List<@InternalForm String> nestMembers; /** * The internal names of the permitted subclasses of this class (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public List permittedSubclasses; + public List<@InternalForm String> permittedSubclasses; /** The record components of this class. May be {@literal null}. */ public List recordComponents; @@ -191,10 +191,10 @@ public ClassNode(final int api) { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { this.version = version; this.access = access; this.name = name; @@ -216,12 +216,12 @@ public ModuleVisitor visitModule(final String name, final int access, final Stri } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { this.nestHostClass = nestHost; } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { outerClass = owner; outerMethod = name; outerMethodDesc = descriptor; @@ -256,18 +256,18 @@ public void visitAttribute(final Attribute attribute) { } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { nestMembers = Util.add(nestMembers, nestMember); } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { permittedSubclasses = Util.add(permittedSubclasses, permittedSubclass); } @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { InnerClassNode innerClass = new InnerClassNode(name, outerName, innerName, access); innerClasses.add(innerClass); } @@ -283,8 +283,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { FieldNode field = new FieldNode(access, name, descriptor, signature, value); diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/FieldInsnNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/FieldInsnNode.java index ed8b1048..bfc342b3 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/FieldInsnNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/FieldInsnNode.java @@ -42,13 +42,13 @@ public class FieldInsnNode extends AbstractInsnNode { * The internal name of the field's owner class (see {@link * org.objectweb.asm.Type#getInternalName()}). */ - public String owner; + public @InternalForm String owner; /** The field's name. */ - public String name; + public @Identifier String name; /** The field's descriptor (see {@link org.objectweb.asm.Type}). */ - public String desc; + public @FieldDescriptor String desc; /** * Constructs a new {@link FieldInsnNode}. @@ -61,7 +61,7 @@ public class FieldInsnNode extends AbstractInsnNode { * @param descriptor the field's descriptor (see {@link org.objectweb.asm.Type}). */ public FieldInsnNode( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { super(opcode); this.owner = owner; this.name = name; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/FieldNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/FieldNode.java index 1c30d7fc..a17470ce 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/FieldNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/FieldNode.java @@ -49,10 +49,10 @@ public class FieldNode extends FieldVisitor { public int access; /** The field's name. */ - public String name; + public @Identifier String name; /** The field's descriptor (see {@link org.objectweb.asm.Type}). */ - public String desc; + public @FieldDescriptor String desc; /** The field's signature. May be {@literal null}. */ public String signature; @@ -95,8 +95,8 @@ public class FieldNode extends FieldVisitor { */ public FieldNode( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { this(/* latest api = */ Opcodes.ASM9, access, name, descriptor, signature, value); @@ -122,8 +122,8 @@ public FieldNode( public FieldNode( final int api, final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { super(api); diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/InnerClassNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/InnerClassNode.java index ca9101b6..85078661 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/InnerClassNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/InnerClassNode.java @@ -41,19 +41,19 @@ public class InnerClassNode { /** The internal name of an inner class (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public String name; + public @InternalForm String name; /** * The internal name of the class to which the inner class belongs (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public String outerName; + public @InternalForm String outerName; /** * The (simple) name of the inner class inside its enclosing class. Must be {@literal null} if the * inner class is not the member of a class or interface (e.g. for local or anonymous classes). */ - public String innerName; + public @Identifier String innerName; /** * The access flags of the inner class as originally declared in the source code from which the @@ -73,7 +73,7 @@ public class InnerClassNode { * class was compiled. */ public InnerClassNode( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { this.name = name; this.outerName = outerName; this.innerName = innerName; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/MethodInsnNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/MethodInsnNode.java index eeb969f9..4c87140c 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/MethodInsnNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/MethodInsnNode.java @@ -45,7 +45,7 @@ public class MethodInsnNode extends AbstractInsnNode { * *

For methods of arrays, e.g., {@code clone()}, the array type descriptor. */ - public String owner; + public @InternalForm String owner; /** The method's name. */ public String name; @@ -67,7 +67,7 @@ public class MethodInsnNode extends AbstractInsnNode { * @param descriptor the method's descriptor (see {@link org.objectweb.asm.Type}). */ public MethodInsnNode( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final String descriptor) { this(opcode, owner, name, descriptor, opcode == Opcodes.INVOKEINTERFACE); } @@ -84,7 +84,7 @@ public MethodInsnNode( */ public MethodInsnNode( final int opcode, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/MethodNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/MethodNode.java index 8b529a52..9f3819c1 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/MethodNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/MethodNode.java @@ -63,7 +63,7 @@ public class MethodNode extends MethodVisitor { public String signature; /** The internal names of the method's exception classes (see {@link Type#getInternalName()}). */ - public List exceptions; + public List<@InternalForm String> exceptions; /** The method parameter info (access flags and name). */ public List parameters; @@ -190,7 +190,7 @@ public MethodNode( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { this(/* latest api = */ Opcodes.ASM9, access, name, descriptor, signature, exceptions); if (getClass() != MethodNode.class) { throw new IllegalStateException(); @@ -216,7 +216,7 @@ public MethodNode( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { super(api); this.access = access; this.name = name; @@ -352,21 +352,21 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { instructions.add(new TypeInsnNode(opcode, type)); } @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { instructions.add(new FieldInsnNode(opcode, owner, name, descriptor)); } @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -422,7 +422,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { instructions.add(new MultiANewArrayInsnNode(descriptor, numDimensions)); } @@ -448,7 +448,7 @@ public AnnotationVisitor visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { TryCatchBlockNode tryCatchBlock = new TryCatchBlockNode(getLabelNode(start), getLabelNode(end), getLabelNode(handler), type); tryCatchBlocks = Util.add(tryCatchBlocks, tryCatchBlock); @@ -640,7 +640,7 @@ public void check(final int api) { * @param classVisitor a class visitor. */ public void accept(final ClassVisitor classVisitor) { - String[] exceptionsArray = exceptions == null ? null : exceptions.toArray(new String[0]); + @InternalForm String @Nullable [] exceptionsArray = exceptions == null ? null : exceptions.toArray(new String[0]); MethodVisitor methodVisitor = classVisitor.visitMethod(access, name, desc, signature, exceptionsArray); if (methodVisitor != null) { diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleExportNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleExportNode.java index f860d26d..e18a8b49 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleExportNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleExportNode.java @@ -41,7 +41,7 @@ public class ModuleExportNode { * The internal name of the exported package (see {@link * org.objectweb.asm.Type#getInternalName()}). */ - public String packaze; + public @InternalForm String packaze; /** * The access flags (see {@link org.objectweb.asm.Opcodes}). Valid values are {@code @@ -53,7 +53,7 @@ public class ModuleExportNode { * The list of modules that can access this exported package, specified with fully qualified names * (using dots). May be {@literal null}. */ - public List modules; + public @Nullable List<@DotSeparatedIdentifiers String> modules; /** * Constructs a new {@link ModuleExportNode}. @@ -65,7 +65,7 @@ public class ModuleExportNode { * @param modules a list of modules that can access this exported package, specified with fully * qualified names (using dots). */ - public ModuleExportNode(final String packaze, final int access, final List modules) { + public ModuleExportNode(final @InternalForm String packaze, final int access, final List modules) { this.packaze = packaze; this.access = access; this.modules = modules; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleNode.java index 3f7a3305..5ec53f91 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleNode.java @@ -41,7 +41,7 @@ public class ModuleNode extends ModuleVisitor { /** The fully qualified name (using dots) of this module. */ - public String name; + public @DotSeparatedIdentifiers String name; /** * The module's access flags, among {@code ACC_OPEN}, {@code ACC_SYNTHETIC} and {@code @@ -56,13 +56,13 @@ public class ModuleNode extends ModuleVisitor { * The internal name of the main class of this module (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public String mainClass; + public @InternalForm String mainClass; /** * The internal name of the packages declared by this module (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public List packages; + public List<@InternalForm String> packages; /** The dependencies of this module. May be {@literal null}. */ public List requires; @@ -77,7 +77,7 @@ public class ModuleNode extends ModuleVisitor { * The internal names of the services used by this module (see {@link * org.objectweb.asm.Type#getInternalName()}). May be {@literal null}. */ - public List uses; + public List<@InternalForm String> uses; /** The services provided by this module. May be {@literal null}. */ public List provides; @@ -92,7 +92,7 @@ public class ModuleNode extends ModuleVisitor { * @param version the module version, or {@literal null}. * @throws IllegalStateException If a subclass calls this constructor. */ - public ModuleNode(final String name, final int access, final String version) { + public ModuleNode(final @DotSeparatedIdentifiers String name, final int access, final String version) { super(/* latest api = */ Opcodes.ASM9); if (getClass() != ModuleNode.class) { throw new IllegalStateException(); @@ -121,13 +121,13 @@ public ModuleNode(final String name, final int access, final String version) { */ public ModuleNode( final int api, - final String name, + final @DotSeparatedIdentifiers String name, final int access, final String version, final List requires, final List exports, final List opens, - final List uses, + final List<@InternalForm String> uses, final List provides) { super(api); this.name = name; @@ -141,12 +141,12 @@ public ModuleNode( } @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { this.mainClass = mainClass; } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { if (packages == null) { packages = new ArrayList<>(5); } @@ -162,7 +162,7 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { if (exports == null) { exports = new ArrayList<>(5); } @@ -170,7 +170,7 @@ public void visitExport(final String packaze, final int access, final String... } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { if (opens == null) { opens = new ArrayList<>(5); } diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleOpenNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleOpenNode.java index fc73def3..c02a09cb 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleOpenNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleOpenNode.java @@ -40,7 +40,7 @@ public class ModuleOpenNode { /** * The internal name of the opened package (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public String packaze; + public @InternalForm String packaze; /** * The access flag of the opened package, valid values are among {@code ACC_SYNTHETIC} and {@code @@ -52,7 +52,7 @@ public class ModuleOpenNode { * The fully qualified names (using dots) of the modules that can use deep reflection to the * classes of the open package, or {@literal null}. */ - public List modules; + public @Nullable List<@DotSeparatedIdentifiers String> modules; /** * Constructs a new {@link ModuleOpenNode}. @@ -64,7 +64,7 @@ public class ModuleOpenNode { * @param modules the fully qualified names (using dots) of the modules that can use deep * reflection to the classes of the open package, or {@literal null}. */ - public ModuleOpenNode(final String packaze, final int access, final List modules) { + public ModuleOpenNode(final @InternalForm String packaze, final int access, final List<@DotSeparatedIdentifiers String> modules) { this.packaze = packaze; this.access = access; this.modules = modules; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleProvideNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleProvideNode.java index c0976d47..7a7cc360 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleProvideNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleProvideNode.java @@ -38,13 +38,13 @@ public class ModuleProvideNode { /** The internal name of the service (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public String service; + public @InternalForm String service; /** * The internal names of the implementations of the service (there is at least one provider). See * {@link org.objectweb.asm.Type#getInternalName()}. */ - public List providers; + public List<@InternalForm String> providers; /** * Constructs a new {@link ModuleProvideNode}. @@ -53,7 +53,7 @@ public class ModuleProvideNode { * @param providers the internal names of the implementations of the service (there is at least * one provider). See {@link org.objectweb.asm.Type#getInternalName()}. */ - public ModuleProvideNode(final String service, final List providers) { + public ModuleProvideNode(final @InternalForm String service, final List<@InternalForm String> providers) { this.service = service; this.providers = providers; } diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleRequireNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleRequireNode.java index 27940d15..da3cdfdf 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleRequireNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/ModuleRequireNode.java @@ -37,7 +37,7 @@ public class ModuleRequireNode { /** The fully qualified name (using dots) of the dependence. */ - public String module; + public @DotSeparatedIdentifiers String module; /** * The access flag of the dependence among {@code ACC_TRANSITIVE}, {@code ACC_STATIC_PHASE}, @@ -56,7 +56,7 @@ public class ModuleRequireNode { * ACC_STATIC_PHASE}, {@code ACC_SYNTHETIC} and {@code ACC_MANDATED}. * @param version the module version at compile time, or {@literal null}. */ - public ModuleRequireNode(final String module, final int access, final String version) { + public ModuleRequireNode(final @DotSeparatedIdentifiers String module, final int access, final String version) { this.module = module; this.access = access; this.version = version; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/TryCatchBlockNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/TryCatchBlockNode.java index 30bfd698..63a9a1a6 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/TryCatchBlockNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/TryCatchBlockNode.java @@ -50,7 +50,7 @@ public class TryCatchBlockNode { * The internal name of the type of exceptions handled by the handler. May be {@literal null} to * catch any exceptions (for "finally" blocks). */ - public String type; + public @InternalForm String type; /** The runtime visible type annotations on the exception handler type. May be {@literal null}. */ public List visibleTypeAnnotations; @@ -71,7 +71,7 @@ public class TryCatchBlockNode { * "finally" blocks). */ public TryCatchBlockNode( - final LabelNode start, final LabelNode end, final LabelNode handler, final String type) { + final LabelNode start, final LabelNode end, final LabelNode handler, final @InternalForm String type) { this.start = start; this.end = end; this.handler = handler; diff --git a/asm-tree/src/main/java/org/objectweb/asm/tree/TypeInsnNode.java b/asm-tree/src/main/java/org/objectweb/asm/tree/TypeInsnNode.java index d7459877..c2498575 100644 --- a/asm-tree/src/main/java/org/objectweb/asm/tree/TypeInsnNode.java +++ b/asm-tree/src/main/java/org/objectweb/asm/tree/TypeInsnNode.java @@ -42,7 +42,7 @@ public class TypeInsnNode extends AbstractInsnNode { * The operand of this instruction. Despite its name (due to historical reasons), this operand is * an internal name (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public String desc; + public @InternalForm String desc; /** * Constructs a new {@link TypeInsnNode}. @@ -52,7 +52,7 @@ public class TypeInsnNode extends AbstractInsnNode { * @param type the operand of the instruction to be constructed. This operand is an internal name * (see {@link org.objectweb.asm.Type#getInternalName()}). */ - public TypeInsnNode(final int opcode, final String type) { + public TypeInsnNode(final int opcode, final @InternalForm String type) { super(opcode); this.desc = type; } diff --git a/asm-tree/src/test/java/org/objectweb/asm/tree/ClassNodeTest.java b/asm-tree/src/test/java/org/objectweb/asm/tree/ClassNodeTest.java index c51a041d..155f6700 100644 --- a/asm-tree/src/test/java/org/objectweb/asm/tree/ClassNodeTest.java +++ b/asm-tree/src/test/java/org/objectweb/asm/tree/ClassNodeTest.java @@ -182,10 +182,10 @@ private static class RemoveMembersClassVisitor extends ClassVisitor { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { super.visit(version, access & ~Opcodes.ACC_RECORD, name, signature, superName, interfaces); } @@ -195,13 +195,13 @@ public ModuleVisitor visitModule(final String name, final int access, final Stri } @Override - public void visitNestHost(final String nestHost) {} + public void visitNestHost(final @InternalForm String nestHost) {} @Override - public void visitNestMember(final String nestMember) {} + public void visitNestMember(final @InternalForm String nestMember) {} @Override - public void visitPermittedSubclass(final String permittedSubclass) {} + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) {} @Override public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) { @@ -229,8 +229,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return null; @@ -242,7 +242,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return null; } } diff --git a/asm-tree/src/test/java/org/objectweb/asm/tree/MethodNodeTest.java b/asm-tree/src/test/java/org/objectweb/asm/tree/MethodNodeTest.java index 7aff0a02..ec4971bc 100644 --- a/asm-tree/src/test/java/org/objectweb/asm/tree/MethodNodeTest.java +++ b/asm-tree/src/test/java/org/objectweb/asm/tree/MethodNodeTest.java @@ -83,7 +83,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodNode method = new MethodNode(); method.access = access; method.name = name; diff --git a/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java b/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java index 4ede9201..a7d46f7d 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/ASMifier.java @@ -189,10 +189,10 @@ static void main(final String[] args, final PrintWriter output, final PrintWrite public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { String simpleName; if (name == null) { simpleName = "module-info"; @@ -287,7 +287,7 @@ public Printer visitModule(final String name, final int flags, final String vers } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { stringBuilder.setLength(0); stringBuilder.append("classWriter.visitNestHost("); appendConstant(nestHost); @@ -296,7 +296,7 @@ public void visitNestHost(final String nestHost) { } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { stringBuilder.setLength(0); stringBuilder.append("classWriter.visitOuterClass("); appendConstant(owner); @@ -325,7 +325,7 @@ public void visitClassAttribute(final Attribute attribute) { } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { stringBuilder.setLength(0); stringBuilder.append("classWriter.visitNestMember("); appendConstant(nestMember); @@ -334,7 +334,7 @@ public void visitNestMember(final String nestMember) { } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { stringBuilder.setLength(0); stringBuilder.append("classWriter.visitPermittedSubclass("); appendConstant(permittedSubclass); @@ -344,7 +344,7 @@ public void visitPermittedSubclass(final String permittedSubclass) { @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { stringBuilder.setLength(0); stringBuilder.append("classWriter.visitInnerClass("); appendConstant(name); @@ -410,7 +410,7 @@ public ASMifier visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { stringBuilder.setLength(0); stringBuilder.append("{\n"); stringBuilder.append("methodVisitor = classWriter.visitMethod("); @@ -453,7 +453,7 @@ public void visitClassEnd() { // ----------------------------------------------------------------------------------------------- @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { stringBuilder.setLength(0); stringBuilder.append("moduleVisitor.visitMainClass("); appendConstant(mainClass); @@ -462,7 +462,7 @@ public void visitMainClass(final String mainClass) { } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { stringBuilder.setLength(0); stringBuilder.append("moduleVisitor.visitPackage("); appendConstant(packaze); @@ -484,17 +484,17 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { visitExportOrOpen("moduleVisitor.visitExport(", packaze, access, modules); } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { visitExportOrOpen("moduleVisitor.visitOpen(", packaze, access, modules); } private void visitExportOrOpen( - final String visitMethod, final String packaze, final int access, final String... modules) { + final String visitMethod, final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { stringBuilder.setLength(0); stringBuilder.append(visitMethod); appendConstant(packaze); @@ -845,7 +845,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { stringBuilder.setLength(0); stringBuilder.append(name).append(".visitTypeInsn(").append(OPCODES[opcode]).append(", "); appendConstant(type); @@ -855,7 +855,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { stringBuilder.setLength(0); stringBuilder.append(this.name).append(".visitFieldInsn(").append(OPCODES[opcode]).append(", "); appendConstant(owner); @@ -870,8 +870,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { stringBuilder.setLength(0); @@ -1007,7 +1007,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { stringBuilder.setLength(0); stringBuilder.append(name).append(".visitMultiANewArrayInsn("); appendConstant(descriptor); @@ -1023,7 +1023,7 @@ public ASMifier visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { stringBuilder.setLength(0); declareLabel(start); declareLabel(end); diff --git a/asm-util/src/main/java/org/objectweb/asm/util/CheckClassAdapter.java b/asm-util/src/main/java/org/objectweb/asm/util/CheckClassAdapter.java index 80ada1a9..a842e864 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/CheckClassAdapter.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/CheckClassAdapter.java @@ -143,7 +143,7 @@ public class CheckClassAdapter extends ClassVisitor { * The common package of all the nest members. Not {@literal null} if the visitNestMember method * has been called. */ - private String nestMemberPackageName; + private @MonotonicNonNull String nestMemberPackageName; /** Whether the {@link #visitEnd} method has been called. */ private boolean visitEndCalled; @@ -204,10 +204,10 @@ protected CheckClassAdapter( public void visit( final int version, final int access, - final String name, + final @InternalForm String name, // may end with "package-info" or "module-info" final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { if (visitCalled) { throw new IllegalStateException("visit must be called only once"); } @@ -273,7 +273,7 @@ public void visitSource(final String file, final String debug) { } @Override - public ModuleVisitor visitModule(final String name, final int access, final String version) { + public ModuleVisitor visitModule(final @DotSeparatedIdentifiers String name, final int access, final String version) { checkState(); if (visitModuleCalled) { throw new IllegalStateException("visitModule can be called only once."); @@ -289,7 +289,7 @@ public ModuleVisitor visitModule(final String name, final int access, final Stri } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { checkState(); CheckMethodAdapter.checkInternalName(version, nestHost, "nestHost"); if (visitNestHostCalled) { @@ -303,7 +303,7 @@ public void visitNestHost(final String nestHost) { } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { checkState(); CheckMethodAdapter.checkInternalName(version, nestMember, "nestMember"); if (visitNestHostCalled) { @@ -321,14 +321,14 @@ public void visitNestMember(final String nestMember) { } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { checkState(); CheckMethodAdapter.checkInternalName(version, permittedSubclass, "permittedSubclass"); super.visitPermittedSubclass(permittedSubclass); } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { checkState(); if (visitOuterClassCalled) { throw new IllegalStateException("visitOuterClass can be called only once."); @@ -345,7 +345,7 @@ public void visitOuterClass(final String owner, final String name, final String @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { checkState(); CheckMethodAdapter.checkInternalName(version, name, "class name"); if (outerName != null) { @@ -391,8 +391,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { checkState(); @@ -426,7 +426,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { checkState(); checkMethodAccess( version, @@ -575,7 +575,7 @@ private static void checkMethodAccess( * @param name the name to be checked. * @param source the source of 'name' (e.g 'module' for a module name). */ - static void checkFullyQualifiedName(final int version, final String name, final String source) { + static void checkFullyQualifiedName(final int version, final @DotSeparatedIdentifiers String name, final String source) { try { int startIndex = 0; int dotIndex; @@ -970,7 +970,7 @@ static void checkTypeRef(final int typeRef) { * @param name an internal name. * @return the package name or "" if there is no package. */ - private static String packageName(final String name) { + private static String packageName(final @InternalForm String name) { int index = name.lastIndexOf('/'); if (index == -1) { return ""; diff --git a/asm-util/src/main/java/org/objectweb/asm/util/CheckFrameAnalyzer.java b/asm-util/src/main/java/org/objectweb/asm/util/CheckFrameAnalyzer.java index b58398c2..e1678d79 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/CheckFrameAnalyzer.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/CheckFrameAnalyzer.java @@ -115,7 +115,7 @@ class CheckFrameAnalyzer extends Analyzer { } @Override - protected void init(final String owner, final MethodNode method) throws AnalyzerException { + protected void init(final @InternalForm String owner, final MethodNode method) throws AnalyzerException { insnList = method.instructions; currentLocals = Type.getArgumentsAndReturnSizes(method.desc) >> 2; if ((method.access & Opcodes.ACC_STATIC) != 0) { @@ -229,7 +229,7 @@ protected void init(final String owner, final MethodNode method) throws Analyzer * "instructions", are invalid. */ private void expandFrames( - final String owner, final MethodNode method, final Frame initialFrame) + final @InternalForm String owner, final MethodNode method, final Frame initialFrame) throws AnalyzerException { int lastJvmOrFrameInsnIndex = -1; Frame currentFrame = initialFrame; @@ -263,7 +263,7 @@ private void expandFrames( * @throws AnalyzerException if 'frameNode' is invalid. */ private Frame expandFrame( - final String owner, final Frame previousFrame, final FrameNode frameNode) + final @InternalForm String owner, final Frame previousFrame, final FrameNode frameNode) throws AnalyzerException { Frame frame = newFrame(previousFrame); List locals = frameNode.local == null ? Collections.emptyList() : frameNode.local; @@ -326,7 +326,7 @@ private Frame expandFrame( * @return a value that represents the given type. * @throws AnalyzerException if 'type' is an invalid stack map frame type. */ - private V newFrameValue(final String owner, final FrameNode frameNode, final Object type) + private V newFrameValue(final @InternalForm String owner, final FrameNode frameNode, final Object type) throws AnalyzerException { if (type == Opcodes.TOP) { return interpreter.newValue(null); diff --git a/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java b/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java index 84db1548..d12f08b2 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/CheckMethodAdapter.java @@ -700,7 +700,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { checkVisitCodeCalled(); checkVisitMaxsNotCalled(); checkOpcodeMethod(opcode, Method.VISIT_TYPE_INSN); @@ -714,7 +714,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { checkVisitCodeCalled(); checkVisitMaxsNotCalled(); checkOpcodeMethod(opcode, Method.VISIT_FIELD_INSN); @@ -728,8 +728,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcodeAndSource, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcodeAndSource & Opcodes.SOURCE_DEPRECATED) == 0) { @@ -859,7 +859,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { checkVisitCodeCalled(); checkVisitMaxsNotCalled(); checkDescriptor(version, descriptor, false); @@ -905,7 +905,7 @@ public AnnotationVisitor visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { checkVisitCodeCalled(); checkVisitMaxsNotCalled(); checkLabel(start, /* checkVisited= */ false, START_LABEL); @@ -1305,7 +1305,7 @@ static void checkMethodIdentifier(final int version, final String name, final St * @param name the string to be checked. * @param message the message to use in case of error. */ - static void checkInternalName(final int version, final String name, final String message) { + static void checkInternalName(final int version, final @InternalForm String name, final String message) { if (name == null || name.length() == 0) { throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY); } @@ -1324,7 +1324,7 @@ static void checkInternalName(final int version, final String name, final String * @param message the message to use in case of error. */ private static void checkInternalClassName( - final int version, final String name, final String message) { + final int version, final @InternalForm String name, final String message) { try { int startIndex = 0; int slashIndex; diff --git a/asm-util/src/main/java/org/objectweb/asm/util/CheckModuleAdapter.java b/asm-util/src/main/java/org/objectweb/asm/util/CheckModuleAdapter.java index bb748ae2..63a6188d 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/CheckModuleAdapter.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/CheckModuleAdapter.java @@ -93,20 +93,20 @@ protected CheckModuleAdapter( } @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { // Modules can only appear in V9 or more classes. CheckMethodAdapter.checkInternalName(Opcodes.V9, mainClass, "module main class"); super.visitMainClass(mainClass); } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { CheckMethodAdapter.checkInternalName(Opcodes.V9, packaze, "module package"); super.visitPackage(packaze); } @Override - public void visitRequire(final String module, final int access, final String version) { + public void visitRequire(final @DotSeparatedIdentifiers String module, final int access, final String version) { checkVisitEndNotCalled(); CheckClassAdapter.checkFullyQualifiedName(Opcodes.V9, module, "required module"); requiredModules.checkNameNotAlreadyDeclared(module); @@ -128,7 +128,7 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { checkVisitEndNotCalled(); CheckMethodAdapter.checkInternalName(Opcodes.V9, packaze, "package name"); exportedPackages.checkNameNotAlreadyDeclared(packaze); @@ -142,7 +142,7 @@ public void visitExport(final String packaze, final int access, final String... } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { checkVisitEndNotCalled(); if (isOpen) { throw new UnsupportedOperationException("An open module can not use open directive"); @@ -159,7 +159,7 @@ public void visitOpen(final String packaze, final int access, final String... mo } @Override - public void visitUse(final String service) { + public void visitUse(final @InternalForm String service) { checkVisitEndNotCalled(); CheckMethodAdapter.checkInternalName(Opcodes.V9, service, "service"); usedServices.checkNameNotAlreadyDeclared(service); @@ -167,7 +167,7 @@ public void visitUse(final String service) { } @Override - public void visitProvide(final String service, final String... providers) { + public void visitProvide(final @InternalForm String service, final @InternalForm String... providers) { checkVisitEndNotCalled(); CheckMethodAdapter.checkInternalName(Opcodes.V9, service, "service"); providedServices.checkNameNotAlreadyDeclared(service); diff --git a/asm-util/src/main/java/org/objectweb/asm/util/Printer.java b/asm-util/src/main/java/org/objectweb/asm/util/Printer.java index f670dcc3..1a94fe4b 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/Printer.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/Printer.java @@ -350,10 +350,10 @@ protected Printer(final int api) { public abstract void visit( int version, int access, - String name, + @InternalForm String name, String signature, - String superName, - String[] interfaces); + @InternalForm String superName, + @InternalForm String @Nullable [] interfaces); /** * Class source. See {@link org.objectweb.asm.ClassVisitor#visitSource}. @@ -374,7 +374,7 @@ public abstract void visit( * @param version the module version, or {@literal null}. * @return the printer. */ - public Printer visitModule(final String name, final int access, final String version) { + public Printer visitModule(final @DotSeparatedIdentifiers String name, final int access, final String version) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -389,7 +389,7 @@ public Printer visitModule(final String name, final int access, final String ver * @param nestHost the internal name of the host class of the nest (see {@link * Type#getInternalName()}). */ - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -403,7 +403,7 @@ public void visitNestHost(final String nestHost) { * @param descriptor the descriptor of the method that contains the class, or {@literal null} if * the class is not enclosed in a method of its enclosing class. */ - public abstract void visitOuterClass(String owner, String name, String descriptor); + public abstract void visitOuterClass(@InternalForm String owner, @Nullable @Identifier String name, String descriptor); /** * Class annotation. See {@link org.objectweb.asm.ClassVisitor#visitAnnotation}. @@ -449,7 +449,7 @@ public Printer visitClassTypeAnnotation( * * @param nestMember the internal name of a nest member (see {@link Type#getInternalName()}). */ - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -460,7 +460,7 @@ public void visitNestMember(final String nestMember) { * @param permittedSubclass the internal name of a permitted subclass (see {@link * Type#getInternalName()}). */ - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -475,7 +475,7 @@ public void visitPermittedSubclass(final String permittedSubclass) { * @param access the access flags of the inner class as originally declared in the enclosing * class. */ - public abstract void visitInnerClass(String name, String outerName, String innerName, int access); + public abstract void visitInnerClass(final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access); /** * Visits a record component of the class. See {@link @@ -511,7 +511,7 @@ public Printer visitRecordComponent( * @return the printer. */ public abstract Printer visitField( - int access, String name, String descriptor, String signature, Object value); + int access, @Identifier String name, @FieldDescriptor String descriptor, String signature, Object value); /** * Class method. See {@link org.objectweb.asm.ClassVisitor#visitMethod}. @@ -527,7 +527,7 @@ public abstract Printer visitField( * @return the printer. */ public abstract Printer visitMethod( - int access, String name, String descriptor, String signature, String[] exceptions); + int access, String name, String descriptor, String signature, @InternalForm String @Nullable [] exceptions); /** Class end. See {@link org.objectweb.asm.ClassVisitor#visitEnd}. */ public abstract void visitClassEnd(); @@ -542,7 +542,7 @@ public abstract Printer visitMethod( * @param mainClass the internal name of the main class of the current module (see {@link * Type#getInternalName()}). */ - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -551,7 +551,7 @@ public void visitMainClass(final String mainClass) { * * @param packaze the internal name of a package (see {@link Type#getInternalName()}). */ - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -563,7 +563,7 @@ public void visitPackage(final String packaze) { * ACC_STATIC_PHASE}, {@code ACC_SYNTHETIC} and {@code ACC_MANDATED}. * @param version the module version at compile time, or {@literal null}. */ - public void visitRequire(final String module, final int access, final String version) { + public void visitRequire(final @DotSeparatedIdentifiers String module, final int access, final String version) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -576,7 +576,7 @@ public void visitRequire(final String module, final int access, final String ver * @param modules the fully qualified names (using dots) of the modules that can access the public * classes of the exported package, or {@literal null}. */ - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -589,7 +589,7 @@ public void visitExport(final String packaze, final int access, final String... * @param modules the fully qualified names (using dots) of the modules that can use deep * reflection to the classes of the open package, or {@literal null}. */ - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -598,7 +598,7 @@ public void visitOpen(final String packaze, final int access, final String... mo * * @param service the internal name of the service (see {@link Type#getInternalName()}). */ - public void visitUse(final String service) { + public void visitUse(final @InternalForm String service) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -609,7 +609,7 @@ public void visitUse(final String service) { * @param providers the internal names of the implementations of the service (there is at least * one provider). */ - public void visitProvide(final String service, final String... providers) { + public void visitProvide(final @InternalForm String service, final @InternalForm String... providers) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); } @@ -929,7 +929,7 @@ public abstract void visitFrame( * @param type the operand of the instruction to be visited. This operand must be the internal * name of an object or array class (see {@link Type#getInternalName()}). */ - public abstract void visitTypeInsn(int opcode, String type); + public abstract void visitTypeInsn(int opcode, @InternalForm String type); /** * Method instruction. See {@link org.objectweb.asm.MethodVisitor#visitFieldInsn}. @@ -940,7 +940,7 @@ public abstract void visitFrame( * @param name the field's name. * @param descriptor the field's descriptor (see {@link Type}). */ - public abstract void visitFieldInsn(int opcode, String owner, String name, String descriptor); + public abstract void visitFieldInsn(int opcode, @InternalForm String owner, @Identifier String name, @FieldDescriptor String descriptor); /** * Method instruction. See {@link org.objectweb.asm.MethodVisitor#visitMethodInsn}. @@ -955,7 +955,7 @@ public abstract void visitFrame( */ @Deprecated public void visitMethodInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final String descriptor) { // This method was abstract before ASM5, and was therefore always overridden (without any // call to 'super'). Thus, at this point we necessarily have api >= ASM5, and we must then // redirect the method call to the ASM5 visitMethodInsn() method. @@ -975,8 +975,8 @@ public void visitMethodInsn( */ public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { throw new UnsupportedOperationException(UNSUPPORTED_OPERATION); @@ -1064,7 +1064,7 @@ public abstract void visitInvokeDynamicInsn( * @param descriptor an array type descriptor (see {@link Type}). * @param numDimensions the number of dimensions of the array to allocate. */ - public abstract void visitMultiANewArrayInsn(String descriptor, int numDimensions); + public abstract void visitMultiANewArrayInsn(@FieldDescriptor String descriptor, int numDimensions); /** * Instruction type annotation. See {@link org.objectweb.asm.MethodVisitor#visitInsnAnnotation}. @@ -1098,7 +1098,7 @@ public Printer visitInsnAnnotation( * Type#getInternalName()}), or {@literal null} to catch any exceptions (for "finally" * blocks). */ - public abstract void visitTryCatchBlock(Label start, Label end, Label handler, String type); + public abstract void visitTryCatchBlock(Label start, Label end, Label handler, @InternalForm String type); /** * Try catch block type annotation. See {@link diff --git a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java index 17dbcbf3..2771673c 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/Textifier.java @@ -166,10 +166,10 @@ static void main(final String[] args, final PrintWriter output, final PrintWrite public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { if ((access & Opcodes.ACC_MODULE) != 0) { // Modules are printed in visitModule. return; @@ -258,7 +258,7 @@ public Printer visitModule(final String name, final int access, final String ver } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { stringBuilder.setLength(0); stringBuilder.append(tab).append("NESTHOST "); appendDescriptor(INTERNAL_NAME, nestHost); @@ -267,7 +267,7 @@ public void visitNestHost(final String nestHost) { } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { stringBuilder.setLength(0); stringBuilder.append(tab).append("OUTERCLASS "); appendDescriptor(INTERNAL_NAME, owner); @@ -300,7 +300,7 @@ public void visitClassAttribute(final Attribute attribute) { } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { stringBuilder.setLength(0); stringBuilder.append(tab).append("NESTMEMBER "); appendDescriptor(INTERNAL_NAME, nestMember); @@ -309,7 +309,7 @@ public void visitNestMember(final String nestMember) { } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { stringBuilder.setLength(0); stringBuilder.append(tab).append("PERMITTEDSUBCLASS "); appendDescriptor(INTERNAL_NAME, permittedSubclass); @@ -319,7 +319,7 @@ public void visitPermittedSubclass(final String permittedSubclass) { @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { stringBuilder.setLength(0); stringBuilder.append(tab); appendRawAccess(access & ~Opcodes.ACC_SUPER); @@ -337,7 +337,7 @@ public void visitInnerClass( @Override public Printer visitRecordComponent( - final String name, final String descriptor, final String signature) { + final String name, final @FieldDescriptor String descriptor, final String signature) { stringBuilder.setLength(0); stringBuilder.append(tab).append("RECORDCOMPONENT "); if (signature != null) { @@ -361,7 +361,7 @@ public Printer visitRecordComponent( public Textifier visitField( final int access, final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final String signature, final Object value) { stringBuilder.setLength(0); @@ -399,7 +399,7 @@ public Textifier visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { stringBuilder.setLength(0); stringBuilder.append('\n'); if ((access & Opcodes.ACC_DEPRECATED) != 0) { @@ -456,14 +456,14 @@ public void visitClassEnd() { // ----------------------------------------------------------------------------------------------- @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { stringBuilder.setLength(0); stringBuilder.append(" // main class ").append(mainClass).append('\n'); text.add(stringBuilder.toString()); } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { stringBuilder.setLength(0); stringBuilder.append(" // package ").append(packaze).append('\n'); text.add(stringBuilder.toString()); @@ -488,17 +488,17 @@ public void visitRequire(final String require, final int access, final String ve } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { visitExportOrOpen("exports ", packaze, access, modules); } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { visitExportOrOpen("opens ", packaze, access, modules); } private void visitExportOrOpen( - final String method, final String packaze, final int access, final String... modules) { + final String method, final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { stringBuilder.setLength(0); stringBuilder.append(tab).append(method); stringBuilder.append(packaze); @@ -518,7 +518,7 @@ private void visitExportOrOpen( } @Override - public void visitUse(final String use) { + public void visitUse(final @InternalForm String use) { stringBuilder.setLength(0); stringBuilder.append(tab).append("uses "); appendDescriptor(INTERNAL_NAME, use); @@ -527,7 +527,7 @@ public void visitUse(final String use) { } @Override - public void visitProvide(final String provide, final String... providers) { + public void visitProvide(final @InternalForm String provide, final @InternalForm String... providers) { stringBuilder.setLength(0); stringBuilder.append(tab).append("provides "); appendDescriptor(INTERNAL_NAME, provide); @@ -670,7 +670,7 @@ private void visitType(final Type value) { } @Override - public void visitEnum(final String name, final String descriptor, final String value) { + public void visitEnum(final String name, final @FieldDescriptor String descriptor, final String value) { visitAnnotationValue(name); appendDescriptor(FIELD_DESCRIPTOR, descriptor); stringBuilder.append('.').append(value); @@ -678,7 +678,7 @@ public void visitEnum(final String name, final String descriptor, final String v } @Override - public Textifier visitAnnotation(final String name, final String descriptor) { + public Textifier visitAnnotation(final String name, final @FieldDescriptor String descriptor) { visitAnnotationValue(name); stringBuilder.append('@'); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -800,7 +800,7 @@ public Textifier visitAnnotableParameterCount(final int parameterCount, final bo @Override public Textifier visitParameterAnnotation( - final int parameter, final String descriptor, final boolean visible) { + final int parameter, final @FieldDescriptor String descriptor, final boolean visible) { stringBuilder.setLength(0); stringBuilder.append(tab2).append('@'); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -893,7 +893,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { stringBuilder.setLength(0); stringBuilder.append(tab2).append(OPCODES[opcode]).append(' '); appendDescriptor(INTERNAL_NAME, type); @@ -903,7 +903,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { stringBuilder.setLength(0); stringBuilder.append(tab2).append(OPCODES[opcode]).append(' '); appendDescriptor(INTERNAL_NAME, owner); @@ -916,8 +916,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { stringBuilder.setLength(0); @@ -1033,7 +1033,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { stringBuilder.setLength(0); stringBuilder.append(tab2).append("MULTIANEWARRAY "); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -1049,7 +1049,7 @@ public Printer visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { stringBuilder.setLength(0); stringBuilder.append(tab2).append("TRYCATCHBLOCK "); appendLabel(start); @@ -1065,7 +1065,7 @@ public void visitTryCatchBlock( @Override public Printer visitTryCatchAnnotation( - final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { + final int typeRef, final TypePath typePath, final @FieldDescriptor String descriptor, final boolean visible) { stringBuilder.setLength(0); stringBuilder.append(tab2).append("TRYCATCHBLOCK @"); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -1083,7 +1083,7 @@ public Printer visitTryCatchAnnotation( @Override public void visitLocalVariable( final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final String signature, final Label start, final Label end, @@ -1113,7 +1113,7 @@ public Printer visitLocalVariableAnnotation( final Label[] start, final Label[] end, final int[] index, - final String descriptor, + final @FieldDescriptor String descriptor, final boolean visible) { stringBuilder.setLength(0); stringBuilder.append(tab2).append("LOCALVARIABLE @"); @@ -1173,7 +1173,7 @@ public void visitMethodEnd() { * @return a visitor to visit the annotation values. */ // DontCheck(OverloadMethodsDeclarationOrder): overloads are semantically different. - public Textifier visitAnnotation(final String descriptor, final boolean visible) { + public Textifier visitAnnotation(final @FieldDescriptor String descriptor, final boolean visible) { stringBuilder.setLength(0); stringBuilder.append(tab).append('@'); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -1194,7 +1194,7 @@ public Textifier visitAnnotation(final String descriptor, final boolean visible) * @return a visitor to visit the annotation values. */ public Textifier visitTypeAnnotation( - final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { + final int typeRef, final TypePath typePath, final @FieldDescriptor String descriptor, final boolean visible) { stringBuilder.setLength(0); stringBuilder.append(tab).append('@'); appendDescriptor(FIELD_DESCRIPTOR, descriptor); @@ -1635,7 +1635,7 @@ private void appendFrameTypes(final int numTypes, final Object[] frameTypes) { stringBuilder.append(' '); } if (frameTypes[i] instanceof String) { - String descriptor = (String) frameTypes[i]; + @FieldDescriptor String descriptor = (@FieldDescriptor String) frameTypes[i]; if (descriptor.charAt(0) == '[') { appendDescriptor(FIELD_DESCRIPTOR, descriptor); } else { diff --git a/asm-util/src/main/java/org/objectweb/asm/util/TraceClassVisitor.java b/asm-util/src/main/java/org/objectweb/asm/util/TraceClassVisitor.java index b7859766..cf0ab53a 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/TraceClassVisitor.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/TraceClassVisitor.java @@ -128,10 +128,10 @@ public TraceClassVisitor( public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { p.visit(version, access, name, signature, superName, interfaces); super.visit(version, access, name, signature, superName, interfaces); } @@ -149,13 +149,13 @@ public ModuleVisitor visitModule(final String name, final int flags, final Strin } @Override - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { p.visitNestHost(nestHost); super.visitNestHost(nestHost); } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { p.visitOuterClass(owner, name, descriptor); super.visitOuterClass(owner, name, descriptor); } @@ -182,20 +182,20 @@ public void visitAttribute(final Attribute attribute) { } @Override - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { p.visitNestMember(nestMember); super.visitNestMember(nestMember); } @Override - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { p.visitPermittedSubclass(permittedSubclass); super.visitPermittedSubclass(permittedSubclass); } @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { p.visitInnerClass(name, outerName, innerName, access); super.visitInnerClass(name, outerName, innerName, access); } @@ -211,8 +211,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { Printer fieldPrinter = p.visitField(access, name, descriptor, signature, value); @@ -226,7 +226,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { Printer methodPrinter = p.visitMethod(access, name, descriptor, signature, exceptions); return new TraceMethodVisitor( super.visitMethod(access, name, descriptor, signature, exceptions), methodPrinter); diff --git a/asm-util/src/main/java/org/objectweb/asm/util/TraceMethodVisitor.java b/asm-util/src/main/java/org/objectweb/asm/util/TraceMethodVisitor.java index 073c55db..b87419e4 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/TraceMethodVisitor.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/TraceMethodVisitor.java @@ -149,14 +149,14 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { p.visitTypeInsn(opcode, type); super.visitTypeInsn(opcode, type); } @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { p.visitFieldInsn(opcode, owner, name, descriptor); super.visitFieldInsn(opcode, owner, name, descriptor); } @@ -165,8 +165,8 @@ public void visitFieldInsn( @SuppressWarnings("deprecation") public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { // Call the method that p is supposed to implement, depending on its api version. @@ -235,7 +235,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { p.visitMultiANewArrayInsn(descriptor, numDimensions); super.visitMultiANewArrayInsn(descriptor, numDimensions); } @@ -250,7 +250,7 @@ public AnnotationVisitor visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { p.visitTryCatchBlock(start, end, handler, type); super.visitTryCatchBlock(start, end, handler, type); } diff --git a/asm-util/src/main/java/org/objectweb/asm/util/TraceModuleVisitor.java b/asm-util/src/main/java/org/objectweb/asm/util/TraceModuleVisitor.java index 2d04a6a5..4e93ee0e 100644 --- a/asm-util/src/main/java/org/objectweb/asm/util/TraceModuleVisitor.java +++ b/asm-util/src/main/java/org/objectweb/asm/util/TraceModuleVisitor.java @@ -62,13 +62,13 @@ public TraceModuleVisitor(final ModuleVisitor moduleVisitor, final Printer print } @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { p.visitMainClass(mainClass); super.visitMainClass(mainClass); } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { p.visitPackage(packaze); super.visitPackage(packaze); } @@ -80,13 +80,13 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { p.visitExport(packaze, access, modules); super.visitExport(packaze, access, modules); } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { p.visitOpen(packaze, access, modules); super.visitOpen(packaze, access, modules); } diff --git a/asm-util/src/test/java/org/objectweb/asm/util/PrinterTest.java b/asm-util/src/test/java/org/objectweb/asm/util/PrinterTest.java index 0905eb76..bad98889 100644 --- a/asm-util/src/test/java/org/objectweb/asm/util/PrinterTest.java +++ b/asm-util/src/test/java/org/objectweb/asm/util/PrinterTest.java @@ -300,10 +300,10 @@ static class EmptyPrinter extends Printer { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { // Do nothing. } @@ -313,7 +313,7 @@ public void visitSource(final String source, final String debug) { } @Override - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { // Do nothing. } @@ -329,7 +329,7 @@ public void visitClassAttribute(final Attribute attribute) { @Override public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { // Do nothing. } @@ -349,7 +349,7 @@ public Printer visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return null; } @@ -451,13 +451,13 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { // Do nothing. } @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { // Do nothing. } @@ -502,13 +502,13 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { // Do nothing. } @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { // Do nothing. } diff --git a/asm-util/src/test/java/org/objectweb/asm/util/SignaturesProviders.java b/asm-util/src/test/java/org/objectweb/asm/util/SignaturesProviders.java index fdc28a1d..1f4f2d45 100644 --- a/asm-util/src/test/java/org/objectweb/asm/util/SignaturesProviders.java +++ b/asm-util/src/test/java/org/objectweb/asm/util/SignaturesProviders.java @@ -44,10 +44,10 @@ private static void collectSignatures(final PrecompiledClass classParameter) { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { if (signature != null) { CLASS_SIGNATURES.add(signature); } @@ -56,8 +56,8 @@ public void visit( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { if (signature != null) { @@ -72,7 +72,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { if (signature != null) { METHOD_SIGNATURES.add(signature); } diff --git a/asm-util/src/test/java/org/objectweb/asm/util/TraceClassVisitorTest.java b/asm-util/src/test/java/org/objectweb/asm/util/TraceClassVisitorTest.java index b3491893..98dad5d8 100644 --- a/asm-util/src/test/java/org/objectweb/asm/util/TraceClassVisitorTest.java +++ b/asm-util/src/test/java/org/objectweb/asm/util/TraceClassVisitorTest.java @@ -115,8 +115,8 @@ public AnnotationVisitor visitAnnotation( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return new TraceFieldVisitor(new Textifier()); @@ -128,7 +128,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new TraceMethodVisitor(new Textifier()); } }, diff --git a/asm/src/main/java/org/objectweb/asm/ClassReader.java b/asm/src/main/java/org/objectweb/asm/ClassReader.java index 33b2a300..063fafc3 100644 --- a/asm/src/main/java/org/objectweb/asm/ClassReader.java +++ b/asm/src/main/java/org/objectweb/asm/ClassReader.java @@ -27,6 +27,11 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.checkerframework.checker.signature.qual.FullyQualifiedName; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; @@ -295,7 +300,7 @@ public ClassReader(final InputStream inputStream) throws IOException { * retrieved with the current class loader's {@link ClassLoader#getSystemResourceAsStream}. * @throws IOException if an exception occurs during reading. */ - public ClassReader(final String className) throws IOException { + public ClassReader(final @FullyQualifiedName String className) throws IOException { this( readStream( ClassLoader.getSystemResourceAsStream(className.replace('.', '/') + ".class"), true)); @@ -370,9 +375,9 @@ public int getAccess() { * @return the internal class name. * @see ClassVisitor#visit(int, int, String, String, String, String[]) */ - public String getClassName() { + public @InternalForm String getClassName() { // this_class is just after the access_flags field (using 2 bytes). - return readClass(header + 2, new char[maxStringLength]); + return (@InternalForm String) readClass(header + 2, new char[maxStringLength]); } /** @@ -382,9 +387,9 @@ public String getClassName() { * @return the internal name of the super class, or {@literal null} for {@link Object} class. * @see ClassVisitor#visit(int, int, String, String, String, String[]) */ - public String getSuperName() { + public @InternalForm String getSuperName() { // super_class is after the access_flags and this_class fields (2 bytes each). - return readClass(header + 4, new char[maxStringLength]); + return (@InternalForm String) readClass(header + 4, new char[maxStringLength]); } /** @@ -394,11 +399,11 @@ public String getSuperName() { * interfaces are not returned. * @see ClassVisitor#visit(int, int, String, String, String, String[]) */ - public String[] getInterfaces() { + public @InternalForm String[] getInterfaces() { // interfaces_count is after the access_flags, this_class and super_class fields (2 bytes each). int currentOffset = header + 6; int interfacesCount = readUnsignedShort(currentOffset); - String[] interfaces = new String[interfacesCount]; + @InternalForm String[] interfaces = new String[interfacesCount]; if (interfacesCount > 0) { char[] charBuffer = new char[maxStringLength]; for (int i = 0; i < interfacesCount; ++i) { @@ -452,9 +457,9 @@ public void accept( char[] charBuffer = context.charBuffer; int currentOffset = header; int accessFlags = readUnsignedShort(currentOffset); - String thisClass = readClass(currentOffset + 2, charBuffer); - String superClass = readClass(currentOffset + 4, charBuffer); - String[] interfaces = new String[readUnsignedShort(currentOffset + 6)]; + @InternalForm String thisClass = readClass(currentOffset + 2, charBuffer); + @InternalForm String superClass = readClass(currentOffset + 4, charBuffer); + @InternalForm String[] interfaces = new String[readUnsignedShort(currentOffset + 6)]; currentOffset += 8; for (int i = 0; i < interfaces.length; ++i) { interfaces[i] = readClass(currentOffset, charBuffer); @@ -486,9 +491,9 @@ public void accept( // - The offset of the ModulePackages attribute, or 0. int modulePackagesOffset = 0; // - The string corresponding to the ModuleMainClass attribute, or null. - String moduleMainClass = null; + @InternalForm String moduleMainClass = null; // - The string corresponding to the NestHost attribute, or null. - String nestHostClass = null; + @InternalForm String nestHostClass = null; // - The offset of the NestMembers attribute, or 0. int nestMembersOffset = 0; // - The offset of the PermittedSubclasses attribute, or 0 @@ -589,9 +594,9 @@ public void accept( // Visit the EnclosingMethod attribute. if (enclosingMethodOffset != 0) { - String className = readClass(enclosingMethodOffset, charBuffer); + @InternalForm String className = readClass(enclosingMethodOffset, charBuffer); int methodIndex = readUnsignedShort(enclosingMethodOffset + 2); - String name = methodIndex == 0 ? null : readUTF8(cpInfoOffsets[methodIndex], charBuffer); + @Identifier String name = methodIndex == 0 ? null : (@Identifier String) readUTF8(cpInfoOffsets[methodIndex], charBuffer); String type = methodIndex == 0 ? null : readUTF8(cpInfoOffsets[methodIndex] + 2, charBuffer); classVisitor.visitOuterClass(className, name, type); } @@ -694,7 +699,7 @@ public void accept( int numberOfNestMembers = readUnsignedShort(nestMembersOffset); int currentNestMemberOffset = nestMembersOffset + 2; while (numberOfNestMembers-- > 0) { - classVisitor.visitNestMember(readClass(currentNestMemberOffset, charBuffer)); + classVisitor.visitNestMember((@InternalForm String) readClass(currentNestMemberOffset, charBuffer)); currentNestMemberOffset += 2; } } @@ -705,7 +710,7 @@ public void accept( int currentPermittedSubclassesOffset = permittedSubclassesOffset + 2; while (numberOfPermittedSubclasses-- > 0) { classVisitor.visitPermittedSubclass( - readClass(currentPermittedSubclassesOffset, charBuffer)); + (@InternalForm String) readClass(currentPermittedSubclassesOffset, charBuffer)); currentPermittedSubclassesOffset += 2; } } @@ -716,9 +721,9 @@ public void accept( int currentClassesOffset = innerClassesOffset + 2; while (numberOfClasses-- > 0) { classVisitor.visitInnerClass( - readClass(currentClassesOffset, charBuffer), - readClass(currentClassesOffset + 2, charBuffer), - readUTF8(currentClassesOffset + 4, charBuffer), + (@InternalForm String) readClass(currentClassesOffset, charBuffer), + (@InternalForm String) readClass(currentClassesOffset + 2, charBuffer), + (@Identifier String) readUTF8(currentClassesOffset + 4, charBuffer), readUnsignedShort(currentClassesOffset + 6)); currentClassesOffset += 8; } @@ -770,12 +775,12 @@ private void readModuleAttributes( final Context context, final int moduleOffset, final int modulePackagesOffset, - final String moduleMainClass) { + final @InternalForm String moduleMainClass) { char[] buffer = context.charBuffer; // Read the module_name_index, module_flags and module_version_index fields and visit them. int currentOffset = moduleOffset; - String moduleName = readModule(currentOffset, buffer); + @DotSeparatedIdentifiers String moduleName = readModule(currentOffset, buffer); int moduleFlags = readUnsignedShort(currentOffset + 2); String moduleVersion = readUTF8(currentOffset + 4, buffer); currentOffset += 6; @@ -794,7 +799,7 @@ private void readModuleAttributes( int packageCount = readUnsignedShort(modulePackagesOffset); int currentPackageOffset = modulePackagesOffset + 2; while (packageCount-- > 0) { - moduleVisitor.visitPackage(readPackage(currentPackageOffset, buffer)); + moduleVisitor.visitPackage((@InternalForm String) readPackage(currentPackageOffset, buffer)); currentPackageOffset += 2; } } @@ -804,7 +809,7 @@ private void readModuleAttributes( currentOffset += 2; while (requiresCount-- > 0) { // Read the requires_index, requires_flags and requires_version fields and visit them. - String requires = readModule(currentOffset, buffer); + @DotSeparatedIdentifiers String requires = readModule(currentOffset, buffer); int requiresFlags = readUnsignedShort(currentOffset + 2); String requiresVersion = readUTF8(currentOffset + 4, buffer); currentOffset += 6; @@ -817,11 +822,11 @@ private void readModuleAttributes( while (exportsCount-- > 0) { // Read the exports_index, exports_flags, exports_to_count and exports_to_index fields // and visit them. - String exports = readPackage(currentOffset, buffer); + @InternalForm String exports = readPackage(currentOffset, buffer); int exportsFlags = readUnsignedShort(currentOffset + 2); int exportsToCount = readUnsignedShort(currentOffset + 4); currentOffset += 6; - String[] exportsTo = null; + @DotSeparatedIdentifiers String[] exportsTo = null; if (exportsToCount != 0) { exportsTo = new String[exportsToCount]; for (int i = 0; i < exportsToCount; ++i) { @@ -837,11 +842,11 @@ private void readModuleAttributes( currentOffset += 2; while (opensCount-- > 0) { // Read the opens_index, opens_flags, opens_to_count and opens_to_index fields and visit them. - String opens = readPackage(currentOffset, buffer); + @InternalForm String opens = readPackage(currentOffset, buffer); int opensFlags = readUnsignedShort(currentOffset + 2); int opensToCount = readUnsignedShort(currentOffset + 4); currentOffset += 6; - String[] opensTo = null; + @DotSeparatedIdentifiers String[] opensTo = null; if (opensToCount != 0) { opensTo = new String[opensToCount]; for (int i = 0; i < opensToCount; ++i) { @@ -856,7 +861,7 @@ private void readModuleAttributes( int usesCount = readUnsignedShort(currentOffset); currentOffset += 2; while (usesCount-- > 0) { - moduleVisitor.visitUse(readClass(currentOffset, buffer)); + moduleVisitor.visitUse((@InternalForm String) readClass(currentOffset, buffer)); currentOffset += 2; } @@ -865,10 +870,10 @@ private void readModuleAttributes( currentOffset += 2; while (providesCount-- > 0) { // Read the provides_index, provides_with_count and provides_with_index fields and visit them. - String provides = readClass(currentOffset, buffer); + @InternalForm String provides = readClass(currentOffset, buffer); int providesWithCount = readUnsignedShort(currentOffset + 2); currentOffset += 4; - String[] providesWith = new String[providesWithCount]; + @InternalForm String[] providesWith = new String[providesWithCount]; for (int i = 0; i < providesWithCount; ++i) { providesWith[i] = readClass(currentOffset, buffer); currentOffset += 2; @@ -1069,8 +1074,8 @@ private int readField( // Read the access_flags, name_index and descriptor_index fields. int currentOffset = fieldInfoOffset; int accessFlags = readUnsignedShort(currentOffset); - String name = readUTF8(currentOffset + 2, charBuffer); - String descriptor = readUTF8(currentOffset + 4, charBuffer); + @Identifier String name = readUTF8(currentOffset + 2, charBuffer); + @FieldDescriptor String descriptor = readUTF8(currentOffset + 4, charBuffer); currentOffset += 6; // Read the field attributes (the variables are ordered as in Section 4.7 of the JVMS). @@ -1264,7 +1269,7 @@ private int readMethod( // - The offset of the Exceptions attribute, or 0. int exceptionsOffset = 0; // - The strings corresponding to the Exceptions attribute, or null. - String[] exceptions = null; + @InternalForm String[] exceptions = null; // - Whether the method has a Synthetic attribute. boolean synthetic = false; // - The constant pool index contained in the Signature attribute, or 0. @@ -1850,7 +1855,7 @@ private void readCode( Label start = createLabel(readUnsignedShort(currentOffset), labels); Label end = createLabel(readUnsignedShort(currentOffset + 2), labels); Label handler = createLabel(readUnsignedShort(currentOffset + 4), labels); - String catchType = readUTF8(cpInfoOffsets[readUnsignedShort(currentOffset + 6)], charBuffer); + @InternalForm String catchType = (@InternalForm String) readUTF8(cpInfoOffsets[readUnsignedShort(currentOffset + 6)], charBuffer); currentOffset += 8; methodVisitor.visitTryCatchBlock(start, end, handler, catchType); } @@ -2436,9 +2441,9 @@ private void readCode( { int cpInfoOffset = cpInfoOffsets[readUnsignedShort(currentOffset + 1)]; int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)]; - String owner = readClass(cpInfoOffset, charBuffer); - String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer); - String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer); + @InternalForm String owner = readClass(cpInfoOffset, charBuffer); + @Identifier String name = (@Identifier String) readUTF8(nameAndTypeCpInfoOffset, charBuffer); + @FieldDescriptor String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer); if (opcode < Opcodes.INVOKEVIRTUAL) { methodVisitor.visitFieldInsn(opcode, owner, name, descriptor); } else { @@ -2479,7 +2484,7 @@ private void readCode( case Opcodes.ANEWARRAY: case Opcodes.CHECKCAST: case Opcodes.INSTANCEOF: - methodVisitor.visitTypeInsn(opcode, readClass(currentOffset + 1, charBuffer)); + methodVisitor.visitTypeInsn(opcode, (@InternalForm String) readClass(currentOffset + 1, charBuffer)); currentOffset += 3; break; case Opcodes.IINC: @@ -2489,7 +2494,7 @@ private void readCode( break; case Opcodes.MULTIANEWARRAY: methodVisitor.visitMultiANewArrayInsn( - readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF); + (@FieldDescriptor String) readClass(currentOffset + 1, charBuffer), classBuffer[currentOffset + 3] & 0xFF); currentOffset += 4; break; default: @@ -3779,8 +3784,8 @@ public String readClass(final int offset, final char[] charBuffer) { * large. It is not automatically resized. * @return the String corresponding to the specified CONSTANT_Module entry. */ - public String readModule(final int offset, final char[] charBuffer) { - return readStringish(offset, charBuffer); + public @DotSeparatedIdentifiers String readModule(final int offset, final char[] charBuffer) { + return (@DotSeparatedIdentifiers String) readStringish(offset, charBuffer); } /** @@ -3794,8 +3799,8 @@ public String readModule(final int offset, final char[] charBuffer) { * large. It is not automatically resized. * @return the String corresponding to the specified CONSTANT_Package entry. */ - public String readPackage(final int offset, final char[] charBuffer) { - return readStringish(offset, charBuffer); + public @InternalForm String readPackage(final int offset, final char[] charBuffer) { + return (@InternalForm String) readStringish(offset, charBuffer); } /** @@ -3816,7 +3821,7 @@ private ConstantDynamic readConstantDynamic( int cpInfoOffset = cpInfoOffsets[constantPoolEntryIndex]; int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 2)]; String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer); - String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer); + @FieldDescriptor String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer); int bootstrapMethodOffset = bootstrapMethodOffsets[readUnsignedShort(cpInfoOffset)]; Handle handle = (Handle) readConst(readUnsignedShort(bootstrapMethodOffset), charBuffer); Object[] bootstrapMethodArguments = new Object[readUnsignedShort(bootstrapMethodOffset + 2)]; @@ -3855,7 +3860,7 @@ public Object readConst(final int constantPoolEntryIndex, final char[] charBuffe case Symbol.CONSTANT_DOUBLE_TAG: return Double.longBitsToDouble(readLong(cpInfoOffset)); case Symbol.CONSTANT_CLASS_TAG: - return Type.getObjectType(readUTF8(cpInfoOffset, charBuffer)); + return Type.getObjectType((@InternalForm String) readUTF8(cpInfoOffset, charBuffer)); case Symbol.CONSTANT_STRING_TAG: return readUTF8(cpInfoOffset, charBuffer); case Symbol.CONSTANT_METHOD_TYPE_TAG: @@ -3864,7 +3869,7 @@ public Object readConst(final int constantPoolEntryIndex, final char[] charBuffe int referenceKind = readByte(cpInfoOffset); int referenceCpInfoOffset = cpInfoOffsets[readUnsignedShort(cpInfoOffset + 1)]; int nameAndTypeCpInfoOffset = cpInfoOffsets[readUnsignedShort(referenceCpInfoOffset + 2)]; - String owner = readClass(referenceCpInfoOffset, charBuffer); + @InternalForm String owner = readClass(referenceCpInfoOffset, charBuffer); String name = readUTF8(nameAndTypeCpInfoOffset, charBuffer); String descriptor = readUTF8(nameAndTypeCpInfoOffset + 2, charBuffer); boolean isInterface = diff --git a/asm/src/main/java/org/objectweb/asm/ClassTooLargeException.java b/asm/src/main/java/org/objectweb/asm/ClassTooLargeException.java index de177b1e..58aa107d 100644 --- a/asm/src/main/java/org/objectweb/asm/ClassTooLargeException.java +++ b/asm/src/main/java/org/objectweb/asm/ClassTooLargeException.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * Exception thrown when the constant pool of a class produced by a {@link ClassWriter} is too * large. @@ -36,7 +38,7 @@ public final class ClassTooLargeException extends IndexOutOfBoundsException { private static final long serialVersionUID = 160715609518896765L; - private final String className; + private final @InternalForm String className; private final int constantPoolCount; /** @@ -46,7 +48,7 @@ public final class ClassTooLargeException extends IndexOutOfBoundsException { * org.objectweb.asm.Type#getInternalName()}). * @param constantPoolCount the number of constant pool items of the class. */ - public ClassTooLargeException(final String className, final int constantPoolCount) { + public ClassTooLargeException(final @InternalForm String className, final int constantPoolCount) { super("Class too large: " + className); this.className = className; this.constantPoolCount = constantPoolCount; @@ -57,7 +59,7 @@ public ClassTooLargeException(final String className, final int constantPoolCoun * * @return the internal name of the class. */ - public String getClassName() { + public @InternalForm String getClassName() { return className; } diff --git a/asm/src/main/java/org/objectweb/asm/ClassVisitor.java b/asm/src/main/java/org/objectweb/asm/ClassVisitor.java index b4cba80b..c492f556 100644 --- a/asm/src/main/java/org/objectweb/asm/ClassVisitor.java +++ b/asm/src/main/java/org/objectweb/asm/ClassVisitor.java @@ -27,6 +27,12 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A visitor to visit a Java class. The methods of this class must be called in the following order: * {@code visit} [ {@code visitSource} ] [ {@code visitModule} ][ {@code visitNestHost} ][ {@code @@ -112,10 +118,10 @@ public ClassVisitor getDelegate() { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { if (api < Opcodes.ASM8 && (access & Opcodes.ACC_RECORD) != 0) { throw new UnsupportedOperationException("Records requires ASM8"); } @@ -148,7 +154,7 @@ public void visitSource(final String source, final String debug) { * @return a visitor to visit the module values, or {@literal null} if this visitor is not * interested in visiting this module. */ - public ModuleVisitor visitModule(final String name, final int access, final String version) { + public ModuleVisitor visitModule(final @DotSeparatedIdentifiers String name, final int access, final String version) { if (api < Opcodes.ASM6) { throw new UnsupportedOperationException("Module requires ASM6"); } @@ -169,7 +175,7 @@ public ModuleVisitor visitModule(final String name, final int access, final Stri * @param nestHost the internal name of the host class of the nest (see {@link * Type#getInternalName()}). */ - public void visitNestHost(final String nestHost) { + public void visitNestHost(final @InternalForm String nestHost) { if (api < Opcodes.ASM7) { throw new UnsupportedOperationException("NestHost requires ASM7"); } @@ -193,7 +199,7 @@ public void visitNestHost(final String nestHost) { * enclosed in an instance initializer, static initializer, instance variable initializer, or * class variable initializer). */ - public void visitOuterClass(final String owner, final String name, final String descriptor) { + public void visitOuterClass(final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { if (cv != null) { cv.visitOuterClass(owner, name, descriptor); } @@ -260,7 +266,7 @@ public void visitAttribute(final Attribute attribute) { * * @param nestMember the internal name of a nest member (see {@link Type#getInternalName()}). */ - public void visitNestMember(final String nestMember) { + public void visitNestMember(final @InternalForm String nestMember) { if (api < Opcodes.ASM7) { throw new UnsupportedOperationException("NestMember requires ASM7"); } @@ -276,7 +282,7 @@ public void visitNestMember(final String nestMember) { * @param permittedSubclass the internal name of a permitted subclass (see {@link * Type#getInternalName()}). */ - public void visitPermittedSubclass(final String permittedSubclass) { + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) { if (api < Opcodes.ASM9) { throw new UnsupportedOperationException("PermittedSubclasses requires ASM9"); } @@ -301,7 +307,7 @@ public void visitPermittedSubclass(final String permittedSubclass) { * class was compiled. */ public void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { if (cv != null) { cv.visitInnerClass(name, outerName, innerName, access); } @@ -348,8 +354,8 @@ public RecordComponentVisitor visitRecordComponent( */ public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { if (cv != null) { @@ -379,7 +385,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { if (cv != null) { return cv.visitMethod(access, name, descriptor, signature, exceptions); } diff --git a/asm/src/main/java/org/objectweb/asm/ClassWriter.java b/asm/src/main/java/org/objectweb/asm/ClassWriter.java index eeff8130..dd6d9e34 100644 --- a/asm/src/main/java/org/objectweb/asm/ClassWriter.java +++ b/asm/src/main/java/org/objectweb/asm/ClassWriter.java @@ -27,6 +27,13 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.plumelib.reflection.Signatures; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A {@link ClassVisitor} that generates a corresponding ClassFile structure, as defined in the Java * Virtual Machine Specification (JVMS). It can be used alone, to generate a Java class "from @@ -290,10 +297,10 @@ public boolean hasFlags(final int flags) { public final void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { this.version = version; this.accessFlags = access; this.thisClass = symbolTable.setMajorVersionAndClassName(version & 0xFFFF, name); @@ -325,7 +332,7 @@ public final void visitSource(final String file, final String debug) { @Override public final ModuleVisitor visitModule( - final String name, final int access, final String version) { + final @DotSeparatedIdentifiers String name, final int access, final String version) { return moduleWriter = new ModuleWriter( symbolTable, @@ -335,13 +342,13 @@ public final ModuleVisitor visitModule( } @Override - public final void visitNestHost(final String nestHost) { + public final void visitNestHost(final @InternalForm String nestHost) { nestHostClassIndex = symbolTable.addConstantClass(nestHost).index; } @Override public final void visitOuterClass( - final String owner, final String name, final String descriptor) { + final @InternalForm String owner, final @Nullable @Identifier String name, final String descriptor) { enclosingClassIndex = symbolTable.addConstantClass(owner).index; if (name != null && descriptor != null) { enclosingMethodIndex = symbolTable.addConstantNameAndType(name, descriptor); @@ -381,7 +388,7 @@ public final void visitAttribute(final Attribute attribute) { } @Override - public final void visitNestMember(final String nestMember) { + public final void visitNestMember(final @InternalForm String nestMember) { if (nestMemberClasses == null) { nestMemberClasses = new ByteVector(); } @@ -390,7 +397,7 @@ public final void visitNestMember(final String nestMember) { } @Override - public final void visitPermittedSubclass(final String permittedSubclass) { + public final void visitPermittedSubclass(final @InternalForm String permittedSubclass) { if (permittedSubclasses == null) { permittedSubclasses = new ByteVector(); } @@ -400,7 +407,7 @@ public final void visitPermittedSubclass(final String permittedSubclass) { @Override public final void visitInnerClass( - final String name, final String outerName, final String innerName, final int access) { + final @InternalForm String name, final @InternalForm String outerName, final @Identifier String innerName, final int access) { if (innerClasses == null) { innerClasses = new ByteVector(); } @@ -439,8 +446,8 @@ public final RecordComponentVisitor visitRecordComponent( @Override public final FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { FieldWriter fieldWriter = @@ -459,7 +466,7 @@ public final MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { MethodWriter methodWriter = new MethodWriter(symbolTable, access, name, descriptor, signature, exceptions, compute); if (firstMethod == null) { @@ -840,7 +847,7 @@ public int newUTF8(final String value) { * @param value the internal name of the class (see {@link Type#getInternalName()}). * @return the index of a new or already existing class reference item. */ - public int newClass(final String value) { + public int newClass(final @InternalForm String value) { return symbolTable.addConstantClass(value).index; } @@ -864,7 +871,7 @@ public int newMethodType(final String methodDescriptor) { * @param moduleName name of the module. * @return the index of a new or already existing module reference item. */ - public int newModule(final String moduleName) { + public int newModule(final @DotSeparatedIdentifiers String moduleName) { return symbolTable.addConstantModule(moduleName).index; } @@ -876,7 +883,7 @@ public int newModule(final String moduleName) { * @param packageName name of the package in its internal form. * @return the index of a new or already existing module reference item. */ - public int newPackage(final String packageName) { + public int newPackage(final @InternalForm String packageName) { return symbolTable.addConstantPackage(packageName).index; } @@ -899,7 +906,7 @@ public int newPackage(final String packageName) { */ @Deprecated public int newHandle( - final int tag, final String owner, final String name, final String descriptor) { + final int tag, final @InternalForm String owner, final String name, final String descriptor) { return newHandle(tag, owner, name, descriptor, tag == Opcodes.H_INVOKEINTERFACE); } @@ -921,7 +928,7 @@ public int newHandle( */ public int newHandle( final int tag, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { @@ -941,7 +948,7 @@ public int newHandle( */ public int newConstantDynamic( final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final Handle bootstrapMethodHandle, final Object... bootstrapMethodArguments) { return symbolTable.addConstantDynamic( @@ -980,7 +987,7 @@ public int newInvokeDynamic( * @param descriptor the field's descriptor. * @return the index of a new or already existing field reference item. */ - public int newField(final String owner, final String name, final String descriptor) { + public int newField(final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { return symbolTable.addConstantFieldref(owner, name, descriptor).index; } @@ -997,7 +1004,7 @@ public int newField(final String owner, final String name, final String descript * @return the index of a new or already existing method reference item. */ public int newMethod( - final String owner, final String name, final String descriptor, final boolean isInterface) { + final @InternalForm String owner, final @Identifier String name, final String descriptor, final boolean isInterface) { return symbolTable.addConstantMethodref(owner, name, descriptor, isInterface).index; } @@ -1053,19 +1060,19 @@ public final void setFlags(final int flags) { * @return the internal name of the common super class of the two given classes (see {@link * Type#getInternalName()}). */ - protected String getCommonSuperClass(final String type1, final String type2) { + protected @InternalForm String getCommonSuperClass(final @InternalForm String type1, final @InternalForm String type2) { ClassLoader classLoader = getClassLoader(); Class class1; try { class1 = Class.forName(type1.replace('/', '.'), false, classLoader); } catch (ClassNotFoundException e) { - throw new TypeNotPresentException(type1, e); + throw new TypeNotPresentException(Signatures.internalFormToFullyQualified(type1), e); // bug fix } Class class2; try { class2 = Class.forName(type2.replace('/', '.'), false, classLoader); } catch (ClassNotFoundException e) { - throw new TypeNotPresentException(type2, e); + throw new TypeNotPresentException(Signatures.internalFormToFullyQualified(type2), e); // bug fix } if (class1.isAssignableFrom(class2)) { return type1; @@ -1079,7 +1086,8 @@ protected String getCommonSuperClass(final String type1, final String type2) { do { class1 = class1.getSuperclass(); } while (!class1.isAssignableFrom(class2)); - return class1.getName().replace('.', '/'); + // If not an array or primitives, this conversion works. + return (@InternalForm String) class1.getName().replace('.', '/'); } } diff --git a/asm/src/main/java/org/objectweb/asm/ConstantDynamic.java b/asm/src/main/java/org/objectweb/asm/ConstantDynamic.java index f3d21277..7772a640 100644 --- a/asm/src/main/java/org/objectweb/asm/ConstantDynamic.java +++ b/asm/src/main/java/org/objectweb/asm/ConstantDynamic.java @@ -27,6 +27,7 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.FieldDescriptor; import java.util.Arrays; /** @@ -40,7 +41,7 @@ public final class ConstantDynamic { private final String name; /** The constant type (must be a field descriptor). */ - private final String descriptor; + private final @FieldDescriptor String descriptor; /** The bootstrap method to use to compute the constant value at runtime. */ private final Handle bootstrapMethod; @@ -62,7 +63,7 @@ public final class ConstantDynamic { */ public ConstantDynamic( final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final Handle bootstrapMethod, final Object... bootstrapMethodArguments) { this.name = name; @@ -85,7 +86,7 @@ public String getName() { * * @return the type of this constant, as a field descriptor. */ - public String getDescriptor() { + public @FieldDescriptor String getDescriptor() { return descriptor; } diff --git a/asm/src/main/java/org/objectweb/asm/Constants.java b/asm/src/main/java/org/objectweb/asm/Constants.java index 98684e2a..865ac150 100644 --- a/asm/src/main/java/org/objectweb/asm/Constants.java +++ b/asm/src/main/java/org/objectweb/asm/Constants.java @@ -27,6 +27,7 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; @@ -184,13 +185,14 @@ private Constants() {} static void checkAsmExperimental(final Object caller) { Class callerClass = caller.getClass(); - String internalName = callerClass.getName().replace('.', '/'); + @SuppressWarnings("signature:assignment") // If not an array or primitive, this conversion works. + @InternalForm String internalName = callerClass.getName().replace('.', '/'); if (!isWhitelisted(internalName)) { checkIsPreview(callerClass.getClassLoader().getResourceAsStream(internalName + ".class")); } } - static boolean isWhitelisted(final String internalName) { + static boolean isWhitelisted(final @InternalForm String internalName) { if (!internalName.startsWith("org/objectweb/asm/")) { return false; } diff --git a/asm/src/main/java/org/objectweb/asm/FieldVisitor.java b/asm/src/main/java/org/objectweb/asm/FieldVisitor.java index 2893d9f5..6a61a8f9 100644 --- a/asm/src/main/java/org/objectweb/asm/FieldVisitor.java +++ b/asm/src/main/java/org/objectweb/asm/FieldVisitor.java @@ -120,7 +120,7 @@ public AnnotationVisitor visitAnnotation(final String descriptor, final boolean public AnnotationVisitor visitTypeAnnotation( final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException("This feature requires ASM5"); + throw new UnsupportedOperationException("visitTypeAnnotation requires ASM5"); } if (fv != null) { return fv.visitTypeAnnotation(typeRef, typePath, descriptor, visible); diff --git a/asm/src/main/java/org/objectweb/asm/FieldWriter.java b/asm/src/main/java/org/objectweb/asm/FieldWriter.java index b0c4502b..268f9f18 100644 --- a/asm/src/main/java/org/objectweb/asm/FieldWriter.java +++ b/asm/src/main/java/org/objectweb/asm/FieldWriter.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.FieldDescriptor; + /** * A {@link FieldVisitor} that generates a corresponding 'field_info' structure, as defined in the * Java Virtual Machine Specification (JVMS). @@ -121,7 +123,7 @@ final class FieldWriter extends FieldVisitor { final SymbolTable symbolTable, final int access, final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final String signature, final Object constantValue) { super(/* latest api = */ Opcodes.ASM9); diff --git a/asm/src/main/java/org/objectweb/asm/Frame.java b/asm/src/main/java/org/objectweb/asm/Frame.java index 5047d41e..e4b0209e 100644 --- a/asm/src/main/java/org/objectweb/asm/Frame.java +++ b/asm/src/main/java/org/objectweb/asm/Frame.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * The input and output stack map frames of a basic block. * @@ -285,14 +287,14 @@ static int getAbstractTypeFromApiFormat(final SymbolTable symbolTable, final Obj if (type instanceof Integer) { return CONSTANT_KIND | ((Integer) type).intValue(); } else if (type instanceof String) { - String descriptor = Type.getObjectType((String) type).getDescriptor(); + String descriptor = Type.getObjectType((@InternalForm String) type).getDescriptor(); return getAbstractTypeFromDescriptor(symbolTable, descriptor, 0); } else { Label label = (Label) type; if ((label.flags & Label.FLAG_RESOLVED) != 0) { - return UNINITIALIZED_KIND | symbolTable.addUninitializedType("", label.bytecodeOffset); + return UNINITIALIZED_KIND | symbolTable.addUninitializedType((@InternalForm String) "", label.bytecodeOffset); } else { - return FORWARD_UNINITIALIZED_KIND | symbolTable.addForwardUninitializedType("", label); + return FORWARD_UNINITIALIZED_KIND | symbolTable.addForwardUninitializedType((@InternalForm String) "", label); } } } @@ -306,7 +308,7 @@ static int getAbstractTypeFromApiFormat(final SymbolTable symbolTable, final Obj * @return the abstract type value corresponding to the given internal name. */ static int getAbstractTypeFromInternalName( - final SymbolTable symbolTable, final String internalName) { + final SymbolTable symbolTable, final @InternalForm String internalName) { return REFERENCE_KIND | symbolTable.addType(internalName); } @@ -320,7 +322,7 @@ static int getAbstractTypeFromInternalName( */ private static int getAbstractTypeFromDescriptor( final SymbolTable symbolTable, final String buffer, final int offset) { - String internalName; + @InternalForm String internalName; switch (buffer.charAt(offset)) { case 'V': return 0; @@ -337,7 +339,7 @@ private static int getAbstractTypeFromDescriptor( case 'D': return DOUBLE; case 'L': - internalName = buffer.substring(offset + 1, buffer.length() - 1); + internalName = (@InternalForm String) buffer.substring(offset + 1, buffer.length() - 1); return REFERENCE_KIND | symbolTable.addType(internalName); case '[': int elementDescriptorOffset = offset + 1; @@ -371,7 +373,7 @@ private static int getAbstractTypeFromDescriptor( typeValue = DOUBLE; break; case 'L': - internalName = buffer.substring(elementDescriptorOffset + 1, buffer.length() - 1); + internalName = (@InternalForm String) buffer.substring(elementDescriptorOffset + 1, buffer.length() - 1); typeValue = REFERENCE_KIND | symbolTable.addType(internalName); break; default: @@ -668,7 +670,7 @@ private int getInitializedType(final SymbolTable symbolTable, final int abstract return REFERENCE_KIND | symbolTable.addType(symbolTable.getClassName()); } else { return REFERENCE_KIND - | symbolTable.addType(symbolTable.getType(abstractType & VALUE_MASK).value); + | symbolTable.addType((@InternalForm String) symbolTable.getType(abstractType & VALUE_MASK).value); } } } @@ -1058,7 +1060,7 @@ void execute( push(symbolTable, argSymbol.value); break; case Opcodes.NEW: - push(UNINITIALIZED_KIND | symbolTable.addUninitializedType(argSymbol.value, arg)); + push(UNINITIALIZED_KIND | symbolTable.addUninitializedType((@InternalForm String) argSymbol.value, arg)); break; case Opcodes.NEWARRAY: pop(); @@ -1092,7 +1094,7 @@ void execute( } break; case Opcodes.ANEWARRAY: - String arrayElementType = argSymbol.value; + @InternalForm String arrayElementType = argSymbol.value; pop(); if (arrayElementType.charAt(0) == '[') { push(symbolTable, '[' + arrayElementType); @@ -1101,7 +1103,7 @@ void execute( } break; case Opcodes.CHECKCAST: - String castType = argSymbol.value; + @InternalForm String castType = argSymbol.value; pop(); if (castType.charAt(0) == '[') { push(symbolTable, castType); @@ -1429,7 +1431,7 @@ static void putAbstractType( case REFERENCE_KIND: output .putByte(ITEM_OBJECT) - .putShort(symbolTable.addConstantClass(symbolTable.getType(typeValue).value).index); + .putShort(symbolTable.addConstantClass((@InternalForm String) symbolTable.getType(typeValue).value).index); break; case UNINITIALIZED_KIND: output.putByte(ITEM_UNINITIALIZED).putShort((int) symbolTable.getType(typeValue).data); @@ -1484,7 +1486,7 @@ static void putAbstractType( } output .putByte(ITEM_OBJECT) - .putShort(symbolTable.addConstantClass(typeDescriptor.toString()).index); + .putShort(symbolTable.addConstantClass((@InternalForm String) typeDescriptor.toString()).index); } } } diff --git a/asm/src/main/java/org/objectweb/asm/Handle.java b/asm/src/main/java/org/objectweb/asm/Handle.java index 6ffae75b..d94bdd72 100644 --- a/asm/src/main/java/org/objectweb/asm/Handle.java +++ b/asm/src/main/java/org/objectweb/asm/Handle.java @@ -28,6 +28,8 @@ package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A reference to a field or a method. * @@ -45,7 +47,7 @@ public final class Handle { private final int tag; /** The internal name of the class that owns the field or method designated by this handle. */ - private final String owner; + private final @InternalForm String owner; /** The name of the field or method designated by this handle. */ private final String name; @@ -72,7 +74,7 @@ public final class Handle { * boolean)}. */ @Deprecated - public Handle(final int tag, final String owner, final String name, final String descriptor) { + public Handle(final int tag, final @InternalForm String owner, final String name, final String descriptor) { this(tag, owner, name, descriptor, tag == Opcodes.H_INVOKEINTERFACE); } @@ -92,7 +94,7 @@ public Handle(final int tag, final String owner, final String name, final String */ public Handle( final int tag, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { @@ -121,7 +123,7 @@ public int getTag() { * @return the internal name of the class that owns the field or method designated by this handle * (see {@link Type#getInternalName()}). */ - public String getOwner() { + public @InternalForm String getOwner() { return owner; } diff --git a/asm/src/main/java/org/objectweb/asm/Handler.java b/asm/src/main/java/org/objectweb/asm/Handler.java index 21593b65..9689fa92 100644 --- a/asm/src/main/java/org/objectweb/asm/Handler.java +++ b/asm/src/main/java/org/objectweb/asm/Handler.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * Information about an exception handler. Corresponds to an element of the exception_table array of * a Code attribute, as defined in the Java Virtual Machine Specification (JVMS). Handler instances @@ -67,7 +69,7 @@ final class Handler { * The internal name of the type of exceptions handled by this handler, or {@literal null} to * catch any exceptions. */ - final String catchTypeDescriptor; + final @InternalForm String catchTypeDescriptor; /** The next exception handler. */ Handler nextHandler; @@ -87,7 +89,7 @@ final class Handler { final Label endPc, final Label handlerPc, final int catchType, - final String catchTypeDescriptor) { + final @InternalForm String catchTypeDescriptor) { this.startPc = startPc; this.endPc = endPc; this.handlerPc = handlerPc; diff --git a/asm/src/main/java/org/objectweb/asm/MethodTooLargeException.java b/asm/src/main/java/org/objectweb/asm/MethodTooLargeException.java index 2fbf23b0..7721de18 100644 --- a/asm/src/main/java/org/objectweb/asm/MethodTooLargeException.java +++ b/asm/src/main/java/org/objectweb/asm/MethodTooLargeException.java @@ -27,6 +27,9 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * Exception thrown when the Code attribute of a method produced by a {@link ClassWriter} is too * large. @@ -36,8 +39,8 @@ public final class MethodTooLargeException extends IndexOutOfBoundsException { private static final long serialVersionUID = 6807380416709738314L; - private final String className; - private final String methodName; + private final @InternalForm String className; + private final @Identifier String methodName; private final String descriptor; private final int codeSize; @@ -50,8 +53,8 @@ public final class MethodTooLargeException extends IndexOutOfBoundsException { * @param codeSize the size of the method's Code attribute, in bytes. */ public MethodTooLargeException( - final String className, - final String methodName, + final @InternalForm String className, + final @Identifier String methodName, final String descriptor, final int codeSize) { super("Method too large: " + className + "." + methodName + " " + descriptor); @@ -66,7 +69,7 @@ public MethodTooLargeException( * * @return the internal name of the owner class (see {@link Type#getInternalName()}). */ - public String getClassName() { + public @InternalForm String getClassName() { return className; } diff --git a/asm/src/main/java/org/objectweb/asm/MethodVisitor.java b/asm/src/main/java/org/objectweb/asm/MethodVisitor.java index 23d445ee..dfd338d3 100644 --- a/asm/src/main/java/org/objectweb/asm/MethodVisitor.java +++ b/asm/src/main/java/org/objectweb/asm/MethodVisitor.java @@ -27,6 +27,10 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A visitor to visit a Java method. The methods of this class must be called in the following * order: ( {@code visitParameter} )* [ {@code visitAnnotationDefault} ] ( {@code visitAnnotation} | @@ -120,7 +124,7 @@ public MethodVisitor getDelegate() { */ public void visitParameter(final String name, final int access) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitParameter requires ASM5, found " + (api >> 16)); } if (mv != null) { mv.visitParameter(name, access); @@ -176,7 +180,7 @@ public AnnotationVisitor visitAnnotation(final String descriptor, final boolean public AnnotationVisitor visitTypeAnnotation( final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitTypeAnnotation requires ASM5, found " + (api >> 16)); } if (mv != null) { return mv.visitTypeAnnotation(typeRef, typePath, descriptor, visible); @@ -382,7 +386,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { * @param type the operand of the instruction to be visited. This operand must be the internal * name of an object or array class (see {@link Type#getInternalName()}). */ - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { if (mv != null) { mv.visitTypeInsn(opcode, type); } @@ -399,7 +403,7 @@ public void visitTypeInsn(final int opcode, final String type) { * @param descriptor the field's descriptor (see {@link Type}). */ public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { if (mv != null) { mv.visitFieldInsn(opcode, owner, name, descriptor); } @@ -418,7 +422,7 @@ public void visitFieldInsn( */ @Deprecated public void visitMethodInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final String descriptor) { int opcodeAndSource = opcode | (api < Opcodes.ASM5 ? Opcodes.SOURCE_DEPRECATED : 0); visitMethodInsn(opcodeAndSource, owner, name, descriptor, opcode == Opcodes.INVOKEINTERFACE); } @@ -436,13 +440,13 @@ public void visitMethodInsn( */ public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { if (api < Opcodes.ASM5 && (opcode & Opcodes.SOURCE_DEPRECATED) == 0) { if (isInterface != (opcode == Opcodes.INVOKEINTERFACE)) { - throw new UnsupportedOperationException("INVOKESPECIAL/STATIC on interfaces requires ASM5"); + throw new UnsupportedOperationException("INVOKESPECIAL/STATIC on interfaces requires ASM5, found " + (api >> 16)); } visitMethodInsn(opcode, owner, name, descriptor); return; @@ -469,7 +473,7 @@ public void visitInvokeDynamicInsn( final Handle bootstrapMethodHandle, final Object... bootstrapMethodArguments) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitInvokeDynamicInsn requires ASM5, found " + (api >> 16)); } if (mv != null) { mv.visitInvokeDynamicInsn(name, descriptor, bootstrapMethodHandle, bootstrapMethodArguments); @@ -554,7 +558,7 @@ public void visitLdcInsn(final Object value) { if (api < Opcodes.ASM5 && (value instanceof Handle || (value instanceof Type && ((Type) value).getSort() == Type.METHOD))) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitLdcInsn requires ASM5, found " + (api >> 16)); } if (api < Opcodes.ASM7 && value instanceof ConstantDynamic) { throw new UnsupportedOperationException("This feature requires ASM7"); @@ -612,7 +616,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe * @param descriptor an array type descriptor (see {@link Type}). * @param numDimensions the number of dimensions of the array to allocate. */ - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { if (mv != null) { mv.visitMultiANewArrayInsn(descriptor, numDimensions); } @@ -640,7 +644,7 @@ public void visitMultiANewArrayInsn(final String descriptor, final int numDimens public AnnotationVisitor visitInsnAnnotation( final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitInsnAnnotation requires ASM5, found " + (api >> 16)); } if (mv != null) { return mv.visitInsnAnnotation(typeRef, typePath, descriptor, visible); @@ -665,7 +669,7 @@ public AnnotationVisitor visitInsnAnnotation( * (by the {@link #visitLabel} method). */ public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { if (mv != null) { mv.visitTryCatchBlock(start, end, handler, type); } @@ -689,7 +693,7 @@ public void visitTryCatchBlock( public AnnotationVisitor visitTryCatchAnnotation( final int typeRef, final TypePath typePath, final String descriptor, final boolean visible) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitTryCatchAnnotation requires ASM5, found " + (api >> 16)); } if (mv != null) { return mv.visitTryCatchAnnotation(typeRef, typePath, descriptor, visible); @@ -752,7 +756,7 @@ public AnnotationVisitor visitLocalVariableAnnotation( final String descriptor, final boolean visible) { if (api < Opcodes.ASM5) { - throw new UnsupportedOperationException(REQUIRES_ASM5); + throw new UnsupportedOperationException("visitLocalVariableAnnotation requires ASM5, found " + (api >> 16)); } if (mv != null) { return mv.visitLocalVariableAnnotation( diff --git a/asm/src/main/java/org/objectweb/asm/MethodWriter.java b/asm/src/main/java/org/objectweb/asm/MethodWriter.java index 65f20251..ab26c80c 100644 --- a/asm/src/main/java/org/objectweb/asm/MethodWriter.java +++ b/asm/src/main/java/org/objectweb/asm/MethodWriter.java @@ -27,6 +27,11 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A {@link MethodVisitor} that generates a corresponding 'method_info' structure, as defined in the * Java Virtual Machine Specification (JVMS). @@ -300,7 +305,7 @@ final class MethodWriter extends MethodVisitor { private final int nameIndex; /** The name of this method. */ - private final String name; + private final @Identifier String name; /** The descriptor_index field of the method_info JVMS structure. */ private final int descriptorIndex; @@ -592,7 +597,7 @@ final class MethodWriter extends MethodVisitor { final String name, final String descriptor, final String signature, - final String[] exceptions, + final @InternalForm String @Nullable [] exceptions, final int compute) { super(/* latest api = */ Opcodes.ASM9); this.symbolTable = symbolTable; @@ -968,7 +973,7 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { lastBytecodeOffset = code.length; // Add the instruction to the bytecode of the method. Symbol typeSymbol = symbolTable.addConstantClass(type); @@ -990,7 +995,7 @@ public void visitTypeInsn(final int opcode, final String type) { @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { lastBytecodeOffset = code.length; // Add the instruction to the bytecode of the method. Symbol fieldrefSymbol = symbolTable.addConstantFieldref(owner, name, descriptor); @@ -1028,8 +1033,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { lastBytecodeOffset = code.length; @@ -1386,9 +1391,10 @@ private void visitSwitchInsn(final Label dflt, final Label[] labels) { } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { lastBytecodeOffset = code.length; // Add the instruction to the bytecode of the method. + @SuppressWarnings("signature:argument") // BUG?? Symbol descSymbol = symbolTable.addConstantClass(descriptor); code.put12(Opcodes.MULTIANEWARRAY, descSymbol.index).putByte(numDimensions); // If needed, update the maximum stack size and number of locals, and stack map frames. @@ -1427,7 +1433,7 @@ public AnnotationVisitor visitInsnAnnotation( @Override public void visitTryCatchBlock( - final Label start, final Label end, final Label handler, final String type) { + final Label start, final Label end, final Label handler, final @InternalForm String type) { Handler newHandler = new Handler( start, end, handler, type != null ? symbolTable.addConstantClass(type).index : 0, type); @@ -1978,7 +1984,7 @@ private void putFrameType(final Object type) { } else if (type instanceof String) { stackMapTableEntries .putByte(Frame.ITEM_OBJECT) - .putShort(symbolTable.addConstantClass((String) type).index); + .putShort(symbolTable.addConstantClass((@InternalForm String) type).index); } else { stackMapTableEntries.putByte(Frame.ITEM_UNINITIALIZED); ((Label) type).put(stackMapTableEntries); diff --git a/asm/src/main/java/org/objectweb/asm/ModuleVisitor.java b/asm/src/main/java/org/objectweb/asm/ModuleVisitor.java index 9a566f3d..65e3c306 100644 --- a/asm/src/main/java/org/objectweb/asm/ModuleVisitor.java +++ b/asm/src/main/java/org/objectweb/asm/ModuleVisitor.java @@ -27,6 +27,9 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A visitor to visit a Java module. The methods of this class must be called in the following * order: ( {@code visitMainClass} | ( {@code visitPackage} | {@code visitRequire} | {@code @@ -98,7 +101,7 @@ public ModuleVisitor getDelegate() { * @param mainClass the internal name of the main class of the current module (see {@link * Type#getInternalName()}). */ - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { if (mv != null) { mv.visitMainClass(mainClass); } @@ -109,7 +112,7 @@ public void visitMainClass(final String mainClass) { * * @param packaze the internal name of a package (see {@link Type#getInternalName()}). */ - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { if (mv != null) { mv.visitPackage(packaze); } @@ -123,7 +126,7 @@ public void visitPackage(final String packaze) { * ACC_STATIC_PHASE}, {@code ACC_SYNTHETIC} and {@code ACC_MANDATED}. * @param version the module version at compile time, or {@literal null}. */ - public void visitRequire(final String module, final int access, final String version) { + public void visitRequire(final @DotSeparatedIdentifiers String module, final int access, final String version) { if (mv != null) { mv.visitRequire(module, access, version); } @@ -138,7 +141,7 @@ public void visitRequire(final String module, final int access, final String ver * @param modules the fully qualified names (using dots) of the modules that can access the public * classes of the exported package, or {@literal null}. */ - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { if (mv != null) { mv.visitExport(packaze, access, modules); } @@ -153,7 +156,7 @@ public void visitExport(final String packaze, final int access, final String... * @param modules the fully qualified names (using dots) of the modules that can use deep * reflection to the classes of the open package, or {@literal null}. */ - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { if (mv != null) { mv.visitOpen(packaze, access, modules); } @@ -165,7 +168,7 @@ public void visitOpen(final String packaze, final int access, final String... mo * * @param service the internal name of the service (see {@link Type#getInternalName()}). */ - public void visitUse(final String service) { + public void visitUse(final @InternalForm String service) { if (mv != null) { mv.visitUse(service); } @@ -178,7 +181,7 @@ public void visitUse(final String service) { * @param providers the internal names (see {@link Type#getInternalName()}) of the implementations * of the service (there is at least one provider). */ - public void visitProvide(final String service, final String... providers) { + public void visitProvide(final @InternalForm String service, final @InternalForm String... providers) { if (mv != null) { mv.visitProvide(service, providers); } diff --git a/asm/src/main/java/org/objectweb/asm/ModuleWriter.java b/asm/src/main/java/org/objectweb/asm/ModuleWriter.java index 0ace0fa7..0ceb537a 100644 --- a/asm/src/main/java/org/objectweb/asm/ModuleWriter.java +++ b/asm/src/main/java/org/objectweb/asm/ModuleWriter.java @@ -27,6 +27,9 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A {@link ModuleVisitor} that generates the corresponding Module, ModulePackages and * ModuleMainClass attributes, as defined in the Java Virtual Machine Specification (JVMS). @@ -108,18 +111,18 @@ final class ModuleWriter extends ModuleVisitor { } @Override - public void visitMainClass(final String mainClass) { + public void visitMainClass(final @InternalForm String mainClass) { this.mainClassIndex = symbolTable.addConstantClass(mainClass).index; } @Override - public void visitPackage(final String packaze) { + public void visitPackage(final @InternalForm String packaze) { packageIndex.putShort(symbolTable.addConstantPackage(packaze).index); packageCount++; } @Override - public void visitRequire(final String module, final int access, final String version) { + public void visitRequire(final @DotSeparatedIdentifiers String module, final int access, final String version) { requires .putShort(symbolTable.addConstantModule(module).index) .putShort(access) @@ -128,7 +131,7 @@ public void visitRequire(final String module, final int access, final String ver } @Override - public void visitExport(final String packaze, final int access, final String... modules) { + public void visitExport(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { exports.putShort(symbolTable.addConstantPackage(packaze).index).putShort(access); if (modules == null) { exports.putShort(0); @@ -142,7 +145,7 @@ public void visitExport(final String packaze, final int access, final String... } @Override - public void visitOpen(final String packaze, final int access, final String... modules) { + public void visitOpen(final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { opens.putShort(symbolTable.addConstantPackage(packaze).index).putShort(access); if (modules == null) { opens.putShort(0); @@ -156,13 +159,13 @@ public void visitOpen(final String packaze, final int access, final String... mo } @Override - public void visitUse(final String service) { + public void visitUse(final @InternalForm String service) { usesIndex.putShort(symbolTable.addConstantClass(service).index); usesCount++; } @Override - public void visitProvide(final String service, final String... providers) { + public void visitProvide(final @InternalForm String service, final @InternalForm String... providers) { provides.putShort(symbolTable.addConstantClass(service).index); provides.putShort(providers.length); for (String provider : providers) { diff --git a/asm/src/main/java/org/objectweb/asm/Symbol.java b/asm/src/main/java/org/objectweb/asm/Symbol.java index 8d3d3169..b66c18d8 100644 --- a/asm/src/main/java/org/objectweb/asm/Symbol.java +++ b/asm/src/main/java/org/objectweb/asm/Symbol.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * An entry of the constant pool, of the BootstrapMethods attribute, or of the (ASM specific) type * table of a class. @@ -142,7 +144,7 @@ abstract class Symbol { * #CONSTANT_FIELDREF_TAG}, {@link #CONSTANT_METHODREF_TAG}, {@link * #CONSTANT_INTERFACE_METHODREF_TAG}, and {@link #CONSTANT_METHOD_HANDLE_TAG} symbols. */ - final String owner; + final @InternalForm String owner; /** * The name of the class field or method corresponding to this symbol. Only used for {@link @@ -232,7 +234,7 @@ abstract class Symbol { Symbol( final int index, final int tag, - final String owner, + final @InternalForm String owner, final String name, final String value, final long data) { diff --git a/asm/src/main/java/org/objectweb/asm/SymbolTable.java b/asm/src/main/java/org/objectweb/asm/SymbolTable.java index c3b17957..e62dc824 100644 --- a/asm/src/main/java/org/objectweb/asm/SymbolTable.java +++ b/asm/src/main/java/org/objectweb/asm/SymbolTable.java @@ -27,6 +27,11 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.DotSeparatedIdentifiers; +import org.checkerframework.checker.signature.qual.FieldDescriptor; +import org.checkerframework.checker.signature.qual.Identifier; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * The constant pool entries, the BootstrapMethods attribute entries and the (ASM specific) type * table entries of a class. @@ -56,7 +61,7 @@ final class SymbolTable { private int majorVersion; /** The internal name of the class to which this symbol table belongs. */ - private String className; + private @InternalForm String className; /** * The total number of {@link Entry} instances in {@link #entries}. This includes entries that are @@ -190,7 +195,7 @@ final class SymbolTable { addConstantMemberReference( itemIndex, itemTag, - classReader.readClass(itemOffset, charBuffer), + (@InternalForm String) classReader.readClass(itemOffset, charBuffer), classReader.readUTF8(nameAndTypeItemOffset, charBuffer), classReader.readUTF8(nameAndTypeItemOffset + 2, charBuffer)); break; @@ -219,7 +224,7 @@ final class SymbolTable { addConstantMethodHandle( itemIndex, classReader.readByte(itemOffset), - classReader.readClass(memberRefItemOffset, charBuffer), + (@InternalForm String) classReader.readClass(memberRefItemOffset, charBuffer), classReader.readUTF8(nameAndTypeItemOffset, charBuffer), classReader.readUTF8(nameAndTypeItemOffset + 2, charBuffer), classReader.readByte(memberRefItemOffset - 1) @@ -233,7 +238,7 @@ final class SymbolTable { addConstantDynamicOrInvokeDynamicReference( itemTag, itemIndex, - classReader.readUTF8(nameAndTypeItemOffset, charBuffer), + (@Identifier String) classReader.readUTF8(nameAndTypeItemOffset, charBuffer), classReader.readUTF8(nameAndTypeItemOffset + 2, charBuffer), classReader.readUnsignedShort(itemOffset)); break; @@ -328,7 +333,7 @@ int getMajorVersion() { * * @return the internal name of the class to which this symbol table belongs. */ - String getClassName() { + @InternalForm String getClassName() { return className; } @@ -340,7 +345,7 @@ String getClassName() { * @param className an internal class name. * @return the constant pool index of a new or already existing Symbol with the given class name. */ - int setMajorVersionAndClassName(final int majorVersion, final String className) { + int setMajorVersionAndClassName(final int majorVersion, final @InternalForm String className) { this.majorVersion = majorVersion; this.className = className; return addConstantClass(className).index; @@ -506,7 +511,7 @@ Symbol addConstant(final Object value) { } else if (typeSort == Type.METHOD) { return addConstantMethodType(type.getDescriptor()); } else { // type is a primitive or array type. - return addConstantClass(type.getDescriptor()); + return addConstantClass((@InternalForm String) type.getDescriptor()); } } else if (value instanceof Handle) { Handle handle = (Handle) value; @@ -535,7 +540,7 @@ Symbol addConstant(final Object value) { * @param value the internal name of a class. * @return a new or already existing Symbol with the given value. */ - Symbol addConstantClass(final String value) { + Symbol addConstantClass(final @InternalForm String value) { return addConstantUtf8Reference(Symbol.CONSTANT_CLASS_TAG, value); } @@ -548,7 +553,7 @@ Symbol addConstantClass(final String value) { * @param descriptor a field descriptor. * @return a new or already existing Symbol with the given value. */ - Symbol addConstantFieldref(final String owner, final String name, final String descriptor) { + Symbol addConstantFieldref(final @InternalForm String owner, final String name, final @FieldDescriptor String descriptor) { return addConstantMemberReference(Symbol.CONSTANT_FIELDREF_TAG, owner, name, descriptor); } @@ -563,7 +568,7 @@ Symbol addConstantFieldref(final String owner, final String name, final String d * @return a new or already existing Symbol with the given value. */ Symbol addConstantMethodref( - final String owner, final String name, final String descriptor, final boolean isInterface) { + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { int tag = isInterface ? Symbol.CONSTANT_INTERFACE_METHODREF_TAG : Symbol.CONSTANT_METHODREF_TAG; return addConstantMemberReference(tag, owner, name, descriptor); } @@ -581,7 +586,7 @@ Symbol addConstantMethodref( * @return a new or already existing Symbol with the given value. */ private Entry addConstantMemberReference( - final int tag, final String owner, final String name, final String descriptor) { + final int tag, final @InternalForm String owner, final String name, final String descriptor) { int hashCode = hash(tag, owner, name, descriptor); Entry entry = get(hashCode); while (entry != null) { @@ -613,7 +618,7 @@ private Entry addConstantMemberReference( private void addConstantMemberReference( final int index, final int tag, - final String owner, + final @InternalForm String owner, final String name, final String descriptor) { add(new Entry(index, tag, owner, name, descriptor, 0, hash(tag, owner, name, descriptor))); @@ -827,7 +832,7 @@ private void addConstantUtf8(final int index, final String value) { */ Symbol addConstantMethodHandle( final int referenceKind, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { @@ -849,7 +854,7 @@ Symbol addConstantMethodHandle( entry = entry.next; } if (referenceKind <= Opcodes.H_PUTSTATIC) { - constantPool.put112(tag, referenceKind, addConstantFieldref(owner, name, descriptor).index); + constantPool.put112(tag, referenceKind, addConstantFieldref(owner, name, (@FieldDescriptor String) descriptor).index); } else { constantPool.put112( tag, referenceKind, addConstantMethodref(owner, name, descriptor, isInterface).index); @@ -873,7 +878,7 @@ Symbol addConstantMethodHandle( private void addConstantMethodHandle( final int index, final int referenceKind, - final String owner, + final @InternalForm String owner, final String name, final String descriptor, final boolean isInterface) { @@ -924,7 +929,7 @@ Symbol addConstantMethodType(final String methodDescriptor) { */ Symbol addConstantDynamic( final String name, - final String descriptor, + final @FieldDescriptor String descriptor, final Handle bootstrapMethodHandle, final Object... bootstrapMethodArguments) { Symbol bootstrapMethod = addBootstrapMethod(bootstrapMethodHandle, bootstrapMethodArguments); @@ -966,7 +971,7 @@ Symbol addConstantInvokeDynamic( * @return a new or already existing Symbol with the given value. */ private Symbol addConstantDynamicOrInvokeDynamicReference( - final int tag, final String name, final String descriptor, final int bootstrapMethodIndex) { + final int tag, final String name, final /*@FieldOrMethodDescriptor*/ String descriptor, final int bootstrapMethodIndex) { int hashCode = hash(tag, name, descriptor, bootstrapMethodIndex); Entry entry = get(hashCode); while (entry != null) { @@ -1000,8 +1005,8 @@ private Symbol addConstantDynamicOrInvokeDynamicReference( private void addConstantDynamicOrInvokeDynamicReference( final int tag, final int index, - final String name, - final String descriptor, + final @Identifier String name, + final /*@FieldOrMethodDescriptor*/ String descriptor, final int bootstrapMethodIndex) { int hashCode = hash(tag, name, descriptor, bootstrapMethodIndex); add(new Entry(index, tag, null, name, descriptor, bootstrapMethodIndex, hashCode)); @@ -1014,7 +1019,7 @@ private void addConstantDynamicOrInvokeDynamicReference( * @param moduleName a fully qualified name (using dots) of a module. * @return a new or already existing Symbol with the given value. */ - Symbol addConstantModule(final String moduleName) { + Symbol addConstantModule(final @DotSeparatedIdentifiers String moduleName) { return addConstantUtf8Reference(Symbol.CONSTANT_MODULE_TAG, moduleName); } @@ -1025,7 +1030,7 @@ Symbol addConstantModule(final String moduleName) { * @param packageName the internal name of a package. * @return a new or already existing Symbol with the given value. */ - Symbol addConstantPackage(final String packageName) { + Symbol addConstantPackage(final @InternalForm String packageName) { return addConstantUtf8Reference(Symbol.CONSTANT_PACKAGE_TAG, packageName); } @@ -1194,7 +1199,7 @@ Label getForwardUninitializedLabel(final int typeIndex) { * @param value an internal class name. * @return the index of a new or already existing type Symbol with the given value. */ - int addType(final String value) { + int addType(final @InternalForm String value) { int hashCode = hash(Symbol.TYPE_TAG, value); Entry entry = get(hashCode); while (entry != null) { @@ -1215,7 +1220,7 @@ int addType(final String value) { * uninitialized type value. * @return the index of a new or already existing type #@link Symbol} with the given value. */ - int addUninitializedType(final String value, final int bytecodeOffset) { + int addUninitializedType(final @InternalForm String value, final int bytecodeOffset) { int hashCode = hash(Symbol.UNINITIALIZED_TYPE_TAG, value, bytecodeOffset); Entry entry = get(hashCode); while (entry != null) { @@ -1240,7 +1245,7 @@ int addUninitializedType(final String value, final int bytecodeOffset) { * the label is resolved, use the {@link #addUninitializedType} method instead. * @return the index of a new or already existing type {@link Symbol} with the given value. */ - int addForwardUninitializedType(final String value, final Label label) { + int addForwardUninitializedType(final @InternalForm String value, final Label label) { int labelIndex = getOrAddLabelEntry(label).index; int hashCode = hash(Symbol.FORWARD_UNINITIALIZED_TYPE_TAG, value, labelIndex); Entry entry = get(hashCode); @@ -1281,8 +1286,8 @@ int addMergedType(final int typeTableIndex1, final int typeTableIndex2) { } entry = entry.next; } - String type1 = typeTable[typeTableIndex1].value; - String type2 = typeTable[typeTableIndex2].value; + @InternalForm String type1 = typeTable[typeTableIndex1].value; + @InternalForm String type2 = typeTable[typeTableIndex2].value; int commonSuperTypeIndex = addType(classWriter.getCommonSuperClass(type1, type2)); put(new Entry(typeCount, Symbol.MERGED_TYPE_TAG, data, hashCode)).info = commonSuperTypeIndex; return commonSuperTypeIndex; @@ -1426,7 +1431,7 @@ private static final class Entry extends Symbol { Entry( final int index, final int tag, - final String owner, + final @InternalForm String owner, final String name, final String value, final long data, diff --git a/asm/src/main/java/org/objectweb/asm/Type.java b/asm/src/main/java/org/objectweb/asm/Type.java index c60a4233..1bf7f537 100644 --- a/asm/src/main/java/org/objectweb/asm/Type.java +++ b/asm/src/main/java/org/objectweb/asm/Type.java @@ -27,6 +27,9 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm; +import org.checkerframework.checker.signature.qual.BinaryName; +import org.checkerframework.checker.signature.qual.BinaryNameOrPrimitiveType; +import org.checkerframework.checker.signature.qual.InternalForm; import java.lang.reflect.Constructor; import java.lang.reflect.Method; @@ -248,7 +251,7 @@ public Type getElementType() { * @param internalName an internal name (see {@link Type#getInternalName()}). * @return the {@link Type} corresponding to the given internal name. */ - public static Type getObjectType(final String internalName) { + public static Type getObjectType(final @InternalForm String internalName) { return new Type( internalName.charAt(0) == '[' ? ARRAY : INTERNAL, internalName, 0, internalName.length()); } @@ -440,10 +443,10 @@ private static Type getTypeInternal( * * @return the binary name of the class corresponding to this type. */ - public String getClassName() { + public @BinaryNameOrPrimitiveType String getClassName() { switch (sort) { case VOID: - return "void"; + return (@BinaryNameOrPrimitiveType String) "void"; // to make type-checking pass case BOOLEAN: return "boolean"; case CHAR: @@ -465,10 +468,11 @@ public String getClassName() { for (int i = getDimensions(); i > 0; --i) { stringBuilder.append("[]"); } - return stringBuilder.toString(); + return (@BinaryNameOrPrimitiveType String) stringBuilder.toString(); case OBJECT: case INTERNAL: - return valueBuffer.substring(valueBegin, valueEnd).replace('/', '.'); + // If not an array or primitive, this conversion works. + return (@BinaryNameOrPrimitiveType String) valueBuffer.substring(valueBegin, valueEnd).replace('/', '.'); default: throw new AssertionError(); } @@ -481,7 +485,8 @@ public String getClassName() { * * @return the internal name of the class corresponding to this object type. */ - public String getInternalName() { + @SuppressWarnings("signature:return") // string manipulation + public @InternalForm String getInternalName() { return valueBuffer.substring(valueBegin, valueEnd); } @@ -492,7 +497,8 @@ public String getInternalName() { * @param clazz an object or array class. * @return the internal name of the given class. */ - public static String getInternalName(final Class clazz) { + @SuppressWarnings("signature:return") // If not an array or primitive, this conversion works. + public static @InternalForm String getInternalName(final Class clazz) { return clazz.getName().replace('.', '/'); } diff --git a/asm/src/main/java/org/objectweb/asm/signature/SignatureReader.java b/asm/src/main/java/org/objectweb/asm/signature/SignatureReader.java index 304c6f34..b0b06983 100644 --- a/asm/src/main/java/org/objectweb/asm/signature/SignatureReader.java +++ b/asm/src/main/java/org/objectweb/asm/signature/SignatureReader.java @@ -27,6 +27,8 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm.signature; +import org.checkerframework.checker.signature.qual.InternalForm; + /** * A parser for signature literals, as defined in the Java Virtual Machine Specification (JVMS), to * visit them with a SignatureVisitor. @@ -193,7 +195,7 @@ private static int parseType( // or an inner class name. This name may already have been visited it is was followed by // type arguments between '<' and '>'. If not, we need to visit it here. if (!visited) { - String name = signature.substring(start, offset - 1); + @InternalForm String name = signature.substring(start, offset - 1); if (inner) { signatureVisitor.visitInnerClassType(name); } else { @@ -213,7 +215,7 @@ private static int parseType( // If a '<' is encountered, this means we have fully parsed the main class name or an // inner class name, and that we now need to parse TypeArguments. First, we need to // visit the parsed class name. - String name = signature.substring(start, offset - 1); + @InternalForm String name = signature.substring(start, offset - 1); if (inner) { signatureVisitor.visitInnerClassType(name); } else { diff --git a/asm/src/main/java/org/objectweb/asm/signature/SignatureVisitor.java b/asm/src/main/java/org/objectweb/asm/signature/SignatureVisitor.java index b34df1d6..11fcaa6e 100644 --- a/asm/src/main/java/org/objectweb/asm/signature/SignatureVisitor.java +++ b/asm/src/main/java/org/objectweb/asm/signature/SignatureVisitor.java @@ -27,6 +27,7 @@ // THE POSSIBILITY OF SUCH DAMAGE. package org.objectweb.asm.signature; +import org.checkerframework.checker.signature.qual.InternalForm; import org.objectweb.asm.Opcodes; /** @@ -183,7 +184,7 @@ public SignatureVisitor visitArrayType() { * @param name the internal name of the class or interface (see {@link * org.objectweb.asm.Type#getInternalName()}). */ - public void visitClassType(final String name) {} + public void visitClassType(final @InternalForm String name) {} /** * Visits an inner class. diff --git a/asm/src/test/java/org/objectweb/asm/AnnotationVisitorTest.java b/asm/src/test/java/org/objectweb/asm/AnnotationVisitorTest.java index 6b06d081..3b64138f 100644 --- a/asm/src/test/java/org/objectweb/asm/AnnotationVisitorTest.java +++ b/asm/src/test/java/org/objectweb/asm/AnnotationVisitorTest.java @@ -148,7 +148,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor( api, super.visitMethod(access, name, descriptor, signature, exceptions)) { @@ -236,7 +236,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor( api, super.visitMethod(access, name, descriptor, signature, exceptions)) { diff --git a/asm/src/test/java/org/objectweb/asm/ClassReaderTest.java b/asm/src/test/java/org/objectweb/asm/ClassReaderTest.java index 10d39b4c..f1248fc1 100644 --- a/asm/src/test/java/org/objectweb/asm/ClassReaderTest.java +++ b/asm/src/test/java/org/objectweb/asm/ClassReaderTest.java @@ -160,10 +160,10 @@ void testByteArrayConstructor_withOffset( public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { classVersion.set(version); } }, @@ -377,10 +377,10 @@ void testAccept_emptyVisitor_skipFieldMethodAndModuleContent( public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { // access may contain ACC_RECORD } @@ -399,8 +399,8 @@ public RecordComponentVisitor visitRecordComponent( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return null; @@ -412,18 +412,18 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return null; } @Override - public void visitNestHost(final String nestHost) {} + public void visitNestHost(final @InternalForm String nestHost) {} @Override - public void visitNestMember(final String nestMember) {} + public void visitNestMember(final @InternalForm String nestMember) {} @Override - public void visitPermittedSubclass(final String permittedSubclass) {} + public void visitPermittedSubclass(final @InternalForm String permittedSubclass) {} }; Executable accept = () -> classReader.accept(classVisitor, 0); @@ -541,8 +541,8 @@ public AnnotationVisitor visitTypeAnnotation( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return new FieldVisitor(api) {}; @@ -554,7 +554,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor(api) {}; } }; @@ -583,7 +583,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor(api, null) { @Override public AnnotationVisitor visitParameterAnnotation( @@ -616,10 +616,10 @@ void testAccept_previewClass() { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { classVersion.set(version); } }; @@ -666,8 +666,8 @@ public AnnotationVisitor visitTypeAnnotation( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return new FieldVisitor(api) { @@ -694,7 +694,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor(api) { @Override diff --git a/asm/src/test/java/org/objectweb/asm/ClassVisitorTest.java b/asm/src/test/java/org/objectweb/asm/ClassVisitorTest.java index 5c04868f..87097e00 100644 --- a/asm/src/test/java/org/objectweb/asm/ClassVisitorTest.java +++ b/asm/src/test/java/org/objectweb/asm/ClassVisitorTest.java @@ -267,10 +267,10 @@ public ModuleVisitor visitModule( return new ModuleVisitor(api, super.visitModule(name, access, version)) { @Override - public void visitMainClass(final String mainClass) {} + public void visitMainClass(final @InternalForm String mainClass) {} @Override - public void visitPackage(final String packaze) {} + public void visitPackage(final @InternalForm String packaze) {} @Override public void visitRequire( @@ -280,13 +280,13 @@ public void visitRequire( @Override public void visitExport( - final String packaze, final int access, final String... modules) { + final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { super.visitExport(packaze, access, (String[]) null); } @Override public void visitOpen( - final String packaze, final int access, final String... modules) { + final @InternalForm String packaze, final int access, final @DotSeparatedIdentifiers String... modules) { super.visitOpen(packaze, access, (String[]) null); } }; @@ -345,8 +345,8 @@ public AnnotationVisitor visitTypeAnnotation( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return new FieldAdapter(api, super.visitField(access, name, descriptor, signature, value)); @@ -358,7 +358,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodAdapter( api, super.visitMethod(access, name, descriptor, signature, exceptions)); } @@ -472,7 +472,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { if (exceptions != null && exceptions.length > 0) { exceptions[0] = "java/lang/Throwable"; } @@ -493,10 +493,10 @@ private static class ChangeVersionAdapter extends ClassVisitor { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { super.visit(newVersion, access, name, signature, superName, interfaces); } } @@ -516,7 +516,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return super.visitMethod(access ^ accessFlags, name, descriptor, signature, exceptions); } } @@ -554,8 +554,8 @@ public AnnotationVisitor visitTypeAnnotation( @Override public FieldVisitor visitField( final int access, - final String name, - final String descriptor, + final @Identifier String name, + final @FieldDescriptor String descriptor, final String signature, final Object value) { return new FieldVisitor(api, super.visitField(access, name, descriptor, signature, value)) { @@ -588,7 +588,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor( api, super.visitMethod(access, name, descriptor, signature, exceptions)) { @@ -677,7 +677,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { List argumentTypes = new ArrayList<>(Arrays.asList(Type.getArgumentTypes(descriptor))); argumentTypes.add(Type.INT_TYPE); Type returnType = Type.getReturnType(descriptor); diff --git a/asm/src/test/java/org/objectweb/asm/ClassWriterComputeMaxsTest.java b/asm/src/test/java/org/objectweb/asm/ClassWriterComputeMaxsTest.java index 363ff000..1b65b1d8 100644 --- a/asm/src/test/java/org/objectweb/asm/ClassWriterComputeMaxsTest.java +++ b/asm/src/test/java/org/objectweb/asm/ClassWriterComputeMaxsTest.java @@ -966,7 +966,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { if (name.equals("m")) { return new MethodVisitor(Opcodes.ASM5) { @Override diff --git a/asm/src/test/java/org/objectweb/asm/ClassWriterFlagsTest.java b/asm/src/test/java/org/objectweb/asm/ClassWriterFlagsTest.java index f0726d6d..28d6e5ae 100644 --- a/asm/src/test/java/org/objectweb/asm/ClassWriterFlagsTest.java +++ b/asm/src/test/java/org/objectweb/asm/ClassWriterFlagsTest.java @@ -116,7 +116,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { if (name.equals(method)) { return new MethodVisitor(Opcodes.ASM5) { @Override diff --git a/asm/src/test/java/org/objectweb/asm/ClassWriterTest.java b/asm/src/test/java/org/objectweb/asm/ClassWriterTest.java index bb9e095f..04440d17 100644 --- a/asm/src/test/java/org/objectweb/asm/ClassWriterTest.java +++ b/asm/src/test/java/org/objectweb/asm/ClassWriterTest.java @@ -341,7 +341,7 @@ void testToByteArray_constantPoolSizeTooLarge(final int constantPoolCount) { @ValueSource(ints = {65535, 65536}) void testToByteArray_methodCodeSizeTooLarge(final int methodCodeSize) { ClassWriter classWriter = newEmptyClassWriter(); - String methodName = "m"; + @Identifier String methodName = "m"; String descriptor = "()V"; MethodVisitor methodVisitor = classWriter.visitMethod(Opcodes.ACC_STATIC, methodName, descriptor, null, null); @@ -853,10 +853,10 @@ private static class DeadCodeInserter extends ClassVisitor { public void visit( final int version, final int access, - final String name, + final @InternalForm String name, final String signature, - final String superName, - final String[] interfaces) { + final @InternalForm String superName, + final @InternalForm String @Nullable [] interfaces) { className = name; // Set V1_7 version to prevent fallback to old verifier. super.visit( @@ -874,7 +874,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { int seed = (className + "." + name + descriptor).hashCode(); return new MethodDeadCodeInserter( api, seed, super.visitMethod(access, name, descriptor, signature, exceptions)); @@ -910,14 +910,14 @@ public void visitVarInsn(final int opcode, final int varIndex) { } @Override - public void visitTypeInsn(final int opcode, final String type) { + public void visitTypeInsn(final int opcode, final @InternalForm String type) { super.visitTypeInsn(opcode, type); maybeInsertDeadCode(); } @Override public void visitFieldInsn( - final int opcode, final String owner, final String name, final String descriptor) { + final int opcode, final @InternalForm String owner, final @Identifier String name, final @FieldDescriptor String descriptor) { super.visitFieldInsn(opcode, owner, name, descriptor); maybeInsertDeadCode(); } @@ -925,8 +925,8 @@ public void visitFieldInsn( @Override public void visitMethodInsn( final int opcode, - final String owner, - final String name, + final @InternalForm String owner, + final @Identifier String name, final String descriptor, final boolean isInterface) { super.visitMethodInsn(opcode, owner, name, descriptor, isInterface); @@ -993,7 +993,7 @@ public void visitLookupSwitchInsn(final Label dflt, final int[] keys, final Labe } @Override - public void visitMultiANewArrayInsn(final String descriptor, final int numDimensions) { + public void visitMultiANewArrayInsn(final @FieldDescriptor String descriptor, final int numDimensions) { super.visitMultiANewArrayInsn(descriptor, numDimensions); maybeInsertDeadCode(); } @@ -1037,7 +1037,7 @@ public MethodVisitor visitMethod( final String name, final String descriptor, final String signature, - final String[] exceptions) { + final @InternalForm String @Nullable [] exceptions) { return new MethodVisitor( api, super.visitMethod(access, name, descriptor, signature, exceptions)) { private final HashSet