private static final int MAX_REFERECNES_COUNT = 10;
- public final String classFullyQualifiedName;
+ public String classFullyQualifiedName;
- Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<String, FieldDescriptor>();
+ private final Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<String, FieldDescriptor>();
- public SortedSet<MethodDescriptor> methods = new TreeSet<MethodDescriptor>();
+ private final SortedSet<MethodDescriptor> methods = new TreeSet<MethodDescriptor>();
/**
* Incoming arrows will have this color.
private ClassDescriptor arrayComponent;
- public ClassDescriptor(final Class<? extends Object> clazz,
- final ClassGraph classGraph) {
+ public ClassDescriptor(final ClassGraph classGraph) {
this.classGraph = classGraph;
+ }
- classFullyQualifiedName = clazz.getName();
+ public void analyzeClass(final Class<? extends Object> 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);
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;
return "1";
}
+ public ClassGraph getClassGraph() {
+ return classGraph;
+ }
+
public String getClassName(final boolean differentiateArray) {
// this is needed for nested classes
final String actualClassName = classFullyQualifiedName
public String getGraphId() {
final String result = "class_"
+ classFullyQualifiedName.replace('.', '_').replace(";", "")
- .replace("[L", "").replace('$', '_');
+ .replace("[L", "").replace('$', '_');
return result;
}
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;
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('.');
}
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<? extends Object> 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);
+ }
}
if (Utils.isSystemPackage(classFullyQualifiedName))
return false;
- if (!classGraph.getFilter().isClassShown(classFullyQualifiedName))
+ if (!getClassGraph().getFilter().isClassShown(classFullyQualifiedName))
return false;
if (isArray)