Possibility to visualize multiple JAR files.
[javainspect.git] / src / main / java / eu / svjatoslav / inspector / java / structure / ClassDescriptor.java
index c21761c..5bfeb25 100755 (executable)
@@ -1,6 +1,6 @@
 /*
  * JavaInspect - Utility to visualize java software
- * Copyright (C) 2013-2015, Svjatoslav Agejenko, svjatoslav@svjatoslav.eu
+ * Copyright (C) 2013-2017, 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,7 +19,7 @@ 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 Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<>();
     private final SortedSet<MethodDescriptor> methods = new TreeSet<MethodDescriptor>();
     private final ClassGraph classGraph;
     boolean isEnum;
@@ -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) {
@@ -318,8 +321,15 @@ public class ClassDescriptor implements GraphElement, Comparable<ClassDescriptor
     @Override
     public String getGraphId() {
         final String result = "class_"
-                + fullyQualifiedName.replace('.', '_').replace(";", "")
-                .replace("[L", "").replace('$', '_');
+                + fullyQualifiedName
+                .replace('.', '_')
+                .replace(";", "")
+                .replace("[[", "")
+                .replace("[L", "")
+                .replace("[[L", "") // array of arrays
+                .replace("[[[L", "") // array of arrays of arrays
+                .replace('$', '_');
+
         return result;
     }