private JarClasses analyze()

in src/main/java/org/apache/maven/shared/jar/classes/JarClassesAnalysis.java [175:241]


    private JarClasses analyze(String jarFilename, List<JarEntry> classList) {
        JarClasses classes = new JarClasses();

        classes.setDebugPresent(false);

        double maxVersion = 0.0;
        double moduleInfoVersion = 0.0;

        for (JarEntry entry : classList) {
            String classname = entry.getName();

            try {
                ClassParser classParser = new ClassParser(jarFilename, classname);

                JavaClass javaClass = classParser.parse();

                String classSignature = javaClass.getClassName();

                if (!classes.isDebugPresent()) {
                    if (hasDebugSymbols(javaClass)) {
                        classes.setDebugPresent(true);
                    }
                }

                double classVersion = javaClass.getMajor();
                if (javaClass.getMinor() > 0) {
                    classVersion = classVersion + javaClass.getMinor() / 10.0;
                }

                if ("module-info".equals(classSignature)) {
                    // ignore the module-info.class for computing the maxVersion, since it will always be >= 9
                    moduleInfoVersion = classVersion;
                } else if (classVersion > maxVersion) {
                    maxVersion = classVersion;
                }

                Method[] methods = javaClass.getMethods();
                for (Method method : methods) {
                    classes.addMethod(classSignature + "." + method.getName() + method.getSignature());
                }

                String classPackageName = javaClass.getPackageName();

                classes.addClassName(classSignature);
                classes.addPackage(classPackageName);

                ImportVisitor importVisitor = new ImportVisitor(javaClass);
                DescendingVisitor descVisitor = new DescendingVisitor(javaClass, importVisitor);
                javaClass.accept(descVisitor);

                classes.addImports(importVisitor.getImports());
            } catch (ClassFormatException e) {
                logger.warn("Unable to process class " + classname + " in JarAnalyzer File " + jarFilename, e);
            } catch (IOException e) {
                logger.warn("Unable to process JarAnalyzer File " + jarFilename, e);
            }
        }

        if (maxVersion == 0.0 && moduleInfoVersion > 0.0) {
            // the one and only class file was module-info.class
            maxVersion = moduleInfoVersion;
        }

        Optional.ofNullable(JAVA_CLASS_VERSIONS.get(maxVersion)).ifPresent(classes::setJdkRevision);

        return classes;
    }