/*
* JavaInspect - Utility to visualize java software
- * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright (C) 2013-2020, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 3 of the GNU Lesser General Public License
public class FieldDescriptor implements GraphElement {
- private final ClassDescriptor parentClass;
- private final List<ClassDescriptor> typeArguments = new ArrayList<ClassDescriptor>();
+ private final ClassDescriptor parentClassDescriptor;
+ private final List<ClassDescriptor> typeArguments = new ArrayList<>();
private String name;
private ClassDescriptor type;
private boolean isInherited;
public FieldDescriptor(final ClassDescriptor parent) {
- parentClass = parent;
+ parentClassDescriptor = parent;
}
public void analyzeField(final Field field) {
if (!field.getDeclaringClass().getName()
- .equals(parentClass.getFullyQualifiedName()))
+ .equals(parentClassDescriptor.getFullyQualifiedName()))
isInherited = true;
name = field.getName();
- type = parentClass.getClassGraph().getOrCreateClassDescriptor(
+ type = parentClassDescriptor.getClassGraph().getOrCreateClassDescriptor(
field.getType());
type.registerReference();
- final Type genericType = field.getGenericType();
- if (genericType instanceof ParameterizedType) {
- final ParameterizedType pt = (ParameterizedType) genericType;
- for (final Type t : pt.getActualTypeArguments())
- if (t instanceof Class) {
- final Class cl = (Class) t;
- final ClassDescriptor genericTypeDescriptor = parentClass
- .getClassGraph().getOrCreateClassDescriptor(cl);
+ final Type fieldGenericType = field.getGenericType();
+ if (fieldGenericType instanceof ParameterizedType) {
+ final ParameterizedType fieldParameterizedGenericType = (ParameterizedType) fieldGenericType;
+ for (final Type type : fieldParameterizedGenericType.getActualTypeArguments())
+ if (type instanceof Class) {
+ final Class aClass = (Class) type;
+ final ClassDescriptor genericTypeDescriptor = parentClassDescriptor
+ .getClassGraph().getOrCreateClassDescriptor(aClass);
genericTypeDescriptor.registerReference();
typeArguments.add(genericTypeDescriptor);
}
if (!isVisible())
return "";
- final StringBuffer result = new StringBuffer();
+ final StringBuilder result = new StringBuilder();
// describe associated types
for (final ClassDescriptor classDescriptor : typeArguments)
+ "\", color=\"" + classDescriptor.getColor()
+ "\", style=\"bold\"];\n");
+ if (type == null) return result.toString();
if (!type.isVisible())
return result.toString();
// main type
boolean showLink = type.areReferencesShown();
- if (type == parentClass)
+ if (type == parentClassDescriptor)
showLink = false;
- if (parentClass.isEnum)
+ if (parentClassDescriptor.isEnum)
showLink = false;
if (showLink)
if (!isVisible())
return "";
- final StringBuffer result = new StringBuffer();
+ final StringBuilder result = new StringBuilder();
result.append(" // " + name + "\n");
- if (parentClass.isEnum && (type == parentClass)) {
+ if (parentClassDescriptor.isEnum && (type == parentClassDescriptor)) {
result.append(" <TR><TD colspan=\"2\" PORT=\"" + name);
result.append("\" ALIGN=\"left\"><FONT POINT-SIZE=\"11.0\">");
result.append(name + "</FONT></TD></TR>\n");
} else {
result.append(" <TR><td ALIGN=\"right\">");
result.append("<FONT POINT-SIZE=\"8.0\">");
- result.append(type.getClassName(true) + "</FONT>");
+ result.append(describeType() + "</FONT>");
result.append("</td><TD PORT=\"" + name);
result.append("\" ALIGN=\"left\"><FONT POINT-SIZE=\"11.0\">");
result.append(name + "</FONT></TD></TR>\n");
return result.toString();
}
+ private String describeType() {
+ if (type == null) return "-null-";
+ return type.getClassName(true);
+ }
+
@Override
public String getGraphId() {
- return parentClass.getGraphId() + ":" + name;
+ return parentClassDescriptor.getGraphId() + ":" + name;
}
protected int getOutsideVisibleReferencesCount() {
}
-}
\ No newline at end of file
+}