X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=src%2Fmain%2Fjava%2Feu%2Fsvjatoslav%2Finspector%2Fjava%2Fstructure%2FClassDescriptor.java;h=55ef66ccfcf045fdc2b49ceafd94916c84c53213;hb=d9837ba577dd0c6d56c83326383f450e35764c90;hp=c8a2773880e14d3ed3c28cb96836b9d586fb3d84;hpb=d717e90f4c46e26f9f54ba5638aade6688527bf4;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 c8a2773..55ef66c 100644 --- a/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java +++ b/src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java @@ -44,7 +44,9 @@ public class ClassDescriptor implements GraphElement { boolean isArray; - private final ClassGraph dump; + private boolean isShown = true; + + private final ClassGraph classGraph; List interfaces = new ArrayList(); @@ -53,10 +55,11 @@ public class ClassDescriptor implements GraphElement { /** * Amount of field and method references pointing to this class. */ - private int referenceCount = 0; + private int incomingReferencesCount = 0; - public ClassDescriptor(final Class clazz, final ClassGraph dump) { - this.dump = dump; + public ClassDescriptor(final Class clazz, + final ClassGraph dump) { + classGraph = dump; fullyQualifiedName = clazz.getName(); dump.nameToClassMap.put(fullyQualifiedName, this); @@ -89,7 +92,7 @@ public class ClassDescriptor implements GraphElement { } public boolean areReferencesShown() { - return referenceCount <= MAX_REFERECNES_COUNT; + return incomingReferencesCount <= MAX_REFERECNES_COUNT; } public void enlistFieldReferences(final StringBuffer result) { @@ -185,8 +188,15 @@ public class ClassDescriptor implements GraphElement { result.append(" // class descriptor header\n"); result.append(" " + "" + getPackageName() - + "
" + "" - + getClassName(false) + "" + "\n"); + + "
"); + + final String parentClassesName = getParentClassesName(); + if (parentClassesName.length() > 0) + result.append("" + parentClassesName + + "
\n"); + + result.append("" + getClassName(false) + + "" + "\n"); } public List getAllFields() { @@ -219,10 +229,12 @@ public class ClassDescriptor implements GraphElement { } public String getClassName(final boolean differentiateArray) { + // this is needed for nested classes + final String actualClassName = fullyQualifiedName.replace('$', '.'); - final int i = fullyQualifiedName.lastIndexOf('.'); + final int i = actualClassName.lastIndexOf('.'); - String result = fullyQualifiedName.substring(i + 1); + String result = actualClassName.substring(i + 1); if (isArray) result = result.substring(0, result.length() - 1); @@ -231,6 +243,8 @@ public class ClassDescriptor implements GraphElement { if (isArray) result += " []"; + // this is needed for nested classes + // result = result.replace('$', '.'); return result; } @@ -283,7 +297,7 @@ public class ClassDescriptor implements GraphElement { public String getGraphId() { final String result = "class_" + fullyQualifiedName.replace('.', '_').replace(";", "") - .replace("[L", ""); + .replace("[L", "").replace('$', '_'); return result; } @@ -304,6 +318,17 @@ public class ClassDescriptor implements GraphElement { return fullyQualifiedName.substring(0, i).replace("[L", ""); } + 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 getReadableName() { // // // do not print full class name for well known system classes @@ -325,13 +350,42 @@ public class ClassDescriptor implements GraphElement { return superClassColor; } + public void hide() { + isShown = false; + } + + public boolean 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(); + + final int totalReferencesCount = outgoingVisibleReferencesCount + + incomingReferencesCount; + + if (totalReferencesCount == 0) { + hide(); + return true; + } + + return false; + } + public void indexFields(final Field[] fields) { for (final Field field : fields) { if (nameToFieldMap.containsKey(field.getName())) continue; final FieldDescriptor fieldDescriptor = new FieldDescriptor(field, - this, dump); + this, classGraph); } } @@ -340,7 +394,7 @@ public class ClassDescriptor implements GraphElement { final Method[] methods = clazz.getMethods(); for (final Method method : methods) - new MethodDescriptor(method, this, dump); + new MethodDescriptor(method, this, classGraph); } @@ -353,11 +407,14 @@ public class ClassDescriptor implements GraphElement { if (Utils.isSystemPackage(fullyQualifiedName)) return false; - return true; + if (!classGraph.filter.isClassShown(fullyQualifiedName)) + return false; + + return isShown; } public void registerReference() { - referenceCount++; + incomingReferencesCount++; } public void setDistinctiveColor(final String distinctiveColor) {