make/tools/classanalyzer/src/com/sun/classanalyzer/Klass.java

Print this page

        

*** 19,28 **** --- 19,29 ---- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ + package com.sun.classanalyzer; import java.io.File; import java.util.ArrayList; import java.util.HashMap;
*** 32,74 **** import java.util.SortedMap; import java.util.TreeMap; import java.util.TreeSet; import com.sun.tools.classfile.AccessFlags; /** * * @author Mandy Chung */ public class Klass implements Comparable<Klass> { - private final String classname; private final String packagename; private Module module; private String[] paths; private Map<String, Set<Method>> methods; private AccessFlags accessFlags; private long filesize; ! private boolean isJavaLangObject; ! private boolean isPlatformAPI; ! private boolean isNonCoreAPI; private SortedMap<Klass, Set<ResolutionInfo>> deps; private SortedMap<Klass, Set<ResolutionInfo>> referrers; private List<AnnotatedDependency> annotatedDeps; private Set<String> classForNameRefs; private Klass(String classname) { this.classname = classname; this.paths = classname.replace('.', '/').split("/"); this.isJavaLangObject = classname.equals("java.lang.Object"); - this.isPlatformAPI = Platform.isPlatformAPI(classname); - this.isNonCoreAPI = Platform.isNonCoreAPI(classname); this.deps = new TreeMap<Klass, Set<ResolutionInfo>>(); this.referrers = new TreeMap<Klass, Set<ResolutionInfo>>(); this.methods = new HashMap<String, Set<Method>>(); this.annotatedDeps = new ArrayList<AnnotatedDependency>(); this.classForNameRefs = new TreeSet<String>(); int pos = classname.lastIndexOf('.'); this.packagename = (pos > 0) ? classname.substring(0, pos) : "<unnamed>"; } String getBasename() { --- 33,73 ---- import java.util.SortedMap; import java.util.TreeMap; import java.util.TreeSet; import com.sun.tools.classfile.AccessFlags; + import java.util.Collections; /** * * @author Mandy Chung */ public class Klass implements Comparable<Klass> { private final String classname; private final String packagename; private Module module; + private boolean isJavaLangObject; private String[] paths; private Map<String, Set<Method>> methods; private AccessFlags accessFlags; private long filesize; ! private SortedMap<Klass, Set<ResolutionInfo>> deps; private SortedMap<Klass, Set<ResolutionInfo>> referrers; private List<AnnotatedDependency> annotatedDeps; private Set<String> classForNameRefs; private Klass(String classname) { this.classname = classname; this.paths = classname.replace('.', '/').split("/"); this.isJavaLangObject = classname.equals("java.lang.Object"); this.deps = new TreeMap<Klass, Set<ResolutionInfo>>(); this.referrers = new TreeMap<Klass, Set<ResolutionInfo>>(); this.methods = new HashMap<String, Set<Method>>(); this.annotatedDeps = new ArrayList<AnnotatedDependency>(); this.classForNameRefs = new TreeSet<String>(); + int pos = classname.lastIndexOf('.'); this.packagename = (pos > 0) ? classname.substring(0, pos) : "<unnamed>"; } String getBasename() {
*** 94,111 **** boolean isPublic() { return accessFlags == null || accessFlags.is(AccessFlags.ACC_PUBLIC); } - boolean isPlatformAPI() { - return isPlatformAPI; - } - - boolean isNonCoreAPI() { - return isNonCoreAPI; - } - Module getModule() { return module; } void setModule(Module m) { --- 93,102 ----
*** 150,165 **** void addDep(Klass ref, ResolutionInfo ri) { if (skip(ref)) { return; } ! Set<ResolutionInfo> resInfos; ! if (!deps.containsKey(ref)) { resInfos = new TreeSet<ResolutionInfo>(); deps.put(ref, resInfos); - } else { - resInfos = deps.get(ref); } resInfos.add(ri); } void addReferrer(Method caller, ResolutionInfo resInfo) { --- 141,154 ---- void addDep(Klass ref, ResolutionInfo ri) { if (skip(ref)) { return; } ! Set<ResolutionInfo> resInfos = deps.get(ref); ! if (resInfos == null) { resInfos = new TreeSet<ResolutionInfo>(); deps.put(ref, resInfos); } resInfos.add(ri); } void addReferrer(Method caller, ResolutionInfo resInfo) {
*** 168,196 **** void addReferrer(Klass k, ResolutionInfo ri) { if (skip(k)) { return; } ! Set<ResolutionInfo> resInfos; ! if (!referrers.containsKey(k)) { resInfos = new TreeSet<ResolutionInfo>(); referrers.put(k, resInfos); - } else { - resInfos = referrers.get(k); } resInfos.add(ri); } Method getMethod(String name) { return getMethod(name, ""); } Method getMethod(String name, String signature) { ! Set<Method> set; ! if (methods.containsKey(name)) { ! set = methods.get(name); ! } else { set = new TreeSet<Method>(); methods.put(name, set); } for (Method m : set) { --- 157,181 ---- void addReferrer(Klass k, ResolutionInfo ri) { if (skip(k)) { return; } ! Set<ResolutionInfo> resInfos = referrers.get(k); ! if (resInfos == null) { resInfos = new TreeSet<ResolutionInfo>(); referrers.put(k, resInfos); } resInfos.add(ri); } Method getMethod(String name) { return getMethod(name, ""); } Method getMethod(String name, String signature) { ! Set<Method> set = methods.get(name); ! if (set == null) { set = new TreeSet<Method>(); methods.put(name, set); } for (Method m : set) {
*** 222,236 **** } List<AnnotatedDependency> getAnnotatedDeps() { return annotatedDeps; } private static Map<String, Klass> classes = new TreeMap<String, Klass>(); ! static Set<Klass> getAllClasses() { ! return new TreeSet<Klass>(classes.values()); } static Klass findKlassFromPathname(String filename) { String name = filename; if (filename.endsWith(".class")) { name = filename.substring(0, filename.length() - 6); --- 207,228 ---- } List<AnnotatedDependency> getAnnotatedDeps() { return annotatedDeps; } + private static Map<String, Klass> classes = new TreeMap<String, Klass>(); ! // cache the sorted list of classes for performance ! // No more class can be added after this point ! private static List<Klass> sortedClassList = null; ! static synchronized Iterable<Klass> getAllClasses() { ! if (sortedClassList == null) { ! sortedClassList = new ArrayList<Klass>(classes.values()); } + return Collections.unmodifiableCollection(sortedClassList); + } static Klass findKlassFromPathname(String filename) { String name = filename; if (filename.endsWith(".class")) { name = filename.substring(0, filename.length() - 6);
*** 249,266 **** static Klass findKlass(String classname) { return classes.get(classname); } static Klass getKlass(String name) { - Klass k; String classname = name.replace('/', '.'); if (classname.charAt(classname.length() - 1) == ';') { classname = classname.substring(0, classname.length() - 1); } ! if (classes.containsKey(classname)) { ! k = classes.get(classname); ! } else { k = new Klass(classname); classes.put(classname, k); } return k; } --- 241,259 ---- static Klass findKlass(String classname) { return classes.get(classname); } static Klass getKlass(String name) { String classname = name.replace('/', '.'); if (classname.charAt(classname.length() - 1) == ';') { classname = classname.substring(0, classname.length() - 1); } ! Klass k = classes.get(classname); ! if (k == null) { ! if (sortedClassList != null) ! throw new RuntimeException("new class is not expected to be added at this point"); ! k = new Klass(classname); classes.put(classname, k); } return k; }