boolean isArray;
- private final ClassGraph dump;
+ private boolean isShown = true;
+
+ private final ClassGraph classGraph;
List<ClassDescriptor> interfaces = new ArrayList<ClassDescriptor>();
/**
* 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;
+ public ClassDescriptor(final Class<? extends Object> clazz,
+ final ClassGraph dump) {
+ classGraph = dump;
fullyQualifiedName = clazz.getName();
dump.nameToClassMap.put(fullyQualifiedName, this);
}
public boolean areReferencesShown() {
- return referenceCount <= MAX_REFERECNES_COUNT;
+ return incomingReferencesCount <= MAX_REFERECNES_COUNT;
}
public void enlistFieldReferences(final StringBuffer result) {
result.append(" // class descriptor header\n");
result.append(" <TR><TD colspan=\"2\" PORT=\"f0\">"
+ "<FONT POINT-SIZE=\"8.0\" >" + getPackageName()
- + "</FONT><br/>" + "<FONT POINT-SIZE=\"25.0\"><B>"
- + getClassName(false) + "</B></FONT>" + "</TD></TR>\n");
+ + "</FONT><br/>");
+
+ final String parentClassesName = getParentClassesName();
+ if (parentClassesName.length() > 0)
+ result.append("<FONT POINT-SIZE=\"12.0\"><B>" + parentClassesName
+ + "</B></FONT><br/>\n");
+
+ result.append("<FONT POINT-SIZE=\"25.0\"><B>" + getClassName(false)
+ + "</B></FONT>" + "</TD></TR>\n");
}
public List<FieldDescriptor> getAllFields() {
}
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);
if (isArray)
result += " []";
+ // this is needed for nested classes
+ // result = result.replace('$', '.');
return result;
}
public String getGraphId() {
final String result = "class_"
+ fullyQualifiedName.replace('.', '_').replace(";", "")
- .replace("[L", "");
+ .replace("[L", "").replace('$', '_');
return result;
}
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
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);
}
}
final Method[] methods = clazz.getMethods();
for (final Method method : methods)
- new MethodDescriptor(method, this, dump);
+ new MethodDescriptor(method, this, classGraph);
}
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) {