private <T> List<Class<? extends T>> _findSubclasses(Class<T> clazz) { if (clazz == null) throw new NullPointerException("class cannot be null"); List<Class<? extends T>> classes = new ArrayList<Class<? extends T>>(); for (ClassInfo classInfo : classInfos.values()) { try { if (clazz.getName().equals(classInfo.superType)) { if (clazz.isAssignableFrom(classInfo.get())) { classes.add(classInfo.get().asSubclass(clazz)); classes.addAll(_findSubclasses(classInfo.get().asSubclass(clazz))); } } } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } return classes; }
public List<Class<?>> findClassesInPackage(String packageName, boolean recursive) { classesNotLoaded.clear(); List<Class<?>> classes = new ArrayList<Class<?>>(); for (ClassInfo classInfo : classInfos.values()) { try { if (recursive && classInfo.getPackageName().startsWith(packageName)) { classes.add(classInfo.get()); } else if (classInfo.getPackageName().equals(packageName)) { classes.add(classInfo.get()); } } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } return classes; }
public List<Class<?>> findClassesInPackage(String packageName, boolean recursive) { classesNotLoaded.clear(); List<Class<?>> classes = new LinkedList<Class<?>>(); for (ClassInfo classInfo : classInfos.values()) { try { if (recursive && classInfo.getPackageName().startsWith(packageName)) { classes.add(classInfo.get()); } else if (classInfo.getPackageName().equals(packageName)) { classes.add(classInfo.get()); } } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } return classes; }
@Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { if (name.endsWith("package-info")) { info = new PackageInfo(javaName(name)); } else { ClassInfo classInfo = new ClassInfo(javaName(name), javaName(superName)); // if (signature == null) { for (final String interfce : interfaces) { classInfo.interfaces.add(javaName(interfce)); } // } else { // // the class uses generics // new SignatureReader(signature).accept(new GenericAwareInfoBuildingVisitor(GenericAwareInfoBuildingVisitor.TYPE.CLASS, classInfo)); // } info = classInfo; classInfos.put(classInfo.getName(), classInfo); } }
@Override public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { if (name.endsWith("package-info")) { info = new PackageInfo(javaName(name)); } else { ClassInfo classInfo = new ClassInfo(javaName(name), javaName(superName)); // if (signature == null) { for (String interfce : interfaces) { classInfo.getInterfaces().add(javaName(interfce)); } // } else { // // the class uses generics // new SignatureReader(signature).accept(new GenericAwareInfoBuildingVisitor(GenericAwareInfoBuildingVisitor.TYPE.CLASS, classInfo)); // } info = classInfo; classInfos.put(classInfo.getName(), classInfo); } }
private void linkMetaAnnotations() { for (ClassInfo classInfo : classInfos.values()) { if (isMetaRoot(classInfo)) { try { metaroots.add((Class<? extends Annotation>) classInfo.get()); } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } } for (Class<? extends Annotation> metaroot : metaroots) { List<Info> infoList = annotated.get(metaroot.getName()); for (Info info : infoList) { readClassDef(info.getName() + "$$"); } } }
private void linkMetaAnnotations() { for (ClassInfo classInfo : classInfos.values().toArray(new ClassInfo[classInfos.size()])) { if (isMetaRoot(classInfo)) { try { metaroots.add((Class<? extends Annotation>) classInfo.get()); } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } } for (Class<? extends Annotation> metaroot : metaroots) { List<Info> infoList = annotated.get(metaroot.getName()); for (Info info : infoList) { readClassDef(info.getName() + "$$"); } } }
private void linkMetaAnnotations() { for (ClassInfo classInfo : classInfos.values().toArray(new ClassInfo[classInfos.size()])) { if (isMetaRoot(classInfo)) { try { metaroots.add((Class<? extends Annotation>) classInfo.get()); } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } } for (Class<? extends Annotation> metaroot : metaroots) { List<Info> infoList = annotated.get(metaroot.getName()); for (Info info : infoList) { readClassDef(info.getName() + "$$"); } } }
public List<Class<?>> findClassesInPackage(String packageName, boolean recursive) { classesNotLoaded.clear(); List<Class<?>> classes = new LinkedList<Class<?>>(); for (ClassInfo classInfo : classInfos.values()) { try { if (recursive && classInfo.getPackageName().startsWith(packageName)) { classes.add(classInfo.get()); } else if (classInfo.getPackageName().equals(packageName)) { classes.add(classInfo.get()); } } catch (ClassNotFoundException e) { classesNotLoaded.add(classInfo.getName()); } } return classes; }
private boolean isMetaRoot(ClassInfo classInfo) { if (!classInfo.isAnnotation()) return false; if (classInfo.getName().equals("javax.annotation.Metatype")) return true; if (isSelfAnnotated(classInfo, "Metatype")) return true; if (isSelfAnnotated(classInfo, "Metaroot")) return false; for (AnnotationInfo annotationInfo : classInfo.getAnnotations()) { final ClassInfo annotation = classInfos.get(annotationInfo.getName()); if (annotation == null) return false; if (annotation.getName().equals("javax.annotation.Metaroot")) return true; if (isSelfAnnotated(annotation, "Metaroot")) return true; } return false; }
private void readClassDef(ClassInfo info) { classInfos.put(info.getName(), info); index(info); index(info.constructors); for (MethodInfo ctor : info.constructors) { index(ctor.parameters); } index(info.methods); for (MethodInfo method : info.methods) { index(method.parameters); } index(info.fields); }
private boolean isMetaRoot(ClassInfo classInfo) { if (!classInfo.isAnnotation()) return false; if (classInfo.getName().equals("javax.annotation.Metatype")) return true; if (isSelfAnnotated(classInfo, "Metatype")) return true; if (isSelfAnnotated(classInfo, "Metaroot")) return false; for (AnnotationInfo annotationInfo : classInfo.getAnnotations()) { final ClassInfo annotation = classInfos.get(annotationInfo.getName()); if (annotation == null) return false; if (annotation.getName().equals("javax.annotation.Metaroot")) return true; if (isSelfAnnotated(annotation, "Metaroot")) return true; } return false; }
private void readClassDef(ClassInfo info) { classInfos.put(info.getName(), info); index(info); index(info.constructors); for (MethodInfo ctor : info.constructors) { index(ctor.parameters); } index(info.methods); for (MethodInfo method : info.methods) { index(method.parameters); } index(info.fields); }
private <T> void findSubclasses(ClassInfo classInfo, List<Class<? extends T>> found, Class<T> clazz) { for (ClassInfo subclassInfo : classInfo.subclassInfos) { try { found.add(subclassInfo.get().asSubclass(clazz)); } catch (ClassNotFoundException e) { classesNotLoaded.add(subclassInfo.getName()); } findSubclasses(subclassInfo, found, clazz); } }
private boolean isSelfAnnotated(ClassInfo classInfo, String metatype) { if (!classInfo.isAnnotation()) return false; final String name = classInfo.getName(); if (!hasName(name, metatype)) return false; for (AnnotationInfo info : classInfo.getAnnotations()) { if (info.getName().equals(name)) return true; } return true; }
private <T> void findSubclasses(ClassInfo classInfo, List<Class<? extends T>> found, Class<T> clazz) { for (ClassInfo subclassInfo : classInfo.subclassInfos) { try { found.add(subclassInfo.get().asSubclass(clazz)); } catch (ClassNotFoundException e) { classesNotLoaded.add(subclassInfo.getName()); } findSubclasses(subclassInfo, found, clazz); } }
private <T> void findSubclasses(ClassInfo classInfo, List<Class<? extends T>> found, Class<T> clazz) { for (ClassInfo subclassInfo : classInfo.subclassInfos) { try { found.add(subclassInfo.get().asSubclass(clazz)); } catch (ClassNotFoundException e) { classesNotLoaded.add(subclassInfo.getName()); } findSubclasses(subclassInfo, found, clazz); } }
private boolean isSelfAnnotated(ClassInfo classInfo, String metatype) { if (!classInfo.isAnnotation()) return false; final String name = classInfo.getName(); if (!hasName(name, metatype)) return false; for (AnnotationInfo info : classInfo.getAnnotations()) { if (info.getName().equals(name)) return true; } return true; }
private boolean isMetaRoot(ClassInfo classInfo) { if (!classInfo.isAnnotation()) return false; if (classInfo.getName().equals("javax.annotation.Metatype")) return true; if (isSelfAnnotated(classInfo, "Metatype")) return true; if (isSelfAnnotated(classInfo, "Metaroot")) return false; for (AnnotationInfo annotationInfo : classInfo.getAnnotations()) { final ClassInfo annotation = classInfos.get(annotationInfo.getName()); if (annotation == null) return false; if (annotation.getName().equals("javax.annotation.Metaroot")) return true; if (isSelfAnnotated(annotation, "Metaroot")) return true; } return false; }
private boolean isSelfAnnotated(ClassInfo classInfo, String metatype) { if (!classInfo.isAnnotation()) return false; final String name = classInfo.getName(); if (!hasName(name, metatype)) return false; for (AnnotationInfo info : classInfo.getAnnotations()) { if (info.getName().equals(name)) return true; } return true; }