possibility to hide orphaned classes from graph
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / structure / ClassDescriptor.java
index 41f92f3..55ef66c 100644 (file)
@@ -46,7 +46,7 @@ public class ClassDescriptor implements GraphElement {
 
        private boolean isShown = true;
 
-       private final ClassGraph dump;
+       private final ClassGraph classGraph;
 
        List<ClassDescriptor> interfaces = new ArrayList<ClassDescriptor>();
 
@@ -55,11 +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<? extends Object> clazz,
                        final ClassGraph dump) {
-               this.dump = dump;
+               classGraph = dump;
 
                fullyQualifiedName = clazz.getName();
                dump.nameToClassMap.put(fullyQualifiedName, this);
@@ -92,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) {
@@ -354,13 +354,38 @@ public class ClassDescriptor implements GraphElement {
                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);
 
                }
        }
@@ -369,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);
 
        }
 
@@ -382,11 +407,14 @@ public class ClassDescriptor implements GraphElement {
                if (Utils.isSystemPackage(fullyQualifiedName))
                        return false;
 
+               if (!classGraph.filter.isClassShown(fullyQualifiedName))
+                       return false;
+
                return isShown;
        }
 
        public void registerReference() {
-               referenceCount++;
+               incomingReferencesCount++;
        }
 
        public void setDistinctiveColor(final String distinctiveColor) {