Author: dblevins Date: Wed Jun 6 03:09:45 2012 New Revision: 1346722 URL: http://svn.apache.org/viewvc?rev=1346722&view=rev Log: slight introduction of a listener api (incomplete)
Added: commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/InfoHandler.java Modified: commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/AnnotationFinder.java commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/ClassInfo.java Modified: commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/AnnotationFinder.java URL: http://svn.apache.org/viewvc/commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/AnnotationFinder.java?rev=1346722&r1=1346721&r2=1346722&view=diff ============================================================================== --- commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/AnnotationFinder.java (original) +++ commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/AnnotationFinder.java Wed Jun 6 03:09:45 2012 @@ -29,6 +29,7 @@ import org.apache.commons.classscan.find import org.apache.commons.classscan.finder.model.ClassInfo; import org.apache.commons.classscan.finder.model.FieldInfo; import org.apache.commons.classscan.finder.model.Info; +import org.apache.commons.classscan.finder.model.InfoHandler; import org.apache.commons.classscan.finder.model.MethodInfo; import org.apache.commons.classscan.finder.model.PackageInfo; import org.apache.commons.classscan.finder.util.SingleLinkedList; @@ -69,7 +70,7 @@ import java.util.Set; * * @version $Rev$ $Date$ */ -public class AnnotationFinder implements IAnnotationFinder { +public class AnnotationFinder implements IAnnotationFinder, InfoHandler { private final Set<Class<? extends Annotation>> metaroots = new HashSet<Class<? extends Annotation>>(); @@ -1036,6 +1037,28 @@ public class AnnotationFinder implements initAnnotationInfos(annotationInfo.getName()).add(info); } + @Override + public void visit(ClassInfo info) { + classInfos.put(info.getName(), info); + } + + @Override + public void visit(MethodInfo info) { + } + + @Override + public void visit(FieldInfo info) { + } + + @Override + public void visit(PackageInfo info) { + } + + @Override + public void visit(AnnotationInfo annotationInfo, Info info) { + index(annotationInfo, info); + } + protected void readClassDef(String className) { if (classInfos.containsKey(className)) return; try { @@ -1090,6 +1113,16 @@ public class AnnotationFinder implements // With a cleaned up model, this could easily be abstracted // //---------------------------------------------------------------------------- + public static class AsmParser { + + private final InfoHandler handler; + + public AsmParser(InfoHandler handler) { + this.handler = handler; + } + + } + protected void readClassDef(InputStream in) throws IOException { try { final ClassReader classReader = new ClassReader(in); @@ -1100,7 +1133,10 @@ public class AnnotationFinder implements } } - public class InfoBuildingVisitor extends EmptyVisitor { + private final InfoHandler handler = this; + + public class InfoBuildingVisitor extends EmptyVisitor { + private Info info; public InfoBuildingVisitor() { @@ -1110,10 +1146,12 @@ public class AnnotationFinder implements this.info = info; } + @Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { if (name.endsWith("package-info")) { info = new PackageInfo(archive, javaName(name)); + handler.visit((PackageInfo) info); } else { ClassInfo classInfo = new ClassInfo(archive, javaName(name), javaName(superName)); @@ -1124,7 +1162,7 @@ public class AnnotationFinder implements info = classInfo; - classInfos.put(classInfo.getName(), classInfo); + handler.visit((ClassInfo) info); } } @@ -1147,7 +1185,9 @@ public class AnnotationFinder implements final String name = Type.getType(desc).getClassName(); AnnotationInfo annotationInfo = new AnnotationInfo(name); info.getAnnotations().add(annotationInfo); - index(annotationInfo, info); + + handler.visit(annotationInfo, info); + return new InfoBuildingVisitor(annotationInfo); } @@ -1156,6 +1196,9 @@ public class AnnotationFinder implements ClassInfo classInfo = ((ClassInfo) info); FieldInfo fieldInfo = new FieldInfo(classInfo, name, desc); classInfo.getFields().add(fieldInfo); + + handler.visit(fieldInfo); + return new InfoBuildingVisitor(fieldInfo); } @@ -1169,8 +1212,10 @@ public class AnnotationFinder implements } MethodInfo methodInfo = new MethodInfo(classInfo, name, params); - classInfo.getMethods().add(methodInfo); + + handler.visit(methodInfo); + return new InfoBuildingVisitor(methodInfo); } Modified: commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/ClassInfo.java URL: http://svn.apache.org/viewvc/commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/ClassInfo.java?rev=1346722&r1=1346721&r2=1346722&view=diff ============================================================================== --- commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/ClassInfo.java (original) +++ commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/ClassInfo.java Wed Jun 6 03:09:45 2012 @@ -119,6 +119,12 @@ public class ClassInfo extends Annotatab return subclassInfos; } + /** + * Differes from the 'get()' call in + * that it does not trigger lazy loading + * + * @return + */ public Class<?> getClazz() { return clazz; } Added: commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/InfoHandler.java URL: http://svn.apache.org/viewvc/commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/InfoHandler.java?rev=1346722&view=auto ============================================================================== --- commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/InfoHandler.java (added) +++ commons/sandbox/classscan/branches/commons-finder/src/main/java/org/apache/commons/classscan/finder/model/InfoHandler.java Wed Jun 6 03:09:45 2012 @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.commons.classscan.finder.model; + +/** + * @version $Rev$ $Date$ + */ +public interface InfoHandler { + + public void visit(ClassInfo info); + public void visit(MethodInfo info); + public void visit(FieldInfo info); + public void visit(PackageInfo info); + public void visit(AnnotationInfo annotationInfo, Info info); +}