X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=doc%2Findex.org;h=b831a37ee6c711f5c49268fd2fedf87794636ee0;hb=c505bd49b69970f4f8e1d4ae30933e1713d33d9b;hp=ed9bb044f466f97ad8132de755b53c5874f96a7b;hpb=d1edb3fd5c44e68e7f091124abe3f52f1298415b;p=javainspect.git diff --git a/doc/index.org b/doc/index.org index ed9bb04..b831a37 100644 --- a/doc/index.org +++ b/doc/index.org @@ -50,13 +50,9 @@ how to instuct Javainspect what to do. After discovering application structure and optionally filtering out unimportant parts, JavaInspect produces GraphViz dot file that -describes data to be visualized. Then launches GraphViz to generate +describes data to be visualized. Then launches [[https://graphviz.org/][GraphViz]] to generate bitmap graph in PNG or SVG format. -By default on your Desktop directory when operated in library mode or -current working directory when operated as standalone commandline -application. - Notes: + JavaInspect is developed and tested so far only on GNU/Linux. + See: [[https://github.com/pahen/madge][Madge - similar tool for JavaScript]] @@ -64,12 +60,13 @@ Notes: * Example graphs + A very simple example: - [[file:example.png][file:example.resized.png]] + file:example.png Graph legend: file:legend.png + + [[https://www3.svjatoslav.eu/projects/sixth-3d/graphs/][See example produced graphs]] for [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D - 3D engine project]]. * Usage @@ -144,20 +141,18 @@ Control code in general does the following: 1. Create graph object. 2. Java reflection/classloaders does not provide mechanism for discovering all classes under given package. Therefore you need to - declare at least some classes to be added to the graph by: - + Manually adding individual classes to the graph. - + and/or: Let GraphViz recursively scan and parse specified - directories with Java source code files to discover class names. - + For every class added to the graph, GraphViz will recursively - inspect it and add all referecned classes to the graph as well. + declare at least some classes to be added to the graph by manually + adding individual classes to the graph. For every class added to + the graph, GraphViz will recursively inspect it and add all + referecned classes to the graph as well. 3. Graphs easilly get very big and complex so optionally we filter - important code using classname wildcards patterns based blacklist - and/or whitelist. + important code using classname [[https://en.wikipedia.org/wiki/Glob_(programming)][glob]] patterns based blacklist and/or + whitelist. 4. Optionally we can tune some rendering parameters like: + Possibility to remove orphaned classes (classes with no references) from the graph. + Specify target directory for generated visualization - files. (Default is user desktop directory) + files. (Default is current directory) + Keep intermediate GraphViz dot file for later inspection. 5. Render graph. @@ -198,29 +193,7 @@ Result: - Generated DOT file: [[file:JavaInspect.dot][JavaInspect.dot]] - Generated PNG image: [[file:JavaInspect.png][JavaInspect.png]] -*** example 2: scan java code, apply filters -#+BEGIN_SRC java -// Create graph -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.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"); -#+END_SRC -Result: - - Generated PNG image: [[file:JavaInspect%20full%20project.png][JavaInspect full project.png]] - -*** example 3: GraphViz embedded in another project +*** example 2: GraphViz embedded in another project 1. Download project Sixth [[https://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz][code snapshot]]. 2. Inspect and run *DataGraph.java*. @@ -233,7 +206,7 @@ Declare JavaInspect as dependency: eu.svjatoslav javainspect - 1.6 + 1.7 ... @@ -298,8 +271,10 @@ LOT of cool ideas could be implemented. For intstance: - PlantUML (TODO) - Interactive 3D visualization (TODO) -- FEATURE: Replace internal java parser in package - eu.svjatoslav.inspector.java.methods with: https://javaparser.org/ +- FEATURE: Implement (or integrate existing java parser + https://javaparser.org/) to be able to produce code visualizations + based on source code (in addition to current reflection based + approach). - FEATURE: Integarte with [[http://plantuml.com/class-diagram][PlantUML]]. @@ -318,7 +293,7 @@ LOT of cool ideas could be implemented. For intstance: - FEATURE: Possibility to attach to JVM using JVM agent. -- FEATURE: Possibility to inspect graphs in 3D using [[http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/index.html][Sixth 3D engine]]. +- FEATURE: Possibility to inspect graphs in 3D using [[https://www3.svjatoslav.eu/projects/sixth-3d/][Sixth 3D engine]]. - FEATURE: Possibility to select classes/fields/values to be visualized in some graph query language. For greater flexibility in @@ -332,3 +307,6 @@ LOT of cool ideas could be implemented. For intstance: - FEATURE: Configurable maven plugin to generate graphs as part of the project build/release process. +* See also +Similar or alternative solutions: ++ http://www.class-visualizer.net/