protected void readClassDef()

in xbean-finder/src/main/java/org/apache/xbean/finder/AnnotationFinder.java [1175:1235]


    protected void readClassDef(Class clazz) {
        List<Info> infos = new LinkedList<Info>();

        Package aPackage = clazz.getPackage();
        if (aPackage != null) {
            final PackageInfo info = new PackageInfo(aPackage);
            for (AnnotationInfo annotation : info.getAnnotations()) {
                List<Info> annotationInfos = initAnnotationInfos(annotation.getName());
                if (!annotationInfos.contains(info)) {
                    annotationInfos.add(info);
                }
            }
        }

        ClassInfo classInfo = new ClassInfo(clazz);
        infos.add(classInfo);
        for (Method method : clazz.getDeclaredMethods()) {
            MethodInfo methodInfo = new MethodInfo(classInfo, method);
            if (linking) {
                classInfo.methods.add(methodInfo);
            }
            infos.add(methodInfo);
            for (Annotation[] annotations : method.getParameterAnnotations()) {
                for (int i = 0; i < annotations.length; i++) {
                    infos.add(new ParameterInfo(methodInfo, i));
                }
            }
        }

        for (Constructor<?> constructor : clazz.getConstructors()) {
            MethodInfo methodInfo = new MethodInfo(classInfo, constructor);
            if (linking) {
                classInfo.methods.add(methodInfo);
            }
            infos.add(methodInfo);
            for (Annotation[] annotations : constructor.getParameterAnnotations()) {
                for (int i = 0; i < annotations.length; i++) {
                    infos.add(new ParameterInfo(methodInfo, i));
                }
            }
        }

        for (Field field : clazz.getDeclaredFields()) {
            final FieldInfo fieldInfo = new FieldInfo(classInfo, field);
            if (linking) {
                classInfo.fields.add(fieldInfo);
            }
            infos.add(fieldInfo);
        }

        for (Info info : infos) {
            for (AnnotationInfo annotation : info.getAnnotations()) {
                List<Info> annotationInfos = initAnnotationInfos(annotation.getName());
                annotationInfos.add(info);
            }
        }

        if (linking) {
            classInfos.put(classInfo.name, classInfo);
        }
    }