[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