X-Git-Url: http://www2.svjatoslav.eu/gitweb/?a=blobdiff_plain;f=doc%2Findex.html;h=dfef6db750eca7a9e3eb2fe069b00d8f7aedb850;hb=6df8ead7c2fdfe12e2b71d25edcab0abf4b93c89;hp=ea10bb8cf47d3aafbe5766b08ee04ded29401e60;hpb=c508bf97e017675b49df989b7f5a64cbd31d9aa3;p=javainspect.git diff --git a/doc/index.html b/doc/index.html index ea10bb8..dfef6db 100644 --- a/doc/index.html +++ b/doc/index.html @@ -3,23 +3,30 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> + + + JavaInspect - Utility to visualize java software - - - - + + - + + + + + @@ -143,103 +231,134 @@ for the JavaScript code in this tag.

Table of Contents

-
- +
  • Render graph.
  • -
    -

    3.1 example 1

    -
    +
    +

    5.2.1 Example 1: individually picked objects

    +

    This example demonstrates generating of class graph from hand picked -classes. +classes and visualizing GraphViz itself.

    - -
    // Create graph
    +
    +// 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 them one by
    -// one as in the following example.
    +// Add some random object to the graph. GraphViz will detect Class from
    +// the object.
    +graph.add(graph);
     
    -// Add some object to the graph.
    -graph.addObject(graph);
    +// Also add some random class to the graph.
    +graph.add(Utils.class);
     
    -// Add some class to the graph.
    -graph.addClass(Utils.class);
    +// Keep intermediary GraphViz DOT file for reference.
    +graph.setKeepDotFile(true);
     
     // Produce bitmap image titled "JavaInspect.png" to the user Desktop
    -// directory and keep intermediary GraphViz DOT file for reference.
    -graph.generateGraph("JavaInspect", true);
    -
    -
    - - +// directory +graph.generateGraph("JavaInspect"); -

    -Result: -

    - -
    +
    -
    -

    3.2 example 2

    -

    -Recursively scan current directory for Java source code and attempt to -detect class names from there to be added to the graph. +Note: if desired, more compact version of the above:

    -
    - -
    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");
    +
    new ClassGraph().add(randomObject, RandomClass.class)
    +                .setKeepDotFile(true).generateGraph("JavaInspect");
     
    + +

    Result:

    + +
    +

    5.2.2 Example 2: GraphViz embedded in another project

    +
    +
      +
    1. Download project Sixth code snapshot.
    2. +
    3. Inspect and run DataGraph.java.
    4. +
    +
    -
    -

    4 Embedding JavaInspect in your Maven project

    -
    +
    +

    5.2.3 Embedding JavaInspect in your Maven project

    +

    Declare JavaInspect as dependency:

    -
    <dependencies>
         ...
         <dependency>
             <groupId>eu.svjatoslav</groupId>
             <artifactId>javainspect</artifactId>
    -        <version>1.3</version>
    +        <version>1.7</version>
         </dependency>
         ...
     </dependencies>
    @@ -416,7 +681,6 @@ Declare JavaInspect as dependency:
     Add Maven repository to retrieve artifact from:
     

    -
    <repositories>
         ...
         <repository>
    @@ -430,67 +694,118 @@ Add Maven repository to retrieve artifact from:
     
    +
    +
    -
    -

    5 Requirements

    -
    +
    +

    6 TO DO

    +

    -GraphViz - shall be installed on the computer. +Note: Because this is side project (and I have many of them) I can +only contribute few hours per year at average. Any help is welcome. A +LOT of cool ideas could be implemented. For intstance:

    -

    -On Ubuntu/Debian use: -

    -
    -sudo apt-get install graphviz
    -
    -
    -
    -
    -

    6 TODO

    -
    • BUG: Should not hide references if there are too many of them to classes if referring classes are not visible anyway because of blacklist/whitelist rules. Basically reference counting should -exclude not visible classes. -
    • -
    • BUG: Current code is quite messy (because of lack of time) things -were implemented ad-hoc. Needs cleanup/refactoring for better -readability. -
    • -
    • FEATURE: add dark theme -
    • -
    • FEATURE: sort Class fields by alphabet -
    • -
    • FEATURE: visualize also concrete field values so it could be used as -ultra cool runtime logging framework -
    • -
    • FEATURE: possibility to visualize structure and data from JVM -snapshot -
    • -
    • FEATURE: possibility to attach to remote process to visualize -data/structure using JVM debug port and mechanism. -
    • -
    • FEATURE: possibility to attach to JVM using JVM agent -
    • -
    • FEATURE: possibility to script javainspect behavior -
    • -
    • FEATURE: possibility to select classes/fields/values to be -visualized in SQL like syntax -
    • -
    • FEATURE: configurable maven plugin to generate graphs as part of the -project build/release process -
    • +exclude not visible classes. + +
    • BUG: Orphaned class removal does not work always. There are many +bugs and corner cases to find and fix still.
    • + +
    • BUG: Code is not very readable. Document and refactor for better +maintainability.
    • + +
    • FEATURE: Create installable DEB package. +
        +
      • Submit it to some Debian developer for integration or become +Debian package maintainer.
      • +
    • + +
    • FEATURE: Make it modular. That is: central part, an application +model could be standalone and serializable. + +
        +
      • There could be multiple ways to acquire model: +
          +
        • By introspecting application via Java reflections (current mode +of operation).
        • +
        • By parsing java source. (unfinished)
        • +
      • + +
      • There could be ways to manipulate model: +
          +
        • Store/load/compare.
        • +
        • Trim uninteresting parts.
        • +
        • Highlight important parts.
        • +
      • + +
      • There could be multiple ways to render model: +
          +
        • PNG/SVG (currently implemented)
        • +
        • PlantUML (TODO)
        • +
        • Interactive 3D visualization (TODO)
        • +
      • +
    • + +
    • 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 PlantUML.
    • + +
    • FEATURE: Add dark theme for generated graphs.
    • + +
    • FEATURE: Sort Class fields by alphabet.
    • + +
    • FEATURE: Visualize also concrete field values so it could be used as +ultra cool runtime logging/debugging framework.
    • + +
    • FEATURE: Possibility to visualize structure and data from JVM +snapshot.
    • + +
    • FEATURE: Possibility to attach to remote process to visualize +data/structure using JVM debug port and mechanism.
    • + +
    • FEATURE: Possibility to attach to JVM using JVM agent.
    • + +
    • FEATURE: Possibility to inspect graphs in 3D using Sixth 3D engine.
    • + +
    • FEATURE: Possibility to select classes/fields/values to be +visualized in some graph query language. For greater flexibility in +comparison to currently supported glob syntax.
    • + +
    • FEATURE: Add option to control JavaInspect via JSON or XML config +file. For example different graphs for given project could be +defined once in plain text config, possibly with the aid of some +interactive utility. Then defined graphs could be updated as part of +project build or release process.
    • + +
    • FEATURE: Configurable maven plugin to generate graphs as part of the +project build/release process.
    • +
    +
    +
    +
    +

    7 See also

    +
    +

    +Similar or alternative solutions: +

    +

    Author: Svjatoslav Agejenko

    -

    Created: 2015-03-03 Tue 22:24

    -

    Emacs 24.4.1 (Org mode 8.2.10)

    -

    Validate

    +

    Created: 2022-02-20 Sun 20:27

    +

    Validate