@Override public org.objectweb.asm.AnnotationVisitor visitParameterAnnotation( final int parameter, final String desc, final boolean visible) { String annotationType = SignatureHelper.getType(desc); if (JAVA_LANG_SYNTHETIC.equals(annotationType)) { // Ignore synthetic parameters add the start of the signature, i.e. // determine the number of synthetic parameters syntheticParameters = Math.max(syntheticParameters, parameter + 1); return null; } ParameterDescriptor parameterDescriptor = visitorHelper.getParameterDescriptor(methodDescriptor, parameter - syntheticParameters); if (parameterDescriptor == null) { LOGGER.warn( "Cannot find parameter with index " + (parameter - syntheticParameters) + " in method signature " + containingType.getTypeDescriptor().getFullQualifiedName() + "#" + methodDescriptor.getSignature()); return null; } AnnotationValueDescriptor annotationDescriptor = visitorHelper.addAnnotation( containingType, parameterDescriptor, SignatureHelper.getType(desc)); return new AnnotationVisitor(containingType, annotationDescriptor, visitorHelper); }
@Override public void visitMethodInsn( final int opcode, final String owner, final String name, final String desc, boolean itf) { String methodSignature = SignatureHelper.getMethodSignature(name, desc); TypeCache.CachedType targetType = visitorHelper.resolveType(SignatureHelper.getObjectType(owner), containingType); MethodDescriptor invokedMethodDescriptor = visitorHelper.getMethodDescriptor(targetType, methodSignature); visitorHelper.addInvokes(methodDescriptor, line, invokedMethodDescriptor); }
@Override public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) { AnnotationValueDescriptor annotationDescriptor = visitorHelper.addAnnotation( containingType, methodDescriptor, SignatureHelper.getType(desc)); return new AnnotationVisitor(containingType, annotationDescriptor, visitorHelper); }
@Override public void visitClassType(String name) { resolvedTypeDescriptor = visitorHelper .resolveType(SignatureHelper.getObjectType(name), containingType) .getTypeDescriptor(); }
@Override public void visitTryCatchBlock( final Label start, final Label end, final Label handler, final String type) { if (type != null) { String fullQualifiedName = SignatureHelper.getObjectType(type); visitorHelper.resolveType(fullQualifiedName, containingType); } }
@Override public void visitFieldInsn( final int opcode, final String owner, final String name, final String desc) { String fieldSignature = SignatureHelper.getFieldSignature(name, desc); TypeCache.CachedType targetType = visitorHelper.resolveType(SignatureHelper.getObjectType(owner), containingType); FieldDescriptor fieldDescriptor = visitorHelper.getFieldDescriptor(targetType, fieldSignature); switch (opcode) { case Opcodes.GETFIELD: case Opcodes.GETSTATIC: visitorHelper.addReads(methodDescriptor, line, fieldDescriptor); break; case Opcodes.PUTFIELD: case Opcodes.PUTSTATIC: visitorHelper.addWrites(methodDescriptor, line, fieldDescriptor); break; } }
@Override public void visitTypeInsn(final int opcode, final String type) { visitorHelper.resolveType(SignatureHelper.getObjectType(type), containingType); }
@Override public void visitMultiANewArrayInsn(final String desc, final int dims) { visitorHelper.resolveType(SignatureHelper.getType(desc), containingType); }
@Override public void visitLdcInsn(final Object cst) { if (cst instanceof Type) { visitorHelper.resolveType(SignatureHelper.getType((Type) cst), containingType); } }