improved project documentation
authorSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Fri, 13 Sep 2013 21:11:17 +0000 (00:11 +0300)
committerSvjatoslav Agejenko <svjatoslav@svjatoslav.eu>
Fri, 13 Sep 2013 21:11:17 +0000 (00:11 +0300)
13 files changed:
doc/JavaInspect full project.png [new file with mode: 0644]
doc/JavaInspect.dot
doc/JavaInspect.png
doc/index.html
src/main/java/eu/svjatoslav/inspector/java/methods/package-info.java [new file with mode: 0644]
src/main/java/eu/svjatoslav/inspector/java/structure/ClassDescriptor.java
src/main/java/eu/svjatoslav/inspector/java/structure/ClassGraph.java
src/main/java/eu/svjatoslav/inspector/java/structure/FieldDescriptor.java
src/main/java/eu/svjatoslav/inspector/java/structure/Filter.java
src/main/java/eu/svjatoslav/inspector/java/structure/MethodDescriptor.java
src/main/java/eu/svjatoslav/inspector/java/structure/example/RenderJavaInspect.java
src/main/java/eu/svjatoslav/inspector/xml/xsd/Main.java [deleted file]
src/main/java/eu/svjatoslav/inspector/xml/xsd/XSD.java [deleted file]

diff --git a/doc/JavaInspect full project.png b/doc/JavaInspect full project.png
new file mode 100644 (file)
index 0000000..2fb9b51
Binary files /dev/null and b/doc/JavaInspect full project.png differ
index fc58358..660c81c 100644 (file)
 digraph Java {
 graph [rankdir=LR, overlap = false, concentrate=true];
 
-// Class: eu.svjatoslav.javainspect.structure.ClassDescriptor
-    class_eu_svjatoslav_javainspect_structure_ClassDescriptor[label=<<TABLE  BORDER="4" CELLBORDER="1" CELLSPACING="0">
+// Class: eu.svjatoslav.inspector.java.structure.Filter
+    class_eu_svjatoslav_inspector_java_structure_Filter[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>ClassDescriptor</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>Filter</B></FONT></TD></TR>
 
     // fields:
-        // methods
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="methods" ALIGN="left"><FONT POINT-SIZE="11.0">methods</FONT></TD></TR>
-        // distinctiveReferenceColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="distinctiveReferenceColor" ALIGN="left"><FONT POINT-SIZE="11.0">distinctiveReferenceColor</FONT></TD></TR>
-        // interfaceColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="interfaceColor" ALIGN="left"><FONT POINT-SIZE="11.0">interfaceColor</FONT></TD></TR>
-        // superClass
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="superClass" ALIGN="left"><FONT POINT-SIZE="11.0">superClass</FONT></TD></TR>
-        // dump
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Graph</FONT></td><TD PORT="dump" ALIGN="left"><FONT POINT-SIZE="11.0">dump</FONT></TD></TR>
-        // MAX_REFERECNES_COUNT
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="MAX_REFERECNES_COUNT" ALIGN="left"><FONT POINT-SIZE="11.0">MAX_REFERECNES_COUNT</FONT></TD></TR>
-        // nameToFieldMap
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Map</FONT></td><TD PORT="nameToFieldMap" ALIGN="left"><FONT POINT-SIZE="11.0">nameToFieldMap</FONT></TD></TR>
-        // superClassColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="superClassColor" ALIGN="left"><FONT POINT-SIZE="11.0">superClassColor</FONT></TD></TR>
-        // isInterface
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isInterface" ALIGN="left"><FONT POINT-SIZE="11.0">isInterface</FONT></TD></TR>
-        // referenceCount
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="referenceCount" ALIGN="left"><FONT POINT-SIZE="11.0">referenceCount</FONT></TD></TR>
-        // isEnum
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isEnum" ALIGN="left"><FONT POINT-SIZE="11.0">isEnum</FONT></TD></TR>
-        // interfaces
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="interfaces" ALIGN="left"><FONT POINT-SIZE="11.0">interfaces</FONT></TD></TR>
-        // fullyQualifiedName
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="fullyQualifiedName" ALIGN="left"><FONT POINT-SIZE="11.0">fullyQualifiedName</FONT></TD></TR>
-        // isArray
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isArray" ALIGN="left"><FONT POINT-SIZE="11.0">isArray</FONT></TD></TR>
+        // blacklistClassPatterns
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="blacklistClassPatterns" ALIGN="left"><FONT POINT-SIZE="11.0">blacklistClassPatterns</FONT></TD></TR>
+        // whitelistClassPatterns
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="whitelistClassPatterns" ALIGN="left"><FONT POINT-SIZE="11.0">whitelistClassPatterns</FONT></TD></TR>
 
     // methods:
-        // getClassName
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getClassName" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getClassName</FONT></TD></TR>
-        // getDot
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDot</FONT></TD></TR>
-        // isVisible
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
-        // indexFields
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="indexFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">indexFields</FONT></TD></TR>
-        // areReferencesShown
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="areReferencesShown" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">areReferencesShown</FONT></TD></TR>
-        // enlistFieldReferences
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistFieldReferences" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistFieldReferences</FONT></TD></TR>
-        // enlistFields
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistFields</FONT></TD></TR>
-        // getEmbeddedDot
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getEmbeddedDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getEmbeddedDot</FONT></TD></TR>
-        // enlistImplementedInterfaces
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistImplementedInterfaces" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistImplementedInterfaces</FONT></TD></TR>
-        // getGraphId
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getGraphId" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getGraphId</FONT></TD></TR>
-        // enlistMethodReferences
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistMethodReferences" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistMethodReferences</FONT></TD></TR>
-        // enlistMethods
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistMethods" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistMethods</FONT></TD></TR>
-        // enlistSuperClass
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistSuperClass" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistSuperClass</FONT></TD></TR>
-        // generateDotHeader
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateDotHeader" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateDotHeader</FONT></TD></TR>
-        // getBackgroundColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getBackgroundColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getBackgroundColor</FONT></TD></TR>
-        // getBorderWidth
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getBorderWidth" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getBorderWidth</FONT></TD></TR>
-        // getPackageName
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getPackageName" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getPackageName</FONT></TD></TR>
-        // getAllFields
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="getAllFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getAllFields</FONT></TD></TR>
-        // getColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getColor</FONT></TD></TR>
-        // getDistinctiveColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDistinctiveColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDistinctiveColor</FONT></TD></TR>
-        // setDistinctiveColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="setDistinctiveColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">setDistinctiveColor</FONT></TD></TR>
-        // registerReference
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="registerReference" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">registerReference</FONT></TD></TR>
+        // blacklistClassPattern
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="blacklistClassPattern" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">blacklistClassPattern</FONT></TD></TR>
+        // isClassShown
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isClassShown" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isClassShown</FONT></TD></TR>
+        // whitelistClassPattern
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="whitelistClassPattern" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">whitelistClassPattern</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // field references to other classes
-    class_eu_svjatoslav_javainspect_structure_ClassDescriptor:methods -> class_eu_svjatoslav_javainspect_structure_MethodDescriptor[label="methods", color="antiquewhite4", style="bold"];
-    class_eu_svjatoslav_javainspect_structure_ClassDescriptor:dump -> class_eu_svjatoslav_javainspect_structure_Graph[label="dump", color="blueviolet", style="bold"];
-    class_eu_svjatoslav_javainspect_structure_ClassDescriptor:nameToFieldMap -> class_eu_svjatoslav_javainspect_structure_FieldDescriptor[label="nameToFieldMap", color="brown4", style="bold"];
 
     // method references to other classes
-    class_eu_svjatoslav_javainspect_structure_ClassDescriptor:getAllFields -> class_eu_svjatoslav_javainspect_structure_FieldDescriptor[label="getAllFields", color="brown4", style="dotted, bold"];
 
-    // interfaces implemented by class: eu.svjatoslav.javainspect.structure.ClassDescriptor
-    class_eu_svjatoslav_javainspect_structure_GraphElement -> class_eu_svjatoslav_javainspect_structure_ClassDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
-
-// Class: eu.svjatoslav.javainspect.structure.MethodDescriptor
-    class_eu_svjatoslav_javainspect_structure_MethodDescriptor[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
+// Class: eu.svjatoslav.inspector.java.structure.FieldDescriptor
+    class_eu_svjatoslav_inspector_java_structure_FieldDescriptor[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>MethodDescriptor</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>FieldDescriptor</B></FONT></TD></TR>
 
     // fields:
         // name
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="name" ALIGN="left"><FONT POINT-SIZE="11.0">name</FONT></TD></TR>
         // parent
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="parent" ALIGN="left"><FONT POINT-SIZE="11.0">parent</FONT></TD></TR>
+        // type
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="type" ALIGN="left"><FONT POINT-SIZE="11.0">type</FONT></TD></TR>
         // typeArguments
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="typeArguments" ALIGN="left"><FONT POINT-SIZE="11.0">typeArguments</FONT></TD></TR>
-        // returnType
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="returnType" ALIGN="left"><FONT POINT-SIZE="11.0">returnType</FONT></TD></TR>
 
     // methods:
         // getDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDot</FONT></TD></TR>
-        // isVisible
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
         // getEmbeddedDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getEmbeddedDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getEmbeddedDot</FONT></TD></TR>
         // getGraphId
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getGraphId" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getGraphId</FONT></TD></TR>
-        // getMethodLabel
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getMethodLabel" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getMethodLabel</FONT></TD></TR>
+        // getOutsideVisibleReferencesCount
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="getOutsideVisibleReferencesCount" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getOutsideVisibleReferencesCount</FONT></TD></TR>
+        // isVisible
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // field references to other classes
 
     // method references to other classes
 
-    // interfaces implemented by class: eu.svjatoslav.javainspect.structure.MethodDescriptor
-    class_eu_svjatoslav_javainspect_structure_GraphElement -> class_eu_svjatoslav_javainspect_structure_MethodDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
+    // interfaces implemented by class: eu.svjatoslav.inspector.java.structure.FieldDescriptor
+    class_eu_svjatoslav_inspector_java_structure_GraphElement -> class_eu_svjatoslav_inspector_java_structure_FieldDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
 
-// Class: eu.svjatoslav.javainspect.structure.Graph
-    class_eu_svjatoslav_javainspect_structure_Graph[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
+// Class: eu.svjatoslav.inspector.java.structure.MethodDescriptor
+    class_eu_svjatoslav_inspector_java_structure_MethodDescriptor[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>Graph</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>MethodDescriptor</B></FONT></TD></TR>
 
     // fields:
-        // nameToClassMap
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Map</FONT></td><TD PORT="nameToClassMap" ALIGN="left"><FONT POINT-SIZE="11.0">nameToClassMap</FONT></TD></TR>
+        // name
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="name" ALIGN="left"><FONT POINT-SIZE="11.0">name</FONT></TD></TR>
+        // parent
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="parent" ALIGN="left"><FONT POINT-SIZE="11.0">parent</FONT></TD></TR>
+        // returnType
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="returnType" ALIGN="left"><FONT POINT-SIZE="11.0">returnType</FONT></TD></TR>
+        // typeArguments
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="typeArguments" ALIGN="left"><FONT POINT-SIZE="11.0">typeArguments</FONT></TD></TR>
 
     // methods:
-        // addClass
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="addClass" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">addClass</FONT></TD></TR>
-        // addObject
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="addObject" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">addObject</FONT></TD></TR>
-        // generateGraph
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateGraph" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateGraph</FONT></TD></TR>
-        // generateGraph
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateGraph" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateGraph</FONT></TD></TR>
+        // compareTo
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="compareTo" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">compareTo</FONT></TD></TR>
+        // compareTo
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="compareTo" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">compareTo</FONT></TD></TR>
+        // getDot
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDot</FONT></TD></TR>
+        // getEmbeddedDot
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getEmbeddedDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getEmbeddedDot</FONT></TD></TR>
+        // getGraphId
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getGraphId" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getGraphId</FONT></TD></TR>
+        // getMethodLabel
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getMethodLabel" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getMethodLabel</FONT></TD></TR>
+        // getOutsideVisibleReferencesCount
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="getOutsideVisibleReferencesCount" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getOutsideVisibleReferencesCount</FONT></TD></TR>
+        // isVisible
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // field references to other classes
 
     // method references to other classes
 
-// Class: eu.svjatoslav.javainspect.structure.Utils
-    class_eu_svjatoslav_javainspect_structure_Utils[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
+    // interfaces implemented by class: eu.svjatoslav.inspector.java.structure.MethodDescriptor
+    class_eu_svjatoslav_inspector_java_structure_GraphElement -> class_eu_svjatoslav_inspector_java_structure_MethodDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
+
+// Class: eu.svjatoslav.inspector.java.structure.Utils
+    class_eu_svjatoslav_inspector_java_structure_Utils[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>Utils</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>Utils</B></FONT></TD></TR>
 
     // fields:
+        // darkColors
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="darkColors" ALIGN="left"><FONT POINT-SIZE="11.0">darkColors</FONT></TD></TR>
+        // enumMethods
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="enumMethods" ALIGN="left"><FONT POINT-SIZE="11.0">enumMethods</FONT></TD></TR>
+        // lastChosenDarkColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="lastChosenDarkColor" ALIGN="left"><FONT POINT-SIZE="11.0">lastChosenDarkColor</FONT></TD></TR>
+        // lastChosenLightColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="lastChosenLightColor" ALIGN="left"><FONT POINT-SIZE="11.0">lastChosenLightColor</FONT></TD></TR>
         // lightColors
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="lightColors" ALIGN="left"><FONT POINT-SIZE="11.0">lightColors</FONT></TD></TR>
         // systemDataTypes
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="systemDataTypes" ALIGN="left"><FONT POINT-SIZE="11.0">systemDataTypes</FONT></TD></TR>
-        // lastChosenLightColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="lastChosenLightColor" ALIGN="left"><FONT POINT-SIZE="11.0">lastChosenLightColor</FONT></TD></TR>
-        // lastChosenDarkColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="lastChosenDarkColor" ALIGN="left"><FONT POINT-SIZE="11.0">lastChosenDarkColor</FONT></TD></TR>
         // systemMethods
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="systemMethods" ALIGN="left"><FONT POINT-SIZE="11.0">systemMethods</FONT></TD></TR>
-        // enumMethods
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="enumMethods" ALIGN="left"><FONT POINT-SIZE="11.0">enumMethods</FONT></TD></TR>
-        // darkColors
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="darkColors" ALIGN="left"><FONT POINT-SIZE="11.0">darkColors</FONT></TD></TR>
         // systemPackages
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="systemPackages" ALIGN="left"><FONT POINT-SIZE="11.0">systemPackages</FONT></TD></TR>
 
     // methods:
+        // getNextDarkColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getNextDarkColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getNextDarkColor</FONT></TD></TR>
+        // getNextLightColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getNextLightColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getNextLightColor</FONT></TD></TR>
         // initDarkColors
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="initDarkColors" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">initDarkColors</FONT></TD></TR>
         // initEnumMethods
@@ -193,74 +145,172 @@ graph [rankdir=LR, overlap = false, concentrate=true];
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="initSystemMethods" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">initSystemMethods</FONT></TD></TR>
         // initSystemPackages
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="initSystemPackages" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">initSystemPackages</FONT></TD></TR>
-        // isSystemMethod
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isSystemMethod" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isSystemMethod</FONT></TD></TR>
-        // getNextDarkColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getNextDarkColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getNextDarkColor</FONT></TD></TR>
-        // getNextLightColor
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getNextLightColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getNextLightColor</FONT></TD></TR>
+        // isEnumMethod
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isEnumMethod" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isEnumMethod</FONT></TD></TR>
         // isSystemDataType
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isSystemDataType" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isSystemDataType</FONT></TD></TR>
+        // isSystemMethod
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isSystemMethod" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isSystemMethod</FONT></TD></TR>
         // isSystemPackage
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isSystemPackage" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isSystemPackage</FONT></TD></TR>
-        // isEnumMethod
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isEnumMethod" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isEnumMethod</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // field references to other classes
 
     // method references to other classes
 
-// Class: eu.svjatoslav.javainspect.structure.GraphElement
-    class_eu_svjatoslav_javainspect_structure_GraphElement[label=<<TABLE bgcolor="darkslategray1" BORDER="1" CELLBORDER="1" CELLSPACING="0">
+// Class: eu.svjatoslav.inspector.java.structure.GraphElement
+    class_eu_svjatoslav_inspector_java_structure_GraphElement[label=<<TABLE bgcolor="darkslategray1" BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>GraphElement</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>GraphElement</B></FONT></TD></TR>
 
     // methods:
         // getDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDot</FONT></TD></TR>
-        // isVisible
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
         // getEmbeddedDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getEmbeddedDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getEmbeddedDot</FONT></TD></TR>
         // getGraphId
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getGraphId" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getGraphId</FONT></TD></TR>
+        // isVisible
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // method references to other classes
 
-// Class: eu.svjatoslav.javainspect.structure.FieldDescriptor
-    class_eu_svjatoslav_javainspect_structure_FieldDescriptor[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
+// Class: eu.svjatoslav.inspector.java.structure.ClassGraph
+    class_eu_svjatoslav_inspector_java_structure_ClassGraph[label=<<TABLE  BORDER="1" CELLBORDER="1" CELLSPACING="0">
 
     // class descriptor header
-    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.javainspect.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>FieldDescriptor</B></FONT></TD></TR>
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>ClassGraph</B></FONT></TD></TR>
 
     // fields:
-        // name
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="name" ALIGN="left"><FONT POINT-SIZE="11.0">name</FONT></TD></TR>
-        // parent
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="parent" ALIGN="left"><FONT POINT-SIZE="11.0">parent</FONT></TD></TR>
-        // typeArguments
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="typeArguments" ALIGN="left"><FONT POINT-SIZE="11.0">typeArguments</FONT></TD></TR>
-        // type
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="type" ALIGN="left"><FONT POINT-SIZE="11.0">type</FONT></TD></TR>
+        // filter
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Filter</FONT></td><TD PORT="filter" ALIGN="left"><FONT POINT-SIZE="11.0">filter</FONT></TD></TR>
+        // nameToClassMap
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Map</FONT></td><TD PORT="nameToClassMap" ALIGN="left"><FONT POINT-SIZE="11.0">nameToClassMap</FONT></TD></TR>
+
+    // methods:
+        // addClass
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="addClass" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">addClass</FONT></TD></TR>
+        // addObject
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="addObject" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">addObject</FONT></TD></TR>
+        // addProject
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="addProject" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">addProject</FONT></TD></TR>
+        // generateGraph
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateGraph" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateGraph</FONT></TD></TR>
+        // generateGraph
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateGraph" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateGraph</FONT></TD></TR>
+        // hideOrphanedClasses
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="hideOrphanedClasses" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">hideOrphanedClasses</FONT></TD></TR>
+        // render
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="render" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">render</FONT></TD></TR>
+    </TABLE>>, shape="none"];
+
+    // field references to other classes
+    class_eu_svjatoslav_inspector_java_structure_ClassGraph:filter -> class_eu_svjatoslav_inspector_java_structure_Filter[label="filter", color="antiquewhite4", style="bold"];
+
+    // method references to other classes
+
+// Class: eu.svjatoslav.inspector.java.structure.ClassDescriptor
+    class_eu_svjatoslav_inspector_java_structure_ClassDescriptor[label=<<TABLE  BORDER="4" CELLBORDER="1" CELLSPACING="0">
+
+    // class descriptor header
+    <TR><TD colspan="2" PORT="f0"><FONT POINT-SIZE="8.0" >eu.svjatoslav.inspector.java.structure</FONT><br/><FONT POINT-SIZE="25.0"><B>ClassDescriptor</B></FONT></TD></TR>
+
+    // fields:
+        // MAX_REFERECNES_COUNT
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="MAX_REFERECNES_COUNT" ALIGN="left"><FONT POINT-SIZE="11.0">MAX_REFERECNES_COUNT</FONT></TD></TR>
+        // classGraph
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassGraph</FONT></td><TD PORT="classGraph" ALIGN="left"><FONT POINT-SIZE="11.0">classGraph</FONT></TD></TR>
+        // distinctiveReferenceColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="distinctiveReferenceColor" ALIGN="left"><FONT POINT-SIZE="11.0">distinctiveReferenceColor</FONT></TD></TR>
+        // fullyQualifiedName
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="fullyQualifiedName" ALIGN="left"><FONT POINT-SIZE="11.0">fullyQualifiedName</FONT></TD></TR>
+        // incomingReferencesCount
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">int</FONT></td><TD PORT="incomingReferencesCount" ALIGN="left"><FONT POINT-SIZE="11.0">incomingReferencesCount</FONT></TD></TR>
+        // interfaceColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="interfaceColor" ALIGN="left"><FONT POINT-SIZE="11.0">interfaceColor</FONT></TD></TR>
+        // interfaces
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="interfaces" ALIGN="left"><FONT POINT-SIZE="11.0">interfaces</FONT></TD></TR>
+        // isArray
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isArray" ALIGN="left"><FONT POINT-SIZE="11.0">isArray</FONT></TD></TR>
+        // isEnum
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isEnum" ALIGN="left"><FONT POINT-SIZE="11.0">isEnum</FONT></TD></TR>
+        // isInterface
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isInterface" ALIGN="left"><FONT POINT-SIZE="11.0">isInterface</FONT></TD></TR>
+        // isShown
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isShown" ALIGN="left"><FONT POINT-SIZE="11.0">isShown</FONT></TD></TR>
+        // methods
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">SortedSet</FONT></td><TD PORT="methods" ALIGN="left"><FONT POINT-SIZE="11.0">methods</FONT></TD></TR>
+        // nameToFieldMap
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">Map</FONT></td><TD PORT="nameToFieldMap" ALIGN="left"><FONT POINT-SIZE="11.0">nameToFieldMap</FONT></TD></TR>
+        // superClass
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">ClassDescriptor</FONT></td><TD PORT="superClass" ALIGN="left"><FONT POINT-SIZE="11.0">superClass</FONT></TD></TR>
+        // superClassColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="superClassColor" ALIGN="left"><FONT POINT-SIZE="11.0">superClassColor</FONT></TD></TR>
 
     // methods:
+        // areReferencesShown
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="areReferencesShown" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">areReferencesShown</FONT></TD></TR>
+        // enlistFieldReferences
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistFieldReferences" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistFieldReferences</FONT></TD></TR>
+        // enlistFields
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistFields</FONT></TD></TR>
+        // enlistImplementedInterfaces
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistImplementedInterfaces" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistImplementedInterfaces</FONT></TD></TR>
+        // enlistMethodReferences
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistMethodReferences" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistMethodReferences</FONT></TD></TR>
+        // enlistMethods
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistMethods" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistMethods</FONT></TD></TR>
+        // enlistSuperClass
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="enlistSuperClass" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">enlistSuperClass</FONT></TD></TR>
+        // generateDotHeader
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="generateDotHeader" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">generateDotHeader</FONT></TD></TR>
+        // getAllFields
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">List</FONT></td><TD PORT="getAllFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getAllFields</FONT></TD></TR>
+        // getBackgroundColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getBackgroundColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getBackgroundColor</FONT></TD></TR>
+        // getBorderWidth
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getBorderWidth" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getBorderWidth</FONT></TD></TR>
+        // getClassName
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getClassName" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getClassName</FONT></TD></TR>
+        // getColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getColor</FONT></TD></TR>
+        // getDistinctiveColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDistinctiveColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDistinctiveColor</FONT></TD></TR>
         // getDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getDot</FONT></TD></TR>
-        // isVisible
-        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
         // getEmbeddedDot
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getEmbeddedDot" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getEmbeddedDot</FONT></TD></TR>
         // getGraphId
         <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getGraphId" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getGraphId</FONT></TD></TR>
+        // getPackageName
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getPackageName" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getPackageName</FONT></TD></TR>
+        // getParentClassesName
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">String</FONT></td><TD PORT="getParentClassesName" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">getParentClassesName</FONT></TD></TR>
+        // hide
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="hide" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">hide</FONT></TD></TR>
+        // hideClassIfNoReferences
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="hideClassIfNoReferences" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">hideClassIfNoReferences</FONT></TD></TR>
+        // indexFields
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="indexFields" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">indexFields</FONT></TD></TR>
+        // isVisible
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">boolean</FONT></td><TD PORT="isVisible" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">isVisible</FONT></TD></TR>
+        // registerReference
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="registerReference" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">registerReference</FONT></TD></TR>
+        // setDistinctiveColor
+        <TR><td ALIGN="right"><FONT POINT-SIZE="8.0">void</FONT></td><TD PORT="setDistinctiveColor" ALIGN="left"><FONT COLOR ="red" POINT-SIZE="11.0">setDistinctiveColor</FONT></TD></TR>
     </TABLE>>, shape="none"];
 
     // field references to other classes
+    class_eu_svjatoslav_inspector_java_structure_ClassDescriptor:classGraph -> class_eu_svjatoslav_inspector_java_structure_ClassGraph[label="classGraph", color="blueviolet", style="bold"];
+    class_eu_svjatoslav_inspector_java_structure_ClassDescriptor:methods -> class_eu_svjatoslav_inspector_java_structure_MethodDescriptor[label="methods", color="brown4", style="bold"];
+    class_eu_svjatoslav_inspector_java_structure_ClassDescriptor:nameToFieldMap -> class_eu_svjatoslav_inspector_java_structure_FieldDescriptor[label="nameToFieldMap", color="chartreuse4", style="bold"];
 
     // method references to other classes
+    class_eu_svjatoslav_inspector_java_structure_ClassDescriptor:getAllFields -> class_eu_svjatoslav_inspector_java_structure_FieldDescriptor[label="getAllFields", color="chartreuse4", style="dotted, bold"];
 
-    // interfaces implemented by class: eu.svjatoslav.javainspect.structure.FieldDescriptor
-    class_eu_svjatoslav_javainspect_structure_GraphElement -> class_eu_svjatoslav_javainspect_structure_FieldDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
+    // interfaces implemented by class: eu.svjatoslav.inspector.java.structure.ClassDescriptor
+    class_eu_svjatoslav_inspector_java_structure_GraphElement -> class_eu_svjatoslav_inspector_java_structure_ClassDescriptor[style="dotted, tapered", color="olivedrab2", penwidth=20, dir="forward"];
 }
index 057976b..c4f94b1 100644 (file)
Binary files a/doc/JavaInspect.png and b/doc/JavaInspect.png differ
index 096c1e0..b826e7a 100644 (file)
@@ -70,25 +70,31 @@ This software is distributed under <a
        <img src="legend.png" />\r
 \r
 \r
-       <h2>Usage example</h2>\r
+       <h2>Usage example 1</h2>\r
 \r
-       Following example produces graph for JavaInspect itself:\r
+<pre>\r
+<code>\r
+               /*\r
+                * This example demonstrates generating of class graph from hand picked\r
+                * classes.\r
+                */\r
 \r
-       <pre>\r
+               // Create graph\r
+               final ClassGraph graph = new ClassGraph();\r
 \r
-<code>\r
-// Create graph\r
-final ClassGraph graph = new ClassGraph();\r
+               // While classes and objects can be immediately passed to ClassGraph\r
+               // constructor as arguments, it is also possible to add then one by one\r
+               // as in the following example.\r
 \r
-// Add some object to the graph.\r
-graph.addObject(graph);\r
+               // Add some object to the graph.\r
+               graph.addObject(graph);\r
 \r
-// Add some class to the graph.\r
-graph.addClass(Utils.class);\r
+               // Add some class to the graph.\r
+               graph.addClass(Utils.class);\r
 \r
-// Produce bitmap image titled "JavaInspect.png" to the user Desktop\r
-// directory.\r
-graph.generateGraph("JavaInspect", true);\r
+               // Produce bitmap image titled "JavaInspect.png" to the user Desktop\r
+               // directory and keep intermediary GraphViz DOT file for reference.\r
+               graph.generateGraph("JavaInspect", true);\r
 </code>\r
 \r
 \r
@@ -99,6 +105,33 @@ Result:
 </pre>\r
 \r
 \r
+       <h2>Usage example 2</h2>\r
+\r
+<pre>\r
+<code>\r
+               // Recursively scan current directory for Java source code and attempt\r
+               // to detect class names from there to be added to the graph.\r
+               graph.addProject(".");\r
+\r
+               // Blacklist example classes from being shown on the graph\r
+               graph.getFilter().blacklistClassPattern(\r
+                               "eu.svjatoslav.inspector.java.structure.example.*");\r
+\r
+               // do not show single classes with no relationships on the graph\r
+               graph.hideOrphanedClasses();\r
+\r
+               // Produce bitmap image titled "JavaInspect full project.png" to the\r
+               // user Desktop directory.\r
+               graph.generateGraph("JavaInspect full project");\r
+</code>\r
+\r
+\r
+Result:\r
+    Generated PNG image: <a href="JavaInspect full project.png">JavaInspect full project.png</a>\r
+\r
+</pre>\r
+\r
+\r
 \r
        <h2>Embedding JavaInspect in your project</h2>\r
        <pre>\r
@@ -112,7 +145,7 @@ Declare JavaInspect as dependency:
         &lt;dependency&gt;\r
             &lt;groupId&gt;eu.svjatoslav&lt;/groupId&gt;\r
             &lt;artifactId&gt;javainspect&lt;/artifactId&gt;\r
-            &lt;version&gt;1.1&lt;/version&gt;\r
+            &lt;version&gt;1.2&lt;/version&gt;\r
         &lt;/dependency&gt;\r
  \r
     &lt;/dependencies&gt;\r
diff --git a/src/main/java/eu/svjatoslav/inspector/java/methods/package-info.java b/src/main/java/eu/svjatoslav/inspector/java/methods/package-info.java
new file mode 100644 (file)
index 0000000..81febf5
--- /dev/null
@@ -0,0 +1,13 @@
+package eu.svjatoslav.inspector.java.methods;
+
+/**
+ * This package contains quickly hacked together Java language parser.
+ * Goal is to start visualizing method call references and other things
+ * which are not easily readable at runtime via reflection.
+ * 
+ * Work in progress...
+ * 
+ * Currently in is useful just for detecting class names and packages.
+ * 
+ */
+
index 55ef66c..c0be547 100644 (file)
@@ -12,9 +12,11 @@ package eu.svjatoslav.inspector.java.structure;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.SortedSet;
+import java.util.TreeMap;
+import java.util.TreeSet;
 
 /**
  * Describes single class instance
@@ -25,9 +27,9 @@ public class ClassDescriptor implements GraphElement {
 
        public final String fullyQualifiedName;
 
-       Map<String, FieldDescriptor> nameToFieldMap = new HashMap<String, FieldDescriptor>();
+       Map<String, FieldDescriptor> nameToFieldMap = new TreeMap<String, FieldDescriptor>();
 
-       public List<MethodDescriptor> methods = new ArrayList<MethodDescriptor>();
+       public SortedSet<MethodDescriptor> methods = new TreeSet<MethodDescriptor>();
 
        /**
         * Incoming arrows will have this color.
@@ -297,7 +299,7 @@ public class ClassDescriptor implements GraphElement {
        public String getGraphId() {
                final String result = "class_"
                                + fullyQualifiedName.replace('.', '_').replace(";", "")
-                                               .replace("[L", "").replace('$', '_');
+                               .replace("[L", "").replace('$', '_');
                return result;
        }
 
@@ -362,11 +364,11 @@ public class ClassDescriptor implements GraphElement {
 
                for (final MethodDescriptor methodDescriptor : methods)
                        outgoingVisibleReferencesCount += methodDescriptor
-                                       .getOutsideVisibleReferencesCount();
+                       .getOutsideVisibleReferencesCount();
 
                for (final FieldDescriptor fieldDescriptor : nameToFieldMap.values())
                        outgoingVisibleReferencesCount += fieldDescriptor
-                                       .getOutsideVisibleReferencesCount();
+                       .getOutsideVisibleReferencesCount();
 
                final int totalReferencesCount = outgoingVisibleReferencesCount
                                + incomingReferencesCount;
@@ -407,7 +409,7 @@ public class ClassDescriptor implements GraphElement {
                if (Utils.isSystemPackage(fullyQualifiedName))
                        return false;
 
-               if (!classGraph.filter.isClassShown(fullyQualifiedName))
+               if (!classGraph.getFilter().isClassShown(fullyQualifiedName))
                        return false;
 
                return isShown;
index 6155876..7bae6f3 100644 (file)
@@ -35,19 +35,33 @@ public class ClassGraph {
         */
        Map<String, ClassDescriptor> nameToClassMap = new HashMap<String, ClassDescriptor>();
 
-       public Filter filter = new Filter();
+       private Filter filter = new Filter();
 
        public ClassGraph() {
        }
 
-       public ClassGraph(final Class<? extends Object> clazz) {
-               addClass(clazz);
+       /**
+        * @param classes
+        *            classes that shall be added to graph
+        */
+       public ClassGraph(final Class<? extends Object>... classes) {
+               for (final Class<? extends Object> clazz : classes)
+                       addClass(clazz);
        }
 
-       public ClassGraph(final Object root) {
-               addClass(root.getClass());
+       /**
+        * @param objects
+        *            objects that shall be added to graph
+        */
+       public ClassGraph(final Object... objects) {
+               for (Object object : objects)
+                       addClass(object.getClass());
        }
 
+       /**
+        * @param clazz
+        *            class that shall be added to graph
+        */
        public ClassDescriptor addClass(final Class<? extends Object> clazz) {
 
                if (clazz == null)
@@ -61,10 +75,19 @@ public class ClassGraph {
                return new ClassDescriptor(clazz, this);
        }
 
+       /**
+        * @param object
+        *            object that shall be added to graph
+        */
        public ClassDescriptor addObject(final Object object) {
                return addClass(object.getClass());
        }
 
+       /**
+        * @param path
+        *            path to recursively scan for java source code could be
+        *            relative to current project or absolute
+        */
        public void addProject(final String path) {
                final ProjectScanner projectScanner = new ProjectScanner(new File(path));
                for (final Clazz clazz : projectScanner.getAllClasses())
@@ -78,17 +101,34 @@ public class ClassGraph {
                        }
        }
 
-       public void generateGraph(final String graphName) {
-               generateGraph(graphName, false);
+       /**
+        * @param resultFileName
+        *            file name for the generated graph. Existing file with the same
+        *            name will be overwritten.
+        */
+       public void generateGraph(final String resultFileName) {
+               generateGraph(resultFileName, false);
        }
 
-       public void generateGraph(final String graphName, final boolean keepDotFile) {
+       /**
+        * @param resultFileName
+        *            file name for the generated graph. File extension will be
+        *            added automatically. Existing file with the same name will be
+        *            overwritten.
+        * 
+        * @param keepDotFile
+        *            if set to <code>true</code> then intermediary GraphViz DOT
+        *            file will be kept.
+        */
+
+       public void generateGraph(final String resultFileName,
+                       final boolean keepDotFile) {
 
                final String desktopPath = CommonPathResolver.getDesktopDirectory()
                                .getAbsolutePath() + "/";
 
-               final String dotFilePath = desktopPath + graphName + ".dot";
-               final String imageFilePath = desktopPath + graphName + ".png";
+               final String dotFilePath = desktopPath + resultFileName + ".dot";
+               final String imageFilePath = desktopPath + resultFileName + ".png";
 
                System.out.println("Dot file path:" + dotFilePath);
 
@@ -101,8 +141,8 @@ public class ClassGraph {
                        // execute GraphViz to visualize graph
                        try {
                                Runtime.getRuntime()
-                                               .exec(new String[] { "dot", "-Tpng", dotFilePath, "-o",
-                                                               imageFilePath }).waitFor();
+                               .exec(new String[] { "dot", "-Tpng", dotFilePath, "-o",
+                                               imageFilePath }).waitFor();
                        } catch (final InterruptedException e) {
                        } finally {
                        }
@@ -133,11 +173,22 @@ public class ClassGraph {
                return resultStr;
        }
 
-       public void hideClassesWithoutReferences() {
+       /**
+        * Hide orphaned class that have no references
+        */
+       public void hideOrphanedClasses() {
 
                for (final ClassDescriptor classDescriptor : nameToClassMap.values())
                        classDescriptor.hideClassIfNoReferences();
 
        }
 
+       public Filter getFilter() {
+               return filter;
+       }
+
+       public void setFilter(Filter filter) {
+               this.filter = filter;
+       }
+
 }
index e4611aa..42ecfcf 100644 (file)
@@ -17,6 +17,10 @@ import java.util.List;
 
 public class FieldDescriptor implements GraphElement {
 
+       /**
+        * This class corresponds to single field within a java class.
+        */
+
        public String name;
        public ClassDescriptor type;
        private ClassDescriptor parent;
index 72590f3..0dba93e 100644 (file)
@@ -7,21 +7,35 @@ import eu.svjatoslav.commons.string.WildCardMatcher;
 
 public class Filter {
 
-       private static final List<String> blacklistedClasses = new ArrayList<String>();
-
-       private static final List<String> whitelistedClasses = new ArrayList<String>();
+       /**
+        * This class implements filter of classes that will be included or excluded
+        * from resulting graph.
+        * 
+        * Filtering is done by lists of whitelist and blacklist patterns using
+        * wildcards.
+        * 
+        * Filtering logic is such that if at least single whitelist entry is
+        * defined then every class that is not whitelisted is automatically
+        * excluded from graph.
+        * 
+        * Otherwise every class in included in graph that is not blacklisted.
+        */
+
+       private static final List<String> blacklistClassPatterns = new ArrayList<String>();
+
+       private static final List<String> whitelistClassPatterns = new ArrayList<String>();
 
        public void blacklistClassPattern(final String pattern) {
-               blacklistedClasses.add(pattern);
+               blacklistClassPatterns.add(pattern);
        }
 
        public boolean isClassShown(final String className) {
-               for (final String pattern : blacklistedClasses)
+               for (final String pattern : blacklistClassPatterns)
                        if (WildCardMatcher.match(className, pattern))
                                return false;
 
-               if (!whitelistedClasses.isEmpty()) {
-                       for (final String pattern : whitelistedClasses)
+               if (!whitelistClassPatterns.isEmpty()) {
+                       for (final String pattern : whitelistClassPatterns)
                                if (WildCardMatcher.match(className, pattern))
                                        return true;
                        return false;
@@ -31,7 +45,7 @@ public class Filter {
        }
 
        public void whitelistClassPattern(final String pattern) {
-               whitelistedClasses.add(pattern);
+               whitelistClassPatterns.add(pattern);
        }
 
 }
index c3aeaf9..5e03b6b 100644 (file)
@@ -15,7 +15,12 @@ import java.lang.reflect.Type;
 import java.util.ArrayList;
 import java.util.List;
 
-public class MethodDescriptor implements GraphElement {
+public class MethodDescriptor implements GraphElement,
+Comparable<MethodDescriptor> {
+
+       /**
+        * This class corresponds to single method within a java class.
+        */
 
        public String name;
        public ClassDescriptor returnType;
@@ -149,4 +154,14 @@ public class MethodDescriptor implements GraphElement {
                return true;
        }
 
+       @Override
+       public int compareTo(MethodDescriptor o) {
+
+               int nameComparisonResult = name.compareTo(o.name);
+               if (nameComparisonResult != 0)
+                       return nameComparisonResult;
+
+               return toString().compareTo(o.toString());
+       }
+
 }
index f993e22..560c172 100644 (file)
@@ -18,9 +18,44 @@ public class RenderJavaInspect {
 
        public static void main(final String[] args) throws FileNotFoundException {
 
+               handpickClassesExample();
+
+               fullProjectExample();
+
+       }
+
+       private static void fullProjectExample() {
+               final ClassGraph graph = new ClassGraph();
+
+               // Recursively scan current directory for Java source code and attempt
+               // to detect class names from there to be added to the graph.
+               graph.addProject(".");
+
+               // Blacklist example classes from being shown on the graph
+               graph.getFilter().blacklistClassPattern(
+                               "eu.svjatoslav.inspector.java.structure.example.*");
+
+               // do not show single classes with no relationships on the graph
+               graph.hideOrphanedClasses();
+
+               // Produce bitmap image titled "JavaInspect full project.png" to the
+               // user Desktop directory.
+               graph.generateGraph("JavaInspect full project");
+       }
+
+       private static void handpickClassesExample() {
+               /*
+                * This example demonstrates generating of class graph from hand picked
+                * classes.
+                */
+
                // Create graph
                final ClassGraph graph = new ClassGraph();
 
+               // While classes and objects can be immediately passed to ClassGraph
+               // constructor as arguments, it is also possible to add then one by one
+               // as in the following example.
+
                // Add some object to the graph.
                graph.addObject(graph);
 
@@ -28,7 +63,7 @@ public class RenderJavaInspect {
                graph.addClass(Utils.class);
 
                // Produce bitmap image titled "JavaInspect.png" to the user Desktop
-               // directory.
+               // directory and keep intermediary GraphViz DOT file for reference.
                graph.generateGraph("JavaInspect", true);
        }
 }
diff --git a/src/main/java/eu/svjatoslav/inspector/xml/xsd/Main.java b/src/main/java/eu/svjatoslav/inspector/xml/xsd/Main.java
deleted file mode 100644 (file)
index 41e7de6..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-package eu.svjatoslav.inspector.xml.xsd;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.xml.sax.SAXException;
-
-public class Main {
-
-       public static void main(final String[] args) throws SAXException,
-                       IOException, ParserConfigurationException {
-
-               final XSD xsd = new XSD();
-
-               xsd.parse(new FileInputStream("/home/n0/Desktop/MeterSchema.xsd"));
-
-               System.out.println(xsd);
-
-       }
-
-}
diff --git a/src/main/java/eu/svjatoslav/inspector/xml/xsd/XSD.java b/src/main/java/eu/svjatoslav/inspector/xml/xsd/XSD.java
deleted file mode 100644 (file)
index 2b60bf4..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-package eu.svjatoslav.inspector.xml.xsd;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.xml.sax.SAXException;
-
-import eu.svjatoslav.commons.data.xml.XmlElement;
-import eu.svjatoslav.commons.data.xml.XmlHelper;
-
-public class XSD {
-
-       private static final String XMLNS_PREFIX = "xmlns:";
-       Map<String, String> namespaces = new HashMap<String, String>();
-
-       private void detectNamespaces(final XmlElement xsdSchema) {
-               for (final String attributeName : xsdSchema.getAttributeNames())
-
-                       if (attributeName.startsWith(XMLNS_PREFIX)) {
-                               final String nameSpaceName = attributeName
-                                               .substring(XMLNS_PREFIX.length());
-                               namespaces.put(nameSpaceName,
-                                               xsdSchema.getAttributeValue(attributeName));
-                       }
-       }
-
-       public void parse(final InputStream inputStream) throws SAXException,
-                       IOException, ParserConfigurationException {
-
-               final XmlElement xsdSchema = XmlHelper.parseXml(inputStream);
-
-               detectNamespaces(xsdSchema);
-
-               System.out.println(xsdSchema.toString());
-       }
-
-       @Override
-       public String toString() {
-               final StringBuffer result = new StringBuffer();
-
-               result.append("namespaces:\n");
-
-               for (final Map.Entry<String, String> entry : namespaces.entrySet())
-                       result.append("    " + entry.getKey() + " = " + entry.getValue()
-                                       + "\n");
-
-               return result.toString();
-       }
-
-}