Author: mbenson
Date: Thu May 29 21:56:55 2014
New Revision: 1598423
URL: http://svn.apache.org/r1598423
Log:
upgrade to latest asm, xbean-finder
Modified:
commons/proper/weaver/trunk/modules/normalizer/weaver/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/InlineNestedPrivilegedCalls.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
commons/proper/weaver/trunk/pom.xml
commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java
Modified:
commons/proper/weaver/trunk/modules/normalizer/weaver/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/normalizer/weaver/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/normalizer/weaver/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
(original)
+++
commons/proper/weaver/trunk/modules/normalizer/weaver/src/main/java/org/apache/commons/weaver/normalizer/Normalizer.java
Thu May 29 21:56:55 2014
@@ -85,15 +85,53 @@ public class Normalizer {
}
}
+ /**
+ * Necessary to resolve supertypes against WeaveEnvironment ClassLoader
+ */
+ private final class CustomClassWriter extends ClassWriter {
+ CustomClassWriter(int flags) {
+ super(flags);
+ }
+
+ CustomClassWriter(ClassReader classReader, int flags) {
+ super(classReader, flags);
+ }
+
+ @Override
+ protected String getCommonSuperClass(String type1, String type2) {
+ Class<?> c;
+ Class<?> d;
+ try {
+ c = Class.forName(type1.replace('/', '.'), false,
env.classLoader);
+ d = Class.forName(type2.replace('/', '.'), false,
env.classLoader);
+ } catch (Exception e) {
+ throw new RuntimeException(e.toString());
+ }
+ if (c.isAssignableFrom(d)) {
+ return type1;
+ }
+ if (d.isAssignableFrom(c)) {
+ return type2;
+ }
+ if (c.isInterface() || d.isInterface()) {
+ return "java/lang/Object";
+ }
+ do {
+ c = c.getSuperclass();
+ } while (!c.isAssignableFrom(d));
+ return c.getName().replace('.', '/');
+ }
+ }
+
private class WriteClass extends ClassVisitor {
private String className;
WriteClass() {
- super(Opcodes.ASM4, new ClassWriter(ClassWriter.COMPUTE_FRAMES |
ClassWriter.COMPUTE_MAXS));
+ super(Opcodes.ASM5, new
CustomClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS));
}
WriteClass(final ClassReader reader) {
- super(Opcodes.ASM4, new ClassWriter(reader, 0));
+ super(Opcodes.ASM5, new CustomClassWriter(reader, 0));
}
@Override
@@ -255,10 +293,11 @@ public class Normalizer {
final String signature, final String[] exceptions) {
final MethodVisitor mv = // NOPMD
super.visitMethod(access, name, desc,
signature, exceptions);
- return new MethodVisitor(Opcodes.ASM4, mv) {
+ return new MethodVisitor(Opcodes.ASM5, mv) {
+
@Override
public void visitMethodInsn(final int opcode,
final String owner, final String name,
- final String desc) {
+ final String desc, boolean itf) {
String useDescriptor = desc;
if (INIT.equals(name)) {
final ClassWrapper wrapper =
entry.getValue().get(owner);
@@ -269,7 +308,7 @@ public class Normalizer {
useDescriptor = new Method(INIT,
Type.VOID_TYPE, args).getDescriptor();
}
}
- super.visitMethodInsn(opcode, owner, name,
useDescriptor);
+ super.visitMethodInsn(opcode, owner, name,
useDescriptor, itf);
}
};
}
@@ -361,7 +400,7 @@ public class Normalizer {
try {
bytecode = env.getClassfile(subtype).getInputStream();
- new ClassReader(bytecode).accept(new
ClassVisitor(Opcodes.ASM4) {
+ new ClassReader(bytecode).accept(new
ClassVisitor(Opcodes.ASM5) {
String superName;
@Override
@@ -392,10 +431,10 @@ public class Normalizer {
public MethodVisitor visitMethod(final int access, final
String name, final String desc,
final String signature, final String[] exceptions) {
if (INIT.equals(name)) {
- return new MethodVisitor(Opcodes.ASM4) {
+ return new MethodVisitor(Opcodes.ASM5) {
@Override
public void visitMethodInsn(final int opcode,
final String owner, final String name,
- final String desc) {
+ final String desc, final boolean itf) {
if (INIT.equals(name) &&
owner.equals(superName)) {
key.setRight(desc);
} else {
@@ -450,6 +489,7 @@ public class Normalizer {
*/
private String copy(final Pair<String, String> key, final ClassWrapper
classWrapper) throws IOException,
ClassNotFoundException {
+ env.debug("Copying %s to %s", key, targetPackage);
final MessageDigest md5;
try {
md5 = MessageDigest.getInstance("MD5");
@@ -476,7 +516,7 @@ public class Normalizer {
// we're doing most of this by hand; we only read the original
class to hijack signature, ctor exceptions,
// etc.:
- reader.accept(new ClassVisitor(Opcodes.ASM4) {
+ reader.accept(new ClassVisitor(Opcodes.ASM5) {
Type supertype;
@Override
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ActionGenerator.java
Thu May 29 21:56:55 2014
@@ -62,7 +62,7 @@ class ActionGenerator extends Privilizer
* @param owner of the action class
*/
ActionGenerator(final int access, final Method methd, final String[]
exceptions, final PrivilizingVisitor owner) {
- owner.privilizer().super(new ClassWriter(ClassWriter.COMPUTE_MAXS |
ClassWriter.COMPUTE_FRAMES));
+ owner.privilizer().super(ClassWriter.COMPUTE_MAXS |
ClassWriter.COMPUTE_FRAMES);
this.methd = methd;
this.exc = ArrayUtils.isNotEmpty(exceptions);
this.exceptions = exc ? new Type[] { Type.getType(Exception.class) } :
null;
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/BlueprintingVisitor.java
Thu May 29 21:56:55 2014
@@ -73,7 +73,7 @@ class BlueprintingVisitor extends Privil
BlueprintingVisitor(final Privilizer privilizer,
final ClassVisitor cv, //NOPMD
final Privilizing config) {
- privilizer.super(new ClassNode(Opcodes.ASM4));
+ privilizer.super(new ClassNode(Opcodes.ASM5));
this.next = cv;
// load up blueprint methods:
@@ -119,7 +119,7 @@ class BlueprintingVisitor extends Privil
}
private ClassNode read(final String className) {
- final ClassNode result = new ClassNode(Opcodes.ASM4);
+ final ClassNode result = new ClassNode(Opcodes.ASM5);
InputStream bytecode = null;
try {
bytecode =
privilizer().env.getClassfile(className).getInputStream();
@@ -171,7 +171,7 @@ class BlueprintingVisitor extends Privil
// non-public fields accessed
final Set<FieldAccess> fieldAccesses = new
LinkedHashSet<FieldAccess>();
- source.accept(new MethodVisitor(Opcodes.ASM4) {
+ source.accept(new MethodVisitor(Opcodes.ASM5) {
@Override
public void visitFieldInsn(final int opcode, final String owner,
final String name, final String desc) {
final FieldAccess fieldAccess =
fieldAccess(Type.getObjectType(owner), name);
@@ -262,21 +262,22 @@ class BlueprintingVisitor extends Privil
private abstract class MethodInvocationHandler extends MethodVisitor {
MethodInvocationHandler(final MethodVisitor mvr) {
- super(Opcodes.ASM4, mvr);
+ super(Opcodes.ASM5, mvr);
}
@Override
- public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc) {
+ public void visitMethodInsn(final int opcode, final String owner,
final String name, final String desc,
+ final boolean itf) {
if (opcode == Opcodes.INVOKESTATIC) {
final Method methd = new Method(name, desc);
final Pair<Type, Method> methodKey =
Pair.of(Type.getObjectType(owner), methd);
if (shouldImport(methodKey)) {
final String importedName = importMethod(methodKey);
- super.visitMethodInsn(opcode, className, importedName,
desc);
+ super.visitMethodInsn(opcode, className, importedName,
desc, itf);
return;
}
}
- super.visitMethodInsn(opcode, owner, name, desc);
+ super.visitMethodInsn(opcode, owner, name, desc, itf);
}
abstract boolean shouldImport(Pair<Type, Method> methodKey);
@@ -331,7 +332,7 @@ class BlueprintingVisitor extends Privil
AccessibleAdvisor(final MethodVisitor mvr, final int access, final
String name, final String desc,
final List<FieldAccess> fieldAccesses) {
- super(ASM4, mvr, access, name, desc);
+ super(ASM5, mvr, access, name, desc);
this.fieldAccesses = fieldAccesses;
}
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/InlineNestedPrivilegedCalls.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/InlineNestedPrivilegedCalls.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/InlineNestedPrivilegedCalls.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/InlineNestedPrivilegedCalls.java
Thu May 29 21:56:55 2014
@@ -50,7 +50,7 @@ class InlineNestedPrivilegedCalls extend
*/
InlineNestedPrivilegedCalls(final Privilizer privilizer, final Map<Method,
String> privilegedMethods,
final ClassVisitor next) {
- super(Opcodes.ASM4);
+ super(Opcodes.ASM5);
this.privilizer = privilizer;
this.privilegedMethods = privilegedMethods;
this.next = next;
@@ -60,7 +60,7 @@ class InlineNestedPrivilegedCalls extend
public void visitEnd() {
super.visitEnd();
- accept(new ClassVisitor(Opcodes.ASM4, next) {
+ accept(new ClassVisitor(Opcodes.ASM5, next) {
@Override
public MethodVisitor visitMethod(final int access, final String
name, final String desc,
final String signature, final String[] exceptions) {
@@ -69,10 +69,10 @@ class InlineNestedPrivilegedCalls extend
if (!privilegedMethods.containsValue(name)) {
return orig;
}
- return new MethodVisitor(Opcodes.ASM4, orig) {
+ return new MethodVisitor(Opcodes.ASM5, orig) {
@Override
public void visitMethodInsn(final int opcode, final String
owner, final String name,
- final String desc) {
+ final String desc, final boolean itf) {
String useName = name;
if
(owner.equals(InlineNestedPrivilegedCalls.this.name)) {
final Method methd = new Method(name, desc);
@@ -82,7 +82,7 @@ class InlineNestedPrivilegedCalls extend
useName);
}
}
- super.visitMethodInsn(opcode, owner, useName, desc);
+ super.visitMethodInsn(opcode, owner, useName, desc,
itf);
}
};
}
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
Thu May 29 21:56:55 2014
@@ -57,7 +57,7 @@ public class Privilizer {
}
protected PrivilizerClassVisitor(final ClassVisitor cv) { //NOPMD
- super(Opcodes.ASM4, cv);
+ super(Opcodes.ASM5, cv);
}
protected Privilizer privilizer() {
@@ -74,11 +74,54 @@ public class Privilizer {
}
/**
+ * Necessary to resolve supertypes against WeaveEnvironment ClassLoader
+ */
+ private final class CustomClassWriter extends ClassWriter {
+ CustomClassWriter(int flags) {
+ super(flags);
+ }
+
+ CustomClassWriter(ClassReader classReader, int flags) {
+ super(classReader, flags);
+ }
+
+ @Override
+ protected String getCommonSuperClass(String type1, String type2) {
+ Class<?> c;
+ Class<?> d;
+ try {
+ c = Class.forName(type1.replace('/', '.'), false,
env.classLoader);
+ d = Class.forName(type2.replace('/', '.'), false,
env.classLoader);
+ } catch (Exception e) {
+ throw new RuntimeException(e.toString());
+ }
+ if (c.isAssignableFrom(d)) {
+ return type1;
+ }
+ if (d.isAssignableFrom(c)) {
+ return type2;
+ }
+ if (c.isInterface() || d.isInterface()) {
+ return "java/lang/Object";
+ }
+ do {
+ c = c.getSuperclass();
+ } while (!c.isAssignableFrom(d));
+ return c.getName().replace('.', '/');
+ }
+ }
+
+ /**
* Convenient {@link ClassVisitor} layer to write classfiles into the
{@link WeaveEnvironment}.
*/
class WriteClass extends PrivilizerClassVisitor {
- WriteClass(final ClassWriter classWriter) {
- super(classWriter);
+
+ WriteClass(final ClassReader classReader, int flags) {
+ super(new CustomClassWriter(classReader, flags));
+ }
+
+ WriteClass(int flags) {
+ super(new CustomClassWriter(flags));
}
@Override
@@ -186,7 +229,7 @@ public class Privilizer {
final ClassReader classReader = new ClassReader(bytecode);
ClassVisitor cvr;
- cvr = new WriteClass(new ClassWriter(classReader,
ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS));
+ cvr = new WriteClass(classReader, ClassWriter.COMPUTE_FRAMES |
ClassWriter.COMPUTE_MAXS);
cvr = new PrivilizingVisitor(this, cvr);
cvr = new BlueprintingVisitor(this, cvr, privilizing);
@@ -206,7 +249,7 @@ public class Privilizer {
bytecode = env.getClassfile(type).getInputStream();
final ClassReader classReader = new ClassReader(bytecode);
ClassVisitor cv; //NOPMD
- cv = new WriteClass(new ClassWriter(classReader,
ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS));
+ cv = new WriteClass(classReader, ClassWriter.COMPUTE_FRAMES |
ClassWriter.COMPUTE_MAXS);
cv = new PrivilizingVisitor(this, cv);
classReader.accept(cv, ClassReader.EXPAND_FRAMES);
@@ -233,7 +276,7 @@ public class Privilizer {
}
Validate.validState(StringUtils.isBlank(error), error);
- final ClassVisitor checkInnerClasses = new ClassVisitor(Opcodes.ASM4,
null) {
+ final ClassVisitor checkInnerClasses = new ClassVisitor(Opcodes.ASM5,
null) {
final Set<String> innerNames = new HashSet<String>();
@Override
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizerCleaner.java
Thu May 29 21:56:55 2014
@@ -60,7 +60,7 @@ public class PrivilizerCleaner implement
try {
bytecode =
privilizer.env.getClassfile(className).getInputStream();
final ClassReader classReader = new ClassReader(bytecode);
- classReader.accept(new ClassVisitor(Opcodes.ASM4) {
+ classReader.accept(new ClassVisitor(Opcodes.ASM5) {
@Override
public void visit(final int version, final int access,
final String name, final String signature,
final String superName, final String[] interfaces) {
Modified:
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
(original)
+++
commons/proper/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/PrivilizingVisitor.java
Thu May 29 21:56:55 2014
@@ -91,7 +91,7 @@ class PrivilizingVisitor extends Privili
final MethodVisitor originalMethod = super.visitMethod(access, name,
desc, signature, exceptions);
final Method methd = new Method(name, desc);
- return new GeneratorAdapter(Opcodes.ASM4, originalMethod, access,
name, desc) {
+ return new GeneratorAdapter(Opcodes.ASM5, originalMethod, access,
name, desc) {
@Override
public AnnotationVisitor visitAnnotation(final String desc, final
boolean visible) {
Modified: commons/proper/weaver/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/pom.xml?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
--- commons/proper/weaver/trunk/pom.xml (original)
+++ commons/proper/weaver/trunk/pom.xml Thu May 29 21:56:55 2014
@@ -57,7 +57,7 @@ under the License.
<commons.jira.id>WEAVER</commons.jira.id>
<commons.jira.pid>12315320</commons.jira.pid>
<commons.site.path>commons-weaver</commons.site.path>
- <asm.version>4.2</asm.version>
+ <asm.version>5.0.3</asm.version>
<commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/proper/${commons.site.path}</commons.scmPubUrl>
<ant.version>1.9.3</ant.version>
@@ -200,12 +200,12 @@ under the License.
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-finder-shaded</artifactId>
- <version>3.14</version>
+ <version>3.18</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
- <version>3.2</version>
+ <version>3.2.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
Modified:
commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java
URL:
http://svn.apache.org/viewvc/commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java?rev=1598423&r1=1598422&r2=1598423&view=diff
==============================================================================
---
commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java
(original)
+++
commons/proper/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/Finder.java
Thu May 29 21:56:55 2014
@@ -25,7 +25,6 @@ import java.lang.reflect.AnnotatedElemen
import java.lang.reflect.Array;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
-import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
@@ -35,19 +34,20 @@ import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.apache.commons.weaver.model.ScanRequest;
import org.apache.commons.weaver.model.ScanResult;
import org.apache.commons.weaver.model.Scanner;
import org.apache.commons.weaver.model.WeaveInterest;
import org.apache.commons.weaver.utils.Annotations;
-import org.apache.xbean.asm4.AnnotationVisitor;
-import org.apache.xbean.asm4.ClassReader;
-import org.apache.xbean.asm4.ClassVisitor;
-import org.apache.xbean.asm4.FieldVisitor;
-import org.apache.xbean.asm4.MethodVisitor;
-import org.apache.xbean.asm4.Opcodes;
-import org.apache.xbean.asm4.Type;
+import org.apache.xbean.asm5.AnnotationVisitor;
+import org.apache.xbean.asm5.ClassReader;
+import org.apache.xbean.asm5.ClassVisitor;
+import org.apache.xbean.asm5.FieldVisitor;
+import org.apache.xbean.asm5.MethodVisitor;
+import org.apache.xbean.asm5.Opcodes;
+import org.apache.xbean.asm5.Type;
import org.apache.xbean.finder.Annotated;
import org.apache.xbean.finder.AnnotationFinder;
import org.apache.xbean.finder.Parameter;
@@ -103,7 +103,7 @@ class Finder extends AnnotationFinder im
private abstract class AnnotationCapturer extends AnnotationVisitor {
public AnnotationCapturer(final AnnotationVisitor wrapped) {
- super(Opcodes.ASM4, wrapped);
+ super(Opcodes.ASM5, wrapped);
}
/**
@@ -200,7 +200,7 @@ class Finder extends AnnotationFinder im
private final InfoBuildingVisitor wrapped;
public Visitor(final InfoBuildingVisitor wrapped) {
- super(Opcodes.ASM4, wrapped);
+ super(Opcodes.ASM5, wrapped);
this.wrapped = wrapped;
}
@@ -209,20 +209,25 @@ class Finder extends AnnotationFinder im
final Object value) {
final FieldVisitor toWrap = wrapped.visitField(access, name, desc,
signature, value);
final ClassInfo classInfo = (ClassInfo) wrapped.getInfo();
+ final Type fieldType = Type.getType(desc);
FieldInfo testFieldInfo = null;
// should be the most recently added field, so iterate backward:
for (int i = classInfo.getFields().size() - 1; i >= 0; i--) {
final FieldInfo atI = classInfo.getFields().get(i);
- if (atI.getName().equals(name) && atI.getType().equals(desc)) {
- testFieldInfo = atI;
- break;
+ if (atI.getName().equals(name)) {
+ final String type = atI.getType();
+ if (StringUtils.equals(type, fieldType.getClassName())
+ || StringUtils.equals(type,
fieldType.getDescriptor())) {
+ testFieldInfo = atI;
+ break;
+ }
}
}
if (testFieldInfo == null) {
return toWrap;
}
final FieldInfo fieldInfo = testFieldInfo;
- return new FieldVisitor(Opcodes.ASM4, toWrap) {
+ return new FieldVisitor(Opcodes.ASM5, toWrap) {
@Override
public AnnotationVisitor visitAnnotation(final String desc,
final boolean visible) {
final AnnotationVisitor toWrap =
super.visitAnnotation(desc, visible);
@@ -244,25 +249,19 @@ class Finder extends AnnotationFinder im
return toWrap;
}
MethodInfo testMethodInfo = null;
- final Member member;
- try {
- member = compareMethodInfo.get();
- // 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) &&
atI.get().equals(member)) {
- testMethodInfo = atI;
- break;
- }
+ // 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;
}
- } catch (final ClassNotFoundException e) {
- return toWrap;
}
if (testMethodInfo == null) {
return toWrap;
}
final MethodInfo methodInfo = testMethodInfo;
- return new MethodVisitor(Opcodes.ASM4, toWrap) {
+ return new MethodVisitor(Opcodes.ASM5, toWrap) {
@Override
public AnnotationVisitor visitAnnotation(final String desc,
final boolean visible) {
final AnnotationVisitor toWrap =
super.visitAnnotation(desc, visible);
@@ -281,13 +280,9 @@ class Finder extends AnnotationFinder im
// 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);
- try {
- if (atI.get().getIndex() == param) {
- parameterInfo = atI;
- break;
- }
- } catch (final ClassNotFoundException e) {
- continue;
+ if (atI.getName().equals(Integer.toString(param))) {
+ parameterInfo = atI;
+ break;
}
}
return parameterInfo == null ? toWrap : new
TopLevelAnnotationInflater(desc, toWrap, parameterInfo);