X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;h=a424897ea65d788e385b9883efcf0b7538e168db;hb=d140a5c445361927abe4fe3a90e6ce95cd6530c3;hp=55ef66ccfcf045fdc2b49ceafd94916c84c53213;hpb=39a8ba91a8541b26180cc3c3dcb99f5ff295785d;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 55ef66c..a424897 100644 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java @@ -12,9 +12,11 @@ package eu.svjatoslav.inspector.java.structure; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.SortedSet; +import java.util.TreeMap; +import java.util.TreeSet; /** * Describes single class instance @@ -25,9 +27,9 @@ public class ClassDescriptor implements GraphElement { public final String fullyQualifiedName; - Map nameToFieldMap = new HashMap(); + Map nameToFieldMap = new TreeMap(); - public List methods = new ArrayList(); + public SortedSet methods = new TreeSet(); /** * Incoming arrows will have this color. @@ -55,7 +57,13 @@ public class ClassDescriptor implements GraphElement { /** * Amount of field and method references pointing to this class. */ - private int incomingReferencesCount = 0; + private int referencesCount = 0; + + // for interface, counts amount of found implementations + private int implementationsCount = 0; + + // counts amount of times this class is extended + private int extensionsCount = 0; public ClassDescriptor(final Class clazz, final ClassGraph dump) { @@ -85,14 +93,21 @@ public class ClassDescriptor implements GraphElement { indexMethods(clazz); - for (final Class interfaceClass : clazz.getInterfaces()) - interfaces.add(dump.addClass(interfaceClass)); + for (final Class interfaceClass : clazz.getInterfaces()) { + final ClassDescriptor classDescriptor = dump + .addClass(interfaceClass); + classDescriptor.registerImplementation(); + interfaces.add(classDescriptor); + } superClass = dump.addClass(clazz.getSuperclass()); + if (superClass != null) + superClass.registerExtension(); + } public boolean areReferencesShown() { - return incomingReferencesCount <= MAX_REFERECNES_COUNT; + return referencesCount <= MAX_REFERECNES_COUNT; } public void enlistFieldReferences(final StringBuffer result) { @@ -308,25 +323,38 @@ public class ClassDescriptor implements GraphElement { return interfaceColor; } - public String getPackageName() { + private int getOutgoingReferencesCount() { + int result = 0; - final int i = fullyQualifiedName.lastIndexOf('.'); + // count method references + for (final MethodDescriptor methodDescriptor : methods) + result += methodDescriptor.getOutsideVisibleReferencesCount(); - if (i == -1) - return ""; + // count field references + for (final FieldDescriptor fieldDescriptor : nameToFieldMap.values()) + result += fieldDescriptor.getOutsideVisibleReferencesCount(); - return fullyQualifiedName.substring(0, i).replace("[L", ""); + // count implemented interfaces + for (final ClassDescriptor classDescriptor : interfaces) + if (classDescriptor.isVisible()) + result++; + + // count superclass + if (superClass != null) + if (superClass.isVisible()) + result++; + + return result; } - public String getParentClassesName() { - int i = fullyQualifiedName.lastIndexOf('.'); - final String fullClassName = fullyQualifiedName.substring(i + 1); + public String getPackageName() { + + final int i = fullyQualifiedName.lastIndexOf('.'); - i = fullClassName.lastIndexOf('$'); if (i == -1) return ""; - final String parentClassesName = fullClassName.substring(0, i); - return parentClassesName.replace('$', '.'); + + return fullyQualifiedName.substring(0, i).replace("[L", ""); } // public String getReadableName() { @@ -343,6 +371,17 @@ public class ClassDescriptor implements GraphElement { // return fullyQualifiedName; // } + public String getParentClassesName() { + int i = fullyQualifiedName.lastIndexOf('.'); + final String fullClassName = fullyQualifiedName.substring(i + 1); + + i = fullClassName.lastIndexOf('$'); + if (i == -1) + return ""; + final String parentClassesName = fullClassName.substring(0, i); + return parentClassesName.replace('$', '.'); + } + public String getSuperClassColor() { if (superClassColor == null) superClassColor = Utils.getNextLightColor(); @@ -354,29 +393,19 @@ public class ClassDescriptor implements GraphElement { isShown = false; } - public boolean hideClassIfNoReferences() { + public void hideClassIfNoReferences() { if (!isVisible()) - return false; - - int outgoingVisibleReferencesCount = 0; - - for (final MethodDescriptor methodDescriptor : methods) - outgoingVisibleReferencesCount += methodDescriptor - .getOutsideVisibleReferencesCount(); - - for (final FieldDescriptor fieldDescriptor : nameToFieldMap.values()) - outgoingVisibleReferencesCount += fieldDescriptor - .getOutsideVisibleReferencesCount(); + return; - final int totalReferencesCount = outgoingVisibleReferencesCount - + incomingReferencesCount; + final int totalReferencesCount = getOutgoingReferencesCount() + + referencesCount + extensionsCount + implementationsCount; if (totalReferencesCount == 0) { hide(); - return true; + return; } - return false; + return; } public void indexFields(final Field[] fields) { @@ -407,14 +436,25 @@ public class ClassDescriptor implements GraphElement { if (Utils.isSystemPackage(fullyQualifiedName)) return false; - if (!classGraph.filter.isClassShown(fullyQualifiedName)) + if (!classGraph.getFilter().isClassShown(fullyQualifiedName)) return false; return isShown; } + /** + * Register event when another class is extending this one. + */ + public void registerExtension() { + extensionsCount++; + } + + public void registerImplementation() { + implementationsCount++; + } + public void registerReference() { - incomingReferencesCount++; + referencesCount++; } public void setDistinctiveColor(final String distinctiveColor) {