[jboss-cvs] JBossAS SVN: r105920 - in projects/jboss-reflect/trunk/src/main/java/org/jboss: reflect/plugins/bytecode and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Jun 10 04:58:09 EDT 2010
Author: kabir.khan at jboss.com
Date: 2010-06-10 04:58:08 -0400 (Thu, 10 Jun 2010)
New Revision: 105920
Modified:
projects/jboss-reflect/trunk/src/main/java/org/jboss/config/plugins/property/PropertyConfiguration.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/CachingLoadClassClassLoaderFinder.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmBehaviourBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmClassBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmConstructorBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMemberBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMethodBytes.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassReader.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassVisitor.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassWriter.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/commons/EmptyVisitor.java
Log:
[JBKERNEL-125] Cache method and field bytecode indexes to avoid having to iterate over the whole class when obtaining their annotations
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/config/plugins/property/PropertyConfiguration.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/config/plugins/property/PropertyConfiguration.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/config/plugins/property/PropertyConfiguration.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -29,6 +29,7 @@
import org.jboss.config.plugins.AbstractConfiguration;
import org.jboss.joinpoint.spi.JoinpointFactoryBuilder;
import org.jboss.logging.Logger;
+import org.jboss.reflect.plugins.bytecode.BytecodeTypeInfoFactory;
import org.jboss.reflect.plugins.javassist.JavassistTypeInfoFactory;
import org.jboss.reflect.spi.TypeInfoFactory;
@@ -93,7 +94,8 @@
@Override
protected TypeInfoFactory createDefaultTypeInfoFactory() throws Throwable
{
- TypeInfoFactory factory = (TypeInfoFactory) loadFromProperties(PropertyConfigurationConstants.TYPE_INFO_FACTORY_NAME, JavassistTypeInfoFactory.class.getName(), TypeInfoFactory.class);
+ TypeInfoFactory factory = (TypeInfoFactory) loadFromProperties(PropertyConfigurationConstants.TYPE_INFO_FACTORY_NAME, BytecodeTypeInfoFactory.class.getName(), TypeInfoFactory.class);
+ System.out.println("---> TypeInfoFactory: " + factory);
if (log.isDebugEnabled())
log.debug("TypeInfoFactory: " + factory);
return factory;
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/CachingLoadClassClassLoaderFinder.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/CachingLoadClassClassLoaderFinder.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/CachingLoadClassClassLoaderFinder.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -23,7 +23,6 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicInteger;
/**
*
@@ -36,10 +35,6 @@
private final ConcurrentMap<ClassLoader, ConcurrentMap<String, ClassLoader>> loaders = new ConcurrentHashMap<ClassLoader, ConcurrentMap<String,ClassLoader>>(8, .75f, 2);
- //private static final AtomicInteger HITS = new AtomicInteger();
-
- //private static final AtomicInteger MISSES = new AtomicInteger();
-
private CachingLoadClassClassLoaderFinder()
{
}
@@ -57,7 +52,6 @@
ClassLoader loader = loadersByClass.get(name);
if (loader == null)
{
- //MISSES.incrementAndGet();
try
{
Class<?> clazz = SecurityActions.loadClass(initiating, name);;
@@ -75,13 +69,7 @@
}
}
- else
- {
- //HITS.incrementAndGet();
- int i = 0;
- }
-
- //System.out.println("====> " + name + " misses " + MISSES.get() + " hits " + HITS.get());
+
return loader;
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmBehaviourBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmBehaviourBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmBehaviourBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -27,6 +27,7 @@
import org.jboss.reflect.plugins.bytecode.bytes.BehaviourBytes;
import org.jboss.reflect.util.objectweb.asm.AnnotationVisitor;
+import org.jboss.reflect.util.objectweb.asm.Attribute;
import org.jboss.reflect.util.objectweb.asm.ClassReader;
import org.jboss.reflect.util.objectweb.asm.MethodVisitor;
@@ -41,9 +42,9 @@
private final String[] exceptions;
- public AsmBehaviourBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions)
+ public AsmBehaviourBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
- super(clazz, modifiers, name, desc, signature);
+ super(clazz, modifiers, name, desc, signature, byteCodeIndex);
this.exceptions = exceptions != null ? exceptions : NO_EXCEPTIONS;
}
@@ -71,14 +72,14 @@
public Annotation[][] getParameterAnnotations()
{
LoadParameterAnnotationsVisitor visitor = new LoadParameterAnnotationsVisitor();
- getClazz().getReader().accept(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_MEHOD_PARAMETER_ANNOTATIONS);
+ getClazz().getReader().readMethod(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_METHOD_PARAMETER_ANNOTATIONS, null, null, getByteCodeIndex());
return visitor.getAnnotations();
}
public Annotation[] getAnnotations()
{
LoadBehaviourAnnotationsVisitor visitor = new LoadBehaviourAnnotationsVisitor();
- getClazz().getReader().accept(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_METHOD_ANNOTATIONS);
+ getClazz().getReader().readMethod(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_METHOD_ANNOTATIONS, null, null, getByteCodeIndex());
return visitor.getAnnotations();
}
@@ -87,9 +88,9 @@
List<Annotation> annotations;
@Override
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
- if (AsmBehaviourBytes.this.getName().equals(name) && desc.equals(AsmBehaviourBytes.this.getJvmSignature()))
+ if (AsmBehaviourBytes.this.getByteCodeIndex() == byteCodeIndex)
return new AnnotationReader();
return null;
}
@@ -123,9 +124,9 @@
List<Annotation>[] annotations;
@Override
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
- if (AsmBehaviourBytes.this.getName().equals(name) && desc.equals(AsmBehaviourBytes.this.getJvmSignature()))
+ if (AsmBehaviourBytes.this.getByteCodeIndex() == byteCodeIndex)
return new AnnotationReader();
return null;
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmClassBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmClassBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmClassBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -274,7 +274,7 @@
List<MethodBytes> methodBytes;
@Override
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
if (name.startsWith("<c")) //<clinit>
return null;
@@ -282,13 +282,13 @@
{
if (constructorBytes == null)
constructorBytes = new ArrayList<ConstructorBytes>();
- constructorBytes.add(new AsmConstructorBytes(AsmClassBytes.this, access, name, desc, signature, exceptions));
+ constructorBytes.add(new AsmConstructorBytes(AsmClassBytes.this, access, name, desc, signature, exceptions, byteCodeIndex));
}
else
{
if (methodBytes == null)
methodBytes = new ArrayList<MethodBytes>();
- methodBytes.add(new AsmMethodBytes(AsmClassBytes.this, access, name, desc, signature, exceptions));
+ methodBytes.add(new AsmMethodBytes(AsmClassBytes.this, access, name, desc, signature, exceptions, byteCodeIndex));
}
return null;
}
@@ -314,11 +314,11 @@
List<FieldBytes> fieldBytes;
@Override
- public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value, int index)
{
if (fieldBytes == null)
fieldBytes = new ArrayList<FieldBytes>();
- fieldBytes.add(new AsmFieldBytes(AsmClassBytes.this, access, name, desc, signature));
+ fieldBytes.add(new AsmFieldBytes(AsmClassBytes.this, access, name, desc, signature, index));
return null;
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmConstructorBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmConstructorBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmConstructorBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -33,9 +33,9 @@
{
private volatile SignatureKey key;
- public AsmConstructorBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions)
+ public AsmConstructorBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
- super(clazz, modifiers, name, desc, signature, exceptions);
+ super(clazz, modifiers, name, desc, signature, exceptions, byteCodeIndex);
}
public SignatureKey getSignatureKey()
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -27,6 +27,7 @@
import org.jboss.reflect.plugins.bytecode.bytes.FieldBytes;
import org.jboss.reflect.util.objectweb.asm.AnnotationVisitor;
+import org.jboss.reflect.util.objectweb.asm.Attribute;
import org.jboss.reflect.util.objectweb.asm.ClassReader;
import org.jboss.reflect.util.objectweb.asm.FieldVisitor;
import org.jboss.reflect.util.objectweb.asm.Opcodes;
@@ -38,16 +39,15 @@
*/
class AsmFieldBytes extends AsmMemberBytes implements FieldBytes
{
- public AsmFieldBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature)
+ public AsmFieldBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, int byteCodeIndex)
{
- // FIXME FieldBytesImpl constructor
- super(clazz, modifiers, name, desc, signature);
+ super(clazz, modifiers, name, desc, signature, byteCodeIndex);
}
public Annotation[] getAnnotations()
{
LoadFieldAnnotationsVisitor visitor = new LoadFieldAnnotationsVisitor();
- getClazz().getReader().accept(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_FIELD_ANNOTATIONS);
+ getClazz().getReader().readField(visitor, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_FIELD_ANNOTATIONS, new Attribute[0], null, getByteCodeIndex());
return visitor.getAnnotations();
}
@@ -61,9 +61,9 @@
List<Annotation> annotations;
@Override
- public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value, int index)
{
- if (AsmFieldBytes.this.getName().equals(name))
+ if (AsmFieldBytes.this.getByteCodeIndex() == index)
return new FieldAnnotationVisitor();
return null;
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMemberBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMemberBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMemberBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -39,14 +39,17 @@
private final String desc;
private final String signature;
+
+ private final int byteCodeIndex;
- public AsmMemberBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature)
+ public AsmMemberBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, int byteCodeIndex)
{
this.clazz = clazz;
this.modifiers = modifiers;
this.name = name;
this.desc = desc;
this.signature = signature;
+ this.byteCodeIndex = byteCodeIndex;
}
public String getJvmSignature()
@@ -68,8 +71,12 @@
{
return signature;
}
-
+ public int getByteCodeIndex()
+ {
+ return byteCodeIndex;
+ }
+
AsmClassBytes getClazz()
{
return clazz;
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMethodBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMethodBytes.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmMethodBytes.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -33,9 +33,9 @@
{
SignatureKey key;
- public AsmMethodBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions)
+ public AsmMethodBytes(AsmClassBytes clazz, int modifiers, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
- super(clazz, modifiers, name, desc, signature, exceptions);
+ super(clazz, modifiers, name, desc, signature, exceptions, byteCodeIndex);
}
public SignatureKey getSignatureKey()
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -141,7 +141,7 @@
if (returnTypesByName == null)
{
AllAnnotationAttributesReader allAnnotationAttributesReader = new AllAnnotationAttributesReader();
- ((AsmClassBytes)classBytes).getReader().accept(allAnnotationAttributesReader, AsmClassBytes.STANDARD_FLAGS);
+ ((AsmClassBytes)classBytes).getReader().accept(allAnnotationAttributesReader, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_METHOD_OVERVIEW);
returnTypesByName = Collections.unmodifiableMap(allAnnotationAttributesReader.returnTypesByName);
RETURN_TYPES_BY_NAME.put(clazz, returnTypesByName);
}
@@ -195,7 +195,7 @@
if (classBytes instanceof AsmClassBytes)
{
DefaultAnnotationAttributeReader defaultsReader = new DefaultAnnotationAttributeReader(loader, returnTypesByName);
- ((AsmClassBytes)classBytes).getReader().accept(defaultsReader, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_DEFAULT_ANNOTATION_VALUES);
+ ((AsmClassBytes)classBytes).getReader().accept(defaultsReader, AsmClassBytes.STANDARD_FLAGS | ClassReader.INCLUDE_METHOD_OVERVIEW | ClassReader.INCLUDE_DEFAULT_ANNOTATION_VALUES);
defaults = defaultsReader.defaultAttributesByName;
}
else
@@ -229,7 +229,7 @@
Map<String, String> returnTypesByName = new HashMap<String, String>();
@Override
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
if (name.charAt(0) != '<' && desc.charAt(1) == ')')
{
@@ -253,7 +253,7 @@
}
@Override
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
return new AnnotationDefaultReader(name);
}
@@ -404,7 +404,7 @@
{
}
- public FieldVisitor visitField(int access, String name, String desc, String signature, Object value)
+ public FieldVisitor visitField(int access, String name, String desc, String signature, Object value, int index)
{
return null;
}
@@ -413,7 +413,7 @@
{
}
- public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions)
+ public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions, int byteCodeIndex)
{
return null;
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassReader.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassReader.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassReader.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -126,7 +126,7 @@
public static final int INCLUDE_METHOD_ANNOTATIONS = 16384;
- public static final int INCLUDE_MEHOD_PARAMETER_ANNOTATIONS = 32768;
+ public static final int INCLUDE_METHOD_PARAMETER_ANNOTATIONS = 32768;
public static final int INCLUDE_METHOD_UNKNOWN_ATTRIBUTES = 65536;
@@ -711,15 +711,18 @@
classVisitor.visitEnd();
}
- private int readMethod(final ClassVisitor classVisitor, int flags, final Attribute[] attrs, char[] c, int u)
+ public int readMethod(final ClassVisitor classVisitor, int flags, final Attribute[] attrs, char[] c, int u)
{
+ int byteCodeIndex = u;
+ if (c == null)
+ c = new char[maxStringLength];
byte[] b = this.b; // the bytecode array
boolean skipCode = (flags & SKIP_CODE) != 0;
boolean unzip = (flags & EXPAND_FRAMES) != 0;
boolean skipDebug = (flags & EXPAND_FRAMES) != 0;
boolean includeMethodOverview = (flags & INCLUDE_METHOD_OVERVIEW) != 0;
boolean includeMethodAnnotations = (flags & INCLUDE_METHOD_ANNOTATIONS) != 0;
- boolean includeMethodParameterAnnotations = (flags & INCLUDE_MEHOD_PARAMETER_ANNOTATIONS) != 0;
+ boolean includeMethodParameterAnnotations = (flags & INCLUDE_METHOD_PARAMETER_ANNOTATIONS) != 0;
boolean includeAnnotationDefaultValues = (flags & INCLUDE_DEFAULT_ANNOTATION_VALUES) != 0;
boolean includeMethodUnknownAttributes = (flags & INCLUDE_METHOD_UNKNOWN_ATTRIBUTES) != 0;
@@ -730,12 +733,13 @@
if (includeMethodOverview)
{
access = readUnsignedShort(u);
+ name = readUTF8(u + 2, c);
+ desc = readUTF8(u + 4, c);
+ }
+ else if (includeMethodParameterAnnotations)
+ {
+ desc = readUTF8(u + 4, c);
}
- //TODO use index instead and update visitMethod to use that
- name = readUTF8(u + 2, c);
- desc = readUTF8(u + 4, c);
-
-
String signature = null;
int anns = 0;
int ianns = 0;
@@ -771,7 +775,7 @@
}
else if (SIGNATURES && "Signature".equals(attrName))
{
- //if (includeMethodOverview) TODO add this once visitMethod() uses index
+ if (includeMethodOverview)
signature = readUTF8(u, c);
}
else if ("Deprecated".equals(attrName))
@@ -839,7 +843,7 @@
}
// visits the method's code, if any
- MethodVisitor mv = classVisitor.visitMethod(access, name, desc, signature, exceptions);
+ MethodVisitor mv = classVisitor.visitMethod(access, name, desc, signature, exceptions, byteCodeIndex);
if (mv != null)
{
@@ -1580,8 +1584,11 @@
return u;
}
- private int readField(final ClassVisitor classVisitor, final int flags, final Attribute[] attrs, char[] c, int u)
+ public int readField(final ClassVisitor classVisitor, final int flags, final Attribute[] attrs, char[] c, int u)
{
+ int byteCodeIndex = u;
+ if (c == null)
+ c = new char[maxStringLength];
boolean includeFieldOverview = (flags & INCLUDE_FIELD_OVERVIEW) != 0;
boolean includeFieldAnnotations = (flags & INCLUDE_FIELD_ANNOTATIONS) != 0;
boolean includeFieldUnknownAttributes = (flags & INCLUDE_FIELD_UNKNOWN_ATTRIBUTES) != 0;
@@ -1601,9 +1608,8 @@
{
access = readUnsignedShort(u);
desc = readUTF8(u + 4, c);
+ name = readUTF8(u + 2, c);
}
- //TODO use index instead and update visitField to use that
- name = readUTF8(u + 2, c);
// visits the field's attributes and looks for a ConstantValue
// attribute
@@ -1667,7 +1673,7 @@
// visits the field
FieldVisitor fv = classVisitor.visitField(access, name, desc, signature, fieldValueItem == 0
? null
- : readConst(fieldValueItem, c));
+ : readConst(fieldValueItem, c), byteCodeIndex);
// visits the field annotations and attributes
if (fv != null)
{
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassVisitor.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassVisitor.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassVisitor.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -136,11 +136,11 @@
* @param access the field's access flags (see {@link Opcodes}). This
* parameter also indicates if the field is synthetic and/or
* deprecated.
- * @param name the field's name.
- * @param desc the field's descriptor (see {@link Type Type}).
- * @param signature the field's signature. May be <tt>null</tt> if the
+ * @param name the field's name.
+ * @param desc the field's descriptor (see {@link Type Type}).
+ * @param signature the field's signature. May be <tt>null</tt> if the
* field's type does not use generic types.
- * @param value the field's initial value. This parameter, which may be
+ * @param value the field's initial value. This parameter, which may be
* <tt>null</tt> if the field does not have an initial value, must
* be an {@link Integer}, a {@link Float}, a {@link Long}, a
* {@link Double} or a {@link String} (for <tt>int</tt>,
@@ -149,6 +149,7 @@
* Its value is ignored for non static fields, which must be
* initialized through bytecode instructions in constructors or
* methods.
+ * @param byteCodeIndex The index into the ClassReader's byte array of the field
* @return a visitor to visit field annotations and attributes, or
* <tt>null</tt> if this class visitor is not interested in
* visiting these annotations and attributes.
@@ -158,7 +159,8 @@
String name,
String desc,
String signature,
- Object value);
+ Object value,
+ int byteCodeIndex);
/**
* Visits a method of the class. This method <i>must</i> return a new
@@ -168,14 +170,15 @@
* @param access the method's access flags (see {@link Opcodes}). This
* parameter also indicates if the method is synthetic and/or
* deprecated.
- * @param name the method's name.
- * @param desc the method's descriptor (see {@link Type Type}).
- * @param signature the method's signature. May be <tt>null</tt> if the
+ * @param name the method's name.
+ * @param desc the method's descriptor (see {@link Type Type}).
+ * @param signature the method's signature. May be <tt>null</tt> if the
* method parameters, return type and exceptions do not use generic
* types.
- * @param exceptions the internal names of the method's exception classes
+ * @param exceptions the internal names of the method's exception classes
* (see {@link Type#getInternalName() getInternalName}). May be
* <tt>null</tt>.
+ * @param byteCodeIndex The index into the ClassReader's byte array of the field
* @return an object to visit the byte code of the method, or <tt>null</tt>
* if this class visitor is not interested in visiting the code of
* this method.
@@ -185,7 +188,7 @@
String name,
String desc,
String signature,
- String[] exceptions);
+ String[] exceptions, int byteCodeIndex);
/**
* Visits the end of the class. This method, which is the last one to be
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassWriter.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassWriter.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/ClassWriter.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -670,7 +670,7 @@
final String name,
final String desc,
final String signature,
- final Object value)
+ final Object value, int index)
{
return new FieldWriter(this, access, name, desc, signature, value);
}
@@ -680,7 +680,7 @@
final String name,
final String desc,
final String signature,
- final String[] exceptions)
+ final String[] exceptions, int byteCodeIndex)
{
return new MethodWriter(this,
access,
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/commons/EmptyVisitor.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/commons/EmptyVisitor.java 2010-06-10 08:57:17 UTC (rev 105919)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/util/objectweb/asm/commons/EmptyVisitor.java 2010-06-10 08:58:08 UTC (rev 105920)
@@ -91,7 +91,7 @@
final String name,
final String desc,
final String signature,
- final Object value)
+ final Object value, int index)
{
return this;
}
@@ -101,7 +101,7 @@
final String name,
final String desc,
final String signature,
- final String[] exceptions)
+ final String[] exceptions, int byteCodeIndex)
{
return this;
}
More information about the jboss-cvs-commits
mailing list