Updated copyright info
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / structure / ClassDescriptor.java
index 3bd1049..118994e 100755 (executable)
@@ -1,6 +1,6 @@
 /*
  * 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
@@ -19,13 +19,13 @@ import java.util.*;
 public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor> {
 
     private static final int MAX_REFERECNES_COUNT = 10;
-    private final Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<String, FieldDescriptor>();
-    private final SortedSet<MethodDescriptor> methods = new TreeSet<MethodDescriptor>();
+    final List<ClassDescriptor> interfaces = new ArrayList<>();
+    private final Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<>();
+    private final SortedSet<MethodDescriptor> methods = new TreeSet<>();
     private final ClassGraph classGraph;
     boolean isEnum;
     boolean isInterface;
     boolean isArray;
-    List<ClassDescriptor> interfaces = new ArrayList<ClassDescriptor>();
     ClassDescriptor superClass;
     private String fullyQualifiedName;
     /**
@@ -52,7 +52,7 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
         this.classGraph = classGraph;
     }
 
-    protected void analyzeClass(final Class<? extends Object> clazz) {
+    protected void analyzeClass(final Class<?> clazz) {
 
         fullyQualifiedName = clazz.getName();
 
@@ -73,8 +73,13 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
         if (!isVisible())
             return;
 
-        indexFields(clazz.getDeclaredFields());
-        indexFields(clazz.getFields());
+        try {
+            indexFields(clazz.getDeclaredFields());
+            indexFields(clazz.getFields());
+        } catch (NoClassDefFoundError error) {
+            // TODO: better logging of this error
+            System.out.println(error.toString());
+        }
 
         indexMethods(clazz);
 
@@ -102,9 +107,7 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
 
         result.append("\n");
         result.append("    // field references to other classes\n");
-        for (final Map.Entry<String, FieldDescriptor> entry : nameToFieldMap
-                .entrySet())
-            result.append(entry.getValue().getDot());
+        nameToFieldMap.forEach((fieldName, field) -> result.append(field.getDot()));
     }
 
     private void enlistFields(final StringBuffer result) {
@@ -317,14 +320,16 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
 
     @Override
     public String getGraphId() {
-        final String result = "class_"
+
+        return "class_"
                 + fullyQualifiedName
                 .replace('.', '_')
                 .replace(";", "")
-                .replace("[L", "")
                 .replace("[[", "")
+                .replace("[L", "")
+                .replace("[[L", "") // array of arrays
+                .replace("[[[L", "") // array of arrays of arrays
                 .replace('$', '_');
-        return result;
     }
 
     private String getInterfaceColor() {
@@ -433,7 +438,6 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
             return;
         }
 
-        return;
     }
 
     private void indexFields(final Field[] fields) {
@@ -441,7 +445,7 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
             getOrCreateFieldDescriptor(field);
     }
 
-    private void indexMethods(final Class<? extends Object> clazz) {
+    private void indexMethods(final Class<?> clazz) {
         for (final Method method : clazz.getMethods()) {
             final MethodDescriptor methodDescriptor = new MethodDescriptor(
                     this, method.getName());