Fixed broken links
[javainspect.git] / doc / index.html
1 <!doctype html>
2 <html lang="en">
3 <head>
4 <title>JavaInspect - Utility to visualize java software</title>
5 <!-- 2018-06-24 Sun 02:25 -->
6 <meta charset="utf-8">
7 <meta name="viewport" content="width=device-width, initial-scale=1">
8 <meta name="generator" content="Org-mode">
9 <meta name="author" content="Svjatoslav Agejenko">
10 <link href="https://bootswatch.com/3/darkly/bootstrap.min.css" rel="stylesheet">
11 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
12 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/js/bootstrap.min.js"></script>
13 <style type="text/css">
14 footer {background-color: #111 !important;}
15 pre {background-color: #111; color: #ccc;}
16 </style>
17 <style type="text/css">
18 /* org mode styles on top of twbs */
19
20 html {
21     position: relative;
22     min-height: 100%;
23 }
24
25 body {
26     font-size: 18px;
27     margin-bottom: 105px;
28 }
29
30 footer {
31     position: absolute;
32     bottom: 0;
33     width: 100%;
34     height: 101px;
35     background-color: #f5f5f5;
36 }
37
38 footer > div {
39     padding: 10px;
40 }
41
42 footer p {
43     margin: 0 0 5px;
44     text-align: center;
45     font-size: 16px;
46 }
47
48 #table-of-contents {
49     margin-top: 20px;
50     margin-bottom: 20px;
51 }
52
53 blockquote p {
54     font-size: 18px;
55 }
56
57 pre {
58     font-size: 16px;
59 }
60
61 .footpara {
62     display: inline-block;
63 }
64
65 figcaption {
66   font-size: 16px;
67   color: #666;
68   font-style: italic;
69   padding-bottom: 15px;
70 }
71
72 /* from twbs docs */
73
74 .bs-docs-sidebar.affix {
75     position: static;
76 }
77 @media (min-width: 768px) {
78     .bs-docs-sidebar {
79         padding-left: 20px;
80     }
81 }
82
83 /* All levels of nav */
84 .bs-docs-sidebar .nav > li > a {
85     display: block;
86     padding: 4px 20px;
87     font-size: 14px;
88     font-weight: 500;
89     color: #999;
90 }
91 .bs-docs-sidebar .nav > li > a:hover,
92 .bs-docs-sidebar .nav > li > a:focus {
93     padding-left: 19px;
94     color: #A1283B;
95     text-decoration: none;
96     background-color: transparent;
97     border-left: 1px solid #A1283B;
98 }
99 .bs-docs-sidebar .nav > .active > a,
100 .bs-docs-sidebar .nav > .active:hover > a,
101 .bs-docs-sidebar .nav > .active:focus > a {
102     padding-left: 18px;
103     font-weight: bold;
104     color: #A1283B;
105     background-color: transparent;
106     border-left: 2px solid #A1283B;
107 }
108
109 /* Nav: second level (shown on .active) */
110 .bs-docs-sidebar .nav .nav {
111     display: none; /* Hide by default, but at >768px, show it */
112     padding-bottom: 10px;
113 }
114 .bs-docs-sidebar .nav .nav > li > a {
115     padding-top: 1px;
116     padding-bottom: 1px;
117     padding-left: 30px;
118     font-size: 12px;
119     font-weight: normal;
120 }
121 .bs-docs-sidebar .nav .nav > li > a:hover,
122 .bs-docs-sidebar .nav .nav > li > a:focus {
123     padding-left: 29px;
124 }
125 .bs-docs-sidebar .nav .nav > .active > a,
126 .bs-docs-sidebar .nav .nav > .active:hover > a,
127 .bs-docs-sidebar .nav .nav > .active:focus > a {
128     padding-left: 28px;
129     font-weight: 500;
130 }
131
132 /* Nav: third level (shown on .active) */
133 .bs-docs-sidebar .nav .nav .nav {
134     padding-bottom: 10px;
135 }
136 .bs-docs-sidebar .nav .nav .nav > li > a {
137     padding-top: 1px;
138     padding-bottom: 1px;
139     padding-left: 40px;
140     font-size: 12px;
141     font-weight: normal;
142 }
143 .bs-docs-sidebar .nav .nav .nav > li > a:hover,
144 .bs-docs-sidebar .nav .nav .nav > li > a:focus {
145     padding-left: 39px;
146 }
147 .bs-docs-sidebar .nav .nav .nav > .active > a,
148 .bs-docs-sidebar .nav .nav .nav > .active:hover > a,
149 .bs-docs-sidebar .nav .nav .nav > .active:focus > a {
150     padding-left: 38px;
151     font-weight: 500;
152 }
153
154 /* Show and affix the side nav when space allows it */
155 @media (min-width: 992px) {
156     .bs-docs-sidebar .nav > .active > ul {
157         display: block;
158     }
159     /* Widen the fixed sidebar */
160     .bs-docs-sidebar.affix,
161     .bs-docs-sidebar.affix-bottom {
162         width: 213px;
163     }
164     .bs-docs-sidebar.affix {
165         position: fixed; /* Undo the static from mobile first approach */
166         top: 20px;
167     }
168     .bs-docs-sidebar.affix-bottom {
169         position: absolute; /* Undo the static from mobile first approach */
170     }
171     .bs-docs-sidebar.affix .bs-docs-sidenav,.bs-docs-sidebar.affix-bottom .bs-docs-sidenav {
172         margin-top: 0;
173         margin-bottom: 0
174     }
175 }
176 @media (min-width: 1200px) {
177     /* Widen the fixed sidebar again */
178     .bs-docs-sidebar.affix-bottom,
179     .bs-docs-sidebar.affix {
180         width: 263px;
181     }
182 }
183 </style>
184 <script type="text/javascript">
185 $(function() {
186     'use strict';
187
188     $('.bs-docs-sidebar li').first().addClass('active');
189
190     $(document.body).scrollspy({target: '.bs-docs-sidebar'});
191
192     $('.bs-docs-sidebar').affix();
193 });
194 </script>
195 </head>
196 <body>
197 <div id="content" class="container">
198 <div class="row"><div class="col-md-9"><h1 class="title">JavaInspect - Utility to visualize java software</h1>
199
200 <div id="outline-container-sec-1" class="outline-2">
201 <h2 id="sec-1"><span class="section-number-2">1</span> General</h2>
202 <div class="outline-text-2" id="text-1">
203 <ul class="org-ul">
204 <li>This program is free software: you can redistribute it and/or modify
205 it under the terms of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public License</a> as
206 published by the Free Software Foundation, either version 3 of the
207 License, or (at your option) any later version.
208 </li>
209
210 <li>Program authors:
211 <ul class="org-ul">
212 <li>Svjatoslav Agejenko
213 <ul class="org-ul">
214 <li>Homepage: <a href="http://svjatoslav.eu">http://svjatoslav.eu</a>
215 </li>
216 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
217 </li>
218 <li><a href="http://www.svjatoslav.eu/projects/">Other software projects hosted at svjatoslav.eu</a>
219 </li>
220 </ul>
221 </li>
222
223 <li>Tony Bargnesi
224 <ul class="org-ul">
225 <li>GitHub fork for the project:
226 <a href="https://github.com/abargnesi/javainspect">https://github.com/abargnesi/javainspect</a>
227 </li>
228 </ul>
229 </li>
230 </ul>
231 </li>
232 </ul>
233 </div>
234
235 <div id="outline-container-sec-1-1" class="outline-3">
236 <h3 id="sec-1-1"><span class="section-number-3">1.1</span> Source code</h3>
237 <div class="outline-text-3" id="text-1-1">
238 <ul class="org-ul">
239 <li><a href="http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=snapshot;h=HEAD;sf=tgz">Download latest snapshot in TAR GZ format</a>
240 </li>
241
242 <li><a href="http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=summary">Browse Git repository online</a>
243 </li>
244
245 <li>Clone Git repository using command:
246 <pre class="example">
247 git clone http://www2.svjatoslav.eu/git/javainspect.git
248 </pre>
249 </li>
250 </ul>
251 </div>
252 </div>
253 </div>
254
255 <div id="outline-container-sec-2" class="outline-2">
256 <h2 id="sec-2"><span class="section-number-2">2</span> Goal and operating principle</h2>
257 <div class="outline-text-2" id="text-2">
258 <p>
259 Goal: simplify/speed up understanding the computer program code by
260 automatically visualizing its structure.
261 </p>
262
263 <p>
264 <a href="http://www3.svjatoslav.eu/projects/sixth-3d/graphs/">See example produced graphs</a> for <a href="http://www3.svjatoslav.eu/projects/sixth-3d/">Sixth 3D - 3D engine project</a>.
265 </p>
266
267 <p>
268 JavaInspect can be used as a <a href="#sec-4-1">standalone commandline utility</a> as well as
269 <a href="#sec-4-2">java library</a>. JavaInspect uses primarily Java built-in reflection to
270 discover and visualize any part of Java program.
271 </p>
272
273 <p>
274 JavaInspect currently has no GUI, configuration files, embedded
275 scripting support, direct Maven or Ant integration. See <a href="#sec-4">usage</a> to learn
276 how to instuct Javainspect what to do.
277 </p>
278
279 <p>
280 After discovering application structure and optionally filtering out
281 unimportant parts, JavaInspect produces GraphViz dot file that
282 describes data to be visualized. Then launches GraphViz to generate
283 bitmap graph in PNG or SVG format.
284 </p>
285
286 <p>
287 By default on your Desktop directory when operated in library mode or
288 current working directory when operated as standalone commandline
289 application.
290 </p>
291
292 <p>
293 Notes:
294 </p>
295 <ul class="org-ul">
296 <li>JavaInspect is developed and tested so far only on GNU/Linux.
297 </li>
298 <li>See: <a href="https://github.com/pahen/madge">Madge - similar tool for JavaScript</a>
299 </li>
300 </ul>
301 </div>
302 </div>
303
304 <div id="outline-container-sec-3" class="outline-2">
305 <h2 id="sec-3"><span class="section-number-2">3</span> Example graphs</h2>
306 <div class="outline-text-2" id="text-3">
307 <ul class="org-ul">
308 <li>A very simple example:
309
310
311 <figure>
312 <p><a href="example.png"><img src="example.resized.png" class="img-responsive" alt="example.resized.png"></a>
313 </p>
314 </figure>
315
316 <p>
317 Graph legend:
318 </p>
319
320
321 <figure>
322 <p><img src="legend.png" class="img-responsive" alt="legend.png">
323 </p>
324 </figure>
325 </li>
326
327 <li><a href="http://www3.svjatoslav.eu/projects/sixth-3d/graphs/">See example produced graphs</a> for <a href="http://www3.svjatoslav.eu/projects/sixth-3d/">Sixth 3D - 3D engine project</a>.
328 </li>
329 </ul>
330 </div>
331 </div>
332
333 <div id="outline-container-sec-4" class="outline-2">
334 <h2 id="sec-4"><a id="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522" name="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522"></a><span class="section-number-2">4</span> Usage</h2>
335 <div class="outline-text-2" id="text-4">
336 <p>
337 JavaInspect can be controlled in 2 different ways:
338 </p>
339 <ul class="org-ul">
340 <li><a href="#sec-4-1">as standalone commandline utility</a>
341 </li>
342 <li><a href="#sec-4-2">as embedded Java library via Java API</a>
343 </li>
344 </ul>
345 </div>
346
347 <div id="outline-container-sec-4-1" class="outline-3">
348 <h3 id="sec-4-1"><a id="ID-acf1896a-74b4-4914-acf6-a77075e07f25" name="ID-acf1896a-74b4-4914-acf6-a77075e07f25"></a><span class="section-number-3">4.1</span> usage as commandline utility</h3>
349 <div class="outline-text-3" id="text-4-1">
350 <p>
351 To enable commandline support, (study and) execute script:
352 </p>
353 <pre class="example">
354 commandline launcher/install
355 </pre>
356
357 <p>
358 Warning: It was tested only on Debian Stretch linux.
359 </p>
360
361 <p>
362 Available commandline arguments:
363 </p>
364 <p class="verse">
365 -j (existing files)&#x2026;<br >
366 &#xa0;&#xa0;&#xa0;&#xa0;JAR file(s) to render.<br >
367 <br >
368 -n (mandatory, string)<br >
369 &#xa0;&#xa0;&#xa0;&#xa0;Graph name.<br >
370 <br >
371 &#x2013;debug<br >
372 &#xa0;&#xa0;&#xa0;&#xa0;Show debug info.<br >
373 <br >
374 -k<br >
375 &#xa0;&#xa0;&#xa0;&#xa0;Keep dot file.<br >
376 <br >
377 -h<br >
378 &#xa0;&#xa0;&#xa0;&#xa0;Hide orphaned classes.<br >
379 <br >
380 -w (one to many strings)&#x2026;<br >
381 &#xa0;&#xa0;&#xa0;&#xa0;Whitelist glob(s).<br >
382 <br >
383 -b (one to many strings)&#x2026;<br >
384 &#xa0;&#xa0;&#xa0;&#xa0;Blacklist glob(s).<br >
385 <br >
386 -d (existingdirectory)<br >
387 &#xa0;&#xa0;&#xa0;&#xa0;Target directory. Default is current directory.<br >
388 <br >
389 -t (options: png, svg)<br >
390 &#xa0;&#xa0;&#xa0;&#xa0;Target image type. Default is: svg.<br >
391 </p>
392 </div>
393 </div>
394 <div id="outline-container-sec-4-2" class="outline-3">
395 <h3 id="sec-4-2"><a id="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee" name="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee"></a><span class="section-number-3">4.2</span> usage via Java API</h3>
396 <div class="outline-text-3" id="text-4-2">
397 <p>
398 Requires that classes to be visualised are available in the classpath.
399 </p>
400
401 <p>
402 To get JavaInspect into same classpath with your projecs I so far came
403 up with 2 solutions:
404 </p>
405
406 <ol class="org-ol">
407 <li>Add JavaInspect library in your project as a dependency.
408 </li>
409
410 <li>Create new Java project for the purpose visualizing your other
411 projects and include JavaInspect and your projecs binary artifacts
412 (Jar's) into new project classpath. Built binary Jar's (with no
413 source code) are sufficient because JavaInspect operates via
414 reflection.
415 </li>
416 </ol>
417
418 <p>
419 Simple Java based control/configuration code needs to be written for
420 each project. I usually put such code into directories devoted for
421 JUnit tests. Because it needs not to be compiled/embedded into final
422 product or project artifact I'm just willing to visualize.
423 </p>
424
425 <p>
426 Control code in general does the following:
427 </p>
428 <ol class="org-ol">
429 <li>Create graph object.
430 </li>
431 <li>Java reflection/classloaders does not provide mechanism for
432 discovering all classes under given package. Therefore you need to
433 declare at least some classes to be added to the graph by:
434 <ul class="org-ul">
435 <li>Manually adding individual classes to the graph.
436 </li>
437 <li>and/or: Let GraphViz recursively scan and parse specified
438 directories with Java source code files to discover class names.
439 </li>
440 <li>For every class added to the graph, GraphViz will recursively
441 inspect it and add all referecned classes to the graph as well.
442 </li>
443 </ul>
444 </li>
445 <li>Graphs easilly get very big and complex so optionally we filter
446 important code using classname wildcards patterns based blacklist
447 and/or whitelist.
448 </li>
449 <li>Optionally we can tune some rendering parameters like:
450 <ul class="org-ul">
451 <li>Possibility to remove orphaned classes (classes with no
452 references) from the graph.
453 </li>
454 <li>Specify target directory for generated visualization
455 files. (Default is user desktop directory)
456 </li>
457 <li>Keep intermediate GraphViz dot file for later inspection.
458 </li>
459 </ul>
460 </li>
461 <li>Render graph.
462 </li>
463 </ol>
464 </div>
465
466
467 <div id="outline-container-sec-4-2-1" class="outline-4">
468 <h4 id="sec-4-2-1"><span class="section-number-4">4.2.1</span> example 1: individually picked objects</h4>
469 <div class="outline-text-4" id="text-4-2-1">
470 <p>
471 This example demonstrates generating of class graph from hand picked
472 classes and visualizing GraphViz itself.
473 </p>
474
475 <div class="org-src-container">
476
477 <pre class="src src-java">// Create graph
478 final ClassGraph graph = new ClassGraph();
479
480 // Add some random object to the graph. GraphViz will detect Class from
481 // the object.
482 graph.add(graph);
483
484 // Also add some random class to the graph.
485 graph.add(Utils.class);
486
487 // Keep intermediary GraphViz DOT file for reference.
488 graph.setKeepDotFile(true);
489
490 // Produce bitmap image titled "JavaInspect.png" to the user Desktop
491 // directory
492 graph.generateGraph("JavaInspect");
493 </pre>
494 </div>
495
496 <p>
497 Note: if desired, more compact version of the above:
498 </p>
499 <div class="org-src-container">
500
501 <pre class="src src-java">new ClassGraph().add(randomObject, RandomClass.class)
502                 .setKeepDotFile(true).generateGraph("JavaInspect");
503 </pre>
504 </div>
505
506
507 <p>
508 Result:
509 </p>
510 <ul class="org-ul">
511 <li>Generated DOT file: <a href="JavaInspect.dot">JavaInspect.dot</a>
512 </li>
513 <li>Generated PNG image: <a href="JavaInspect.png">JavaInspect.png</a>
514 </li>
515 </ul>
516 </div>
517 </div>
518
519 <div id="outline-container-sec-4-2-2" class="outline-4">
520 <h4 id="sec-4-2-2"><span class="section-number-4">4.2.2</span> example 2: scan java code, apply filters</h4>
521 <div class="outline-text-4" id="text-4-2-2">
522 <div class="org-src-container">
523
524 <pre class="src src-java">// Create graph
525 final ClassGraph graph = new ClassGraph();
526
527 // Recursively scan current directory for Java source code and attempt
528 // to detect class names from there to be added to the graph.
529 graph.addProject(".");
530
531 // Blacklist example classes from being shown on the graph
532 graph.blacklistClassPattern("eu.svjatoslav.inspector.java.structure.example.*");
533
534 // do not show single classes with no relationships on the graph
535 graph.hideOrphanedClasses();
536
537 // Produce bitmap image titled "JavaInspect full project.png" to the
538 // user Desktop directory.
539 graph.generateGraph("JavaInspect full project");
540 </pre>
541 </div>
542 <p>
543 Result:
544 </p>
545 <ul class="org-ul">
546 <li>Generated PNG image: <a href="JavaInspect%20full%20project.png">JavaInspect full project.png</a>
547 </li>
548 </ul>
549 </div>
550 </div>
551
552 <div id="outline-container-sec-4-2-3" class="outline-4">
553 <h4 id="sec-4-2-3"><span class="section-number-4">4.2.3</span> example 3: GraphViz embedded in another project</h4>
554 <div class="outline-text-4" id="text-4-2-3">
555 <ol class="org-ol">
556 <li>Download project Sixth <a href="http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz">code snapshot</a>.
557 </li>
558 <li>Inspect and run *DataGraph.java*.
559 </li>
560 </ol>
561 </div>
562 </div>
563
564 <div id="outline-container-sec-4-2-4" class="outline-4">
565 <h4 id="sec-4-2-4"><span class="section-number-4">4.2.4</span> Embedding JavaInspect in your Maven project</h4>
566 <div class="outline-text-4" id="text-4-2-4">
567 <p>
568 Declare JavaInspect as dependency:
569 </p>
570 <div class="org-src-container">
571
572 <pre class="src src-xml">&lt;dependencies&gt;
573     ...
574     &lt;dependency&gt;
575         &lt;groupId&gt;eu.svjatoslav&lt;/groupId&gt;
576         &lt;artifactId&gt;javainspect&lt;/artifactId&gt;
577         &lt;version&gt;1.6&lt;/version&gt;
578     &lt;/dependency&gt;
579     ...
580 &lt;/dependencies&gt;
581 </pre>
582 </div>
583
584
585 <p>
586 Add Maven repository to retrieve artifact from:
587 </p>
588 <div class="org-src-container">
589
590 <pre class="src src-xml">&lt;repositories&gt;
591     ...
592     &lt;repository&gt;
593         &lt;id&gt;svjatoslav.eu&lt;/id&gt;
594         &lt;name&gt;Svjatoslav repository&lt;/name&gt;
595         &lt;url&gt;http://www2.svjatoslav.eu/maven/&lt;/url&gt;
596     &lt;/repository&gt;
597     ...
598 &lt;/repositories&gt;
599 </pre>
600 </div>
601 </div>
602 </div>
603 </div>
604 </div>
605
606 <div id="outline-container-sec-5" class="outline-2">
607 <h2 id="sec-5"><span class="section-number-2">5</span> Requirements</h2>
608 <div class="outline-text-2" id="text-5">
609 <p>
610 <a href="http://www.graphviz.org/">GraphViz</a> - shall be installed on the computer.
611 </p>
612
613 <p>
614 On Ubuntu/Debian use:
615 </p>
616 <div class="org-src-container">
617
618 <pre class="src src-sh">sudo apt-get install graphviz
619 </pre>
620 </div>
621 </div>
622 </div>
623 <div id="outline-container-sec-6" class="outline-2">
624 <h2 id="sec-6"><span class="section-number-2">6</span> TO DO</h2>
625 <div class="outline-text-2" id="text-6">
626 <p>
627 Note: Because this is side project (and I have many of them) I can
628 only contribute few hours per year at average. Any help is welcome.  A
629 LOT of cool ideas could be implemented. For intstance:
630 </p>
631
632 <ul class="org-ul">
633 <li>BUG: Should not hide references if there are too many of them to
634 classes if referring classes are not visible anyway because of
635 blacklist/whitelist rules. Basically reference counting should
636 exclude not visible classes.
637 </li>
638
639 <li>BUG: Orphaned class removal does not work always. There are many
640 bugs and corner cases to find and fix still.
641 </li>
642
643 <li>BUG: Code is not very readable. Document and refactor for better
644 maintainability.
645 </li>
646
647 <li>FEATURE: Create installable DEB package.
648 <ul class="org-ul">
649 <li>Submit it to some Debian developer for integration or become
650 Debian package maintainer.
651 </li>
652 </ul>
653 </li>
654
655 <li>FEATURE: Make it modular. That is: central part, an application
656 model could be standalone and serializable.
657
658 <ul class="org-ul">
659 <li>There could be multiple ways to acquire model:
660 <ul class="org-ul">
661 <li>By introspecting application via Java reflections (current mode
662 of operation).
663 </li>
664 <li>By parsing java source. (unfinished)
665 </li>
666 </ul>
667 </li>
668
669 <li>There could be ways to manipulate model:
670 <ul class="org-ul">
671 <li>Store/load/compare.
672 </li>
673 <li>Trim uninteresting parts.
674 </li>
675 <li>Highlight important parts.
676 </li>
677 </ul>
678 </li>
679
680 <li>There could be multiple ways to render model:
681 <ul class="org-ul">
682 <li>PNG/SVG (currently implemented)
683 </li>
684 <li>PlantUML (TODO)
685 </li>
686 <li>Interactive 3D visualization (TODO)
687 </li>
688 </ul>
689 </li>
690 </ul>
691 </li>
692
693 <li>FEATURE: Replace internal java parser in package
694 eu.svjatoslav.inspector.java.methods with: <a href="https://javaparser.org/">https://javaparser.org/</a>
695 </li>
696
697 <li>FEATURE: Integarte with <a href="http://plantuml.com/class-diagram">PlantUML</a>.
698 </li>
699
700 <li>FEATURE: Add dark theme for generated graphs.
701 </li>
702
703 <li>FEATURE: Sort Class fields by alphabet.
704 </li>
705
706 <li>FEATURE: Visualize also concrete field values so it could be used as
707 ultra cool runtime logging/debugging framework.
708 </li>
709
710 <li>FEATURE: Possibility to visualize structure and data from JVM
711 snapshot.
712 </li>
713
714 <li>FEATURE: Possibility to attach to remote process to visualize
715 data/structure using JVM debug port and mechanism.
716 </li>
717
718 <li>FEATURE: Possibility to attach to JVM using JVM agent.
719 </li>
720
721 <li>FEATURE: Possibility to inspect graphs in 3D using <a href="http://www2.svjatoslav.eu/gitbrowse/sixth-3d/doc/index.html">Sixth 3D engine</a>.
722 </li>
723
724 <li>FEATURE: Possibility to select classes/fields/values to be
725 visualized in some graph query language. For greater flexibility in
726 comparison to currently supported glob syntax.
727 </li>
728
729 <li>FEATURE: Add option to control JavaInspect via JSON or XML config
730 file. For example different graphs for given project could be
731 defined once in plain text config, possibly with the aid of some
732 interactive utility. Then defined graphs could be updated as part of
733 project build or release process.
734 </li>
735
736 <li>FEATURE: Configurable maven plugin to generate graphs as part of the
737 project build/release process.
738 </li>
739 </ul>
740 </div>
741 </div>
742 </div><div class="col-md-3"><nav id="table-of-contents">
743 <div id="text-table-of-contents" class="bs-docs-sidebar">
744 <ul class="nav">
745 <li><a href="#sec-1">1. General</a>
746 <ul class="nav">
747 <li><a href="#sec-1-1">1.1. Source code</a></li>
748 </ul>
749 </li>
750 <li><a href="#sec-2">2. Goal and operating principle</a></li>
751 <li><a href="#sec-3">3. Example graphs</a></li>
752 <li><a href="#sec-4">4. Usage</a>
753 <ul class="nav">
754 <li><a href="#sec-4-1">4.1. usage as commandline utility</a></li>
755 <li><a href="#sec-4-2">4.2. usage via Java API</a></li>
756 </ul>
757 </li>
758 <li><a href="#sec-5">5. Requirements</a></li>
759 <li><a href="#sec-6">6. TO DO</a></li>
760 </ul>
761 </div>
762 </nav>
763 </div></div></div>
764 <footer id="postamble" class="">
765 <div><p class="author">Author: Svjatoslav Agejenko</p>
766 <p class="date">Created: 2018-06-24 Sun 02:25</p>
767 <p class="creator"><a href="http://www.gnu.org/software/emacs/">Emacs</a> 25.1.1 (<a href="http://orgmode.org">Org-mode</a> 8.2.10)</p>
768 </div>
769 </footer>
770 </body>
771 </html>