- /**
- * This class corresponds to single field within a java class.
- */
-
- public String name;
- public ClassDescriptor type;
- private ClassDescriptor parent;
- List<ClassDescriptor> typeArguments = new ArrayList<ClassDescriptor>();
-
- public FieldDescriptor(final Field field, final ClassDescriptor parent,
- final ClassGraph dump) {
-
- this.parent = parent;
+ private final ClassDescriptor parentClassDescriptior;
+ private final List<ClassDescriptor> typeArguments = new ArrayList<ClassDescriptor>();
+ private String name;
+ private ClassDescriptor type;
+ private boolean isInherited;
+
+ public FieldDescriptor(final ClassDescriptor parent) {
+ parentClassDescriptior = parent;
+ }
+
+ public void analyzeField(final Field field) {
+
+ if (!field.getDeclaringClass().getName()
+ .equals(parentClassDescriptior.getFullyQualifiedName()))
+ isInherited = true;
+
+ name = field.getName();
+ type = parentClassDescriptior.getClassGraph().getOrCreateClassDescriptor(
+ field.getType());
+ type.registerReference();
+
+ 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 = parentClassDescriptior
+ .getClassGraph().getOrCreateClassDescriptor(aClass);
+ genericTypeDescriptor.registerReference();
+ typeArguments.add(genericTypeDescriptor);
+ }