Search in sources :

Example 1 with Dependency

use of com.sun.tools.classfile.Dependency in project jdk8u_jdk by JetBrains.

the class CheckDeps method analyzeDependencies.

/**
     * Analyze the dependencies of all classes in the given JAR file. The
     * method updates knownTypes and unknownRefs as part of the analysis.
     */
static void analyzeDependencies(Path jarpath) throws Exception {
    System.out.format("Analyzing %s%n", jarpath);
    try (JarFile jf = new JarFile(jarpath.toFile())) {
        Enumeration<JarEntry> entries = jf.entries();
        while (entries.hasMoreElements()) {
            JarEntry e = entries.nextElement();
            String name = e.getName();
            if (name.endsWith(".class")) {
                ClassFile cf = ClassFile.read(jf.getInputStream(e));
                for (Dependency d : finder.findDependencies(cf)) {
                    String origin = toClassName(d.getOrigin().getName());
                    String target = toClassName(d.getTarget().getName());
                    // origin is now known
                    unknownRefs.remove(origin);
                    knownTypes.add(origin);
                    // if the target is not known then record the reference
                    if (!knownTypes.contains(target)) {
                        Set<String> refs = unknownRefs.get(target);
                        if (refs == null) {
                            // first time seeing this unknown type
                            refs = new HashSet<>();
                            unknownRefs.put(target, refs);
                        }
                        refs.add(origin);
                    }
                }
            }
        }
    }
}
Also used : ClassFile(com.sun.tools.classfile.ClassFile) Dependency(com.sun.tools.classfile.Dependency) JarFile(java.util.jar.JarFile) JarEntry(java.util.jar.JarEntry)

Aggregations

ClassFile (com.sun.tools.classfile.ClassFile)1 Dependency (com.sun.tools.classfile.Dependency)1 JarEntry (java.util.jar.JarEntry)1 JarFile (java.util.jar.JarFile)1