You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xbean-scm@geronimo.apache.org by dj...@apache.org on 2011/07/09 08:13:25 UTC

svn commit: r1144600 - in /geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder: AbstractFinder.java BundleAnnotationFinder.java

Author: djencks
Date: Sat Jul  9 06:13:25 2011
New Revision: 1144600

URL: http://svn.apache.org/viewvc?rev=1144600&view=rev
Log:
GERONIMO-6043 start providing a way to filter which bits of bundle classpath we look at annotated classes from

Modified:
    geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AbstractFinder.java
    geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAnnotationFinder.java

Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AbstractFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AbstractFinder.java?rev=1144600&r1=1144599&r2=1144600&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AbstractFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/AbstractFinder.java Sat Jul  9 06:13:25 2011
@@ -27,7 +27,6 @@ import java.lang.reflect.AnnotatedElemen
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
-import java.lang.reflect.Type;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -41,7 +40,6 @@ import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.FieldVisitor;
 import org.objectweb.asm.MethodVisitor;
 import org.objectweb.asm.commons.EmptyVisitor;
-import org.objectweb.asm.signature.SignatureReader;
 import org.objectweb.asm.signature.SignatureVisitor;
 
 /**
@@ -577,8 +575,12 @@ public abstract class AbstractFinder imp
     }
 
     protected void readClassDef(InputStream in) throws IOException {
+        readClassDef(in, null);
+    }
+
+    protected void readClassDef(InputStream in, String path) throws IOException {
         ClassReader classReader = new ClassReader(in);
-        classReader.accept(new InfoBuildingVisitor(), ASM_FLAGS);
+        classReader.accept(new InfoBuildingVisitor(path), ASM_FLAGS);
     }
 
     protected void readClassDef(Class clazz) {
@@ -721,6 +723,8 @@ public abstract class AbstractFinder imp
         private final List<ClassInfo> subclassInfos = new SingleLinkedList<ClassInfo>();
         private final List<String> interfaces = new SingleLinkedList<String>();
         private final List<FieldInfo> fields = new SingleLinkedList<FieldInfo>();
+        //e.g. bundle class path prefix.
+        private String path;
         private Class<?> clazz;
 
         public ClassInfo(Class clazz) {
@@ -782,6 +786,10 @@ public abstract class AbstractFinder imp
         public String toString() {
             return name;
         }
+
+        public String getPath() {
+            return path;
+        }
     }
 
     public class MethodInfo extends Annotatable implements Info {
@@ -904,8 +912,10 @@ public abstract class AbstractFinder imp
 
     public class InfoBuildingVisitor extends EmptyVisitor {
         private Info info;
+        private String path;
 
-        public InfoBuildingVisitor() {
+        public InfoBuildingVisitor(String path) {
+            this.path = path;
         }
 
         public InfoBuildingVisitor(Info info) {
@@ -918,7 +928,7 @@ public abstract class AbstractFinder imp
                 info = new PackageInfo(javaName(name));
             } else {
                 ClassInfo classInfo = new ClassInfo(javaName(name), javaName(superName));
-
+                classInfo.path = path;
 //                if (signature == null) {
                     for (String interfce : interfaces) {
                         classInfo.getInterfaces().add(javaName(interfce));

Modified: geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAnnotationFinder.java
URL: http://svn.apache.org/viewvc/geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAnnotationFinder.java?rev=1144600&r1=1144599&r2=1144600&view=diff
==============================================================================
--- geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAnnotationFinder.java (original)
+++ geronimo/xbean/trunk/xbean-finder/src/main/java/org/apache/xbean/finder/BundleAnnotationFinder.java Sat Jul  9 06:13:25 2011
@@ -22,6 +22,11 @@ package org.apache.xbean.finder;
 
 import java.io.InputStream;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import java.util.zip.ZipEntry;
 
 import org.apache.xbean.osgi.bundle.util.BundleResourceFinder;
@@ -34,15 +39,21 @@ import org.osgi.service.packageadmin.Pac
  */
 public class BundleAnnotationFinder extends AbstractFinder {
     private final Bundle bundle;
+    private final Set<String> paths;
 
     public BundleAnnotationFinder(PackageAdmin packageAdmin, Bundle bundle) throws Exception {
         this(packageAdmin, bundle, BundleResourceFinder.FULL_DISCOVERY_FILTER);
     }
 
     public BundleAnnotationFinder(PackageAdmin packageAdmin, Bundle bundle, ResourceDiscoveryFilter discoveryFilter) throws Exception {
+        this(packageAdmin, bundle, discoveryFilter, Collections.<String>emptySet());
+    }
+
+    public BundleAnnotationFinder(PackageAdmin packageAdmin, Bundle bundle, ResourceDiscoveryFilter discoveryFilter, Set<String> paths) throws Exception {
         this.bundle = bundle;
         BundleResourceFinder bundleResourceFinder = new BundleResourceFinder(packageAdmin, bundle, "", ".class", discoveryFilter);
         bundleResourceFinder.find(new AnnotationFindingCallback());
+        this.paths = paths;
     }
 
     @Override
@@ -55,12 +66,23 @@ public class BundleAnnotationFinder exte
         return bundle.loadClass(s);
     }
 
+    @Override
+    public List<String> getAnnotatedClassNames() {
+        List<String> classNames = new ArrayList<String>(originalInfos.size());
+        for (Map.Entry<String, ClassInfo> entry: originalInfos.entrySet()) {
+            if (paths.contains(entry.getValue().getPath())) {
+                classNames.add(entry.getKey());
+            }
+        }
+        return classNames;
+    }
+
     private class AnnotationFindingCallback implements BundleResourceFinder.ResourceFinderCallback {
       
         public boolean foundInDirectory(Bundle bundle, String baseDir, URL url) throws Exception {
             InputStream in = url.openStream();
             try {
-                readClassDef(in);
+                readClassDef(in, baseDir);
             } finally {
                 in.close();
             }
@@ -69,7 +91,7 @@ public class BundleAnnotationFinder exte
 
        
         public boolean foundInJar(Bundle bundle, String jarName, ZipEntry entry, InputStream in) throws Exception {
-            readClassDef(in);
+            readClassDef(in, jarName);
             return true;
         }
     }