X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;h=2b775cb2714f4a803ef9129a93bf2d5fd832fca1;hb=94b2a818903a8ec1579dce828b47076c53f435ab;hp=bdece4bb4e8fc61977a031042646de163d8e4944;hpb=9d9b65fb1909e12606e76ed0625706e446f588fb;p=javainspect.git diff --git a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java index bdece4b..2b775cb 100755 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java @@ -25,11 +25,11 @@ public class ClassDescriptor implements GraphElement { private static final int MAX_REFERECNES_COUNT = 10; - public final String classFullyQualifiedName; + public String classFullyQualifiedName; - Map nameToFieldMap = new TreeMap(); + private final Map nameToFieldMap = new TreeMap(); - public SortedSet methods = new TreeSet(); + private final SortedSet methods = new TreeSet(); /** * Incoming arrows will have this color. @@ -67,19 +67,20 @@ public class ClassDescriptor implements GraphElement { private ClassDescriptor arrayComponent; - public ClassDescriptor(final Class clazz, - final ClassGraph classGraph) { + public ClassDescriptor(final ClassGraph classGraph) { this.classGraph = classGraph; + } - classFullyQualifiedName = clazz.getName(); + public void analyzeClass(final Class clazz) { - classGraph.registerClass(classFullyQualifiedName, this); + classFullyQualifiedName = clazz.getName(); isArray = clazz.isArray(); if (isArray) { final Class componentType = clazz.getComponentType(); - arrayComponent = classGraph.addClass(componentType); + arrayComponent = getClassGraph().getOrCreateClassDescriptor( + componentType); } // System.out.println("class: " + fullyQualifiedName); @@ -97,17 +98,18 @@ public class ClassDescriptor implements GraphElement { indexMethods(clazz); for (final Class interfaceClass : clazz.getInterfaces()) { - final ClassDescriptor classDescriptor = classGraph - .addClass(interfaceClass); - classDescriptor.registerImplementation(); - interfaces.add(classDescriptor); + final ClassDescriptor interfaceClassDescriptor = getClassGraph() + .getOrCreateClassDescriptor(interfaceClass); + interfaceClassDescriptor.registerImplementation(); + interfaces.add(interfaceClassDescriptor); } - superClass = classGraph.addClass(clazz.getSuperclass()); + superClass = getClassGraph().getOrCreateClassDescriptor( + clazz.getSuperclass()); if (superClass != null) superClass.registerExtension(); - } + }; public boolean areReferencesShown() { return referencesCount <= MAX_REFERECNES_COUNT; @@ -153,9 +155,9 @@ public class ClassDescriptor implements GraphElement { continue; result.append(" " + interfaceDescriptor.getGraphId() + " -> " - + getGraphId() + "[style=\"dotted, tapered\", color=\"" + + getGraphId() + "[style=\"dotted\", color=\"" + interfaceDescriptor.getInterfaceColor() - + "\", penwidth=20, dir=\"forward\"];\n"); + + "\", penwidth=10, dir=\"forward\"];\n"); } } @@ -196,8 +198,7 @@ public class ClassDescriptor implements GraphElement { + "\n"); result.append(" " + superClass.getGraphId() + " -> " + getGraphId() - + "[style=\"tapered\", color=\"" - + superClass.getSuperClassColor() + + "[ color=\"" + superClass.getSuperClassColor() + "\", penwidth=10, dir=\"forward\"];\n"); } @@ -253,6 +254,10 @@ public class ClassDescriptor implements GraphElement { return "1"; } + public ClassGraph getClassGraph() { + return classGraph; + } + public String getClassName(final boolean differentiateArray) { // this is needed for nested classes final String actualClassName = classFullyQualifiedName @@ -342,17 +347,46 @@ public class ClassDescriptor implements GraphElement { public String getGraphId() { final String result = "class_" + classFullyQualifiedName.replace('.', '_').replace(";", "") - .replace("[L", "").replace('$', '_'); + .replace("[L", "").replace('$', '_'); return result; } public String getInterfaceColor() { if (interfaceColor == null) - interfaceColor = Utils.getNextLightColor(); + interfaceColor = Utils.getNextDarkColor(); return interfaceColor; } + // public String getReadableName() { + // + // // do not print full class name for well known system classes + // final String packageName = getPackageName(); + // + // if (packageName.equals("java.util")) + // return getClassName(); + // + // if (packageName.equals("java.lang")) + // return getClassName(); + // + // return fullyQualifiedName; + // } + + private FieldDescriptor getOrCreateFieldDescriptor(final Field field) { + + final String fieldName = field.getName(); + + if (nameToFieldMap.containsKey(fieldName)) + return nameToFieldMap.get(fieldName); + + final FieldDescriptor newFieldDescriptor = new FieldDescriptor(this); + nameToFieldMap.put(fieldName, newFieldDescriptor); + + newFieldDescriptor.analyzeField(field); + + return newFieldDescriptor; + } + private int getOutgoingReferencesCount() { int result = 0; @@ -377,20 +411,6 @@ public class ClassDescriptor implements GraphElement { return result; } - // public String getReadableName() { - // - // // do not print full class name for well known system classes - // final String packageName = getPackageName(); - // - // if (packageName.equals("java.util")) - // return getClassName(); - // - // if (packageName.equals("java.lang")) - // return getClassName(); - // - // return fullyQualifiedName; - // } - public String getPackageName() { final int i = classFullyQualifiedName.lastIndexOf('.'); @@ -452,21 +472,19 @@ public class ClassDescriptor implements GraphElement { } public void indexFields(final Field[] fields) { - for (final Field field : fields) { - if (nameToFieldMap.containsKey(field.getName())) - continue; - - final FieldDescriptor fieldDescriptor = new FieldDescriptor(field, - this, classGraph); - - } + for (final Field field : fields) + getOrCreateFieldDescriptor(field); } private void indexMethods(final Class clazz) { - final Method[] methods = clazz.getMethods(); + for (final Method method : clazz.getMethods()) { + final MethodDescriptor methodDescriptor = new MethodDescriptor( + this, method.getName()); - for (final Method method : methods) - new MethodDescriptor(method, this, classGraph); + methods.add(methodDescriptor); + + methodDescriptor.analyze(method); + } } @@ -479,7 +497,7 @@ public class ClassDescriptor implements GraphElement { if (Utils.isSystemPackage(classFullyQualifiedName)) return false; - if (!classGraph.getFilter().isClassShown(classFullyQualifiedName)) + if (!getClassGraph().getFilter().isClassShown(classFullyQualifiedName)) return false; if (isArray)