in processor/src/main/java/org/apache/commons/weaver/Finder.java [238:289]
public MethodVisitor visitMethod(final int access, final String name, final String desc,
final String signature, final String[] exceptions) {
final MethodVisitor toWrap = wrapped.visitMethod(access, name, desc, signature, exceptions);
final ClassInfo classInfo = (ClassInfo) wrapped.getInfo();
// MethodInfo may not always come from a descriptor, so we must go by the
// Member represented. Make sure the method either has a valid name or is a constructor:
final MethodInfo compareMethodInfo = new MethodInfo(classInfo, name, desc);
if (!compareMethodInfo.isConstructor() && !isJavaIdentifier(name)) {
return toWrap;
}
MethodInfo testMethodInfo = null;
// should be the most recently added method, so iterate backward:
for (int i = classInfo.getMethods().size() - 1; i >= 0; i--) {
final MethodInfo atI = classInfo.getMethods().get(i);
if (atI.getName().equals(name) && StringUtils.equals(atI.getDescriptor(), desc)) {
testMethodInfo = atI;
break;
}
}
if (testMethodInfo == null) {
return toWrap;
}
final MethodInfo methodInfo = testMethodInfo;
return new MethodVisitor(ASM_VERSION, toWrap) {
@Override
public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) {
final AnnotationVisitor toWrap = super.visitAnnotation(desc, visible);
return visible ? toWrap : new TopLevelAnnotationInflater(desc, toWrap, methodInfo);
}
@Override
public AnnotationVisitor visitParameterAnnotation(final int param, final String desc,
final boolean visible) {
final AnnotationVisitor toWrap = super.visitParameterAnnotation(param, desc, visible);
if (visible) {
return toWrap;
}
ParameterInfo parameterInfo = null;
// should be the most recently added parameter, so iterate backward:
for (int i = methodInfo.getParameters().size() - 1; i >= 0; i--) {
final ParameterInfo atI = methodInfo.getParameters().get(i);
if (atI.getName().equals(Integer.toString(param))) {
parameterInfo = atI;
break;
}
}
return parameterInfo == null ? toWrap : new TopLevelAnnotationInflater(desc, toWrap, parameterInfo);
}
};
}