X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;fp=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;h=2b775cb2714f4a803ef9129a93bf2d5fd832fca1;hb=94b2a818903a8ec1579dce828b47076c53f435ab;hp=5283007a2a29e7c1b5dfc703c8f8f0a2b45952f9;hpb=62e7738042b3cdcfb4d0973220eaa9be9754d755;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 5283007..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; @@ -252,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 @@ -341,7 +347,7 @@ public class ClassDescriptor implements GraphElement { public String getGraphId() { final String result = "class_" + classFullyQualifiedName.replace('.', '_').replace(";", "") - .replace("[L", "").replace('$', '_'); + .replace("[L", "").replace('$', '_'); return result; } @@ -352,6 +358,35 @@ public class ClassDescriptor implements GraphElement { 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; @@ -376,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('.'); @@ -451,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); + } } @@ -478,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)