Updated documentation.
[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-01-04 Thu 00:23 -->
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/4/darkly/bootstrap.min.css" rel="stylesheet">
11 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
12 <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.1/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 <hr >
200 <ul class="org-ul">
201 <li><a href="http://www2.svjatoslav.eu/gitweb/?p=javainspect.git;a=snapshot;h=HEAD;sf=tgz">download latest snapshot</a>
202 </li>
203
204 <li>This program is free software; you can redistribute it and/or modify
205 it under the terms of version 3 of the <a href="https://www.gnu.org/licenses/lgpl.html">GNU Lesser General Public
206 License</a> or later as published by the Free Software Foundation.
207 </li>
208
209 <li>Program authors:
210 <ul class="org-ul">
211 <li>Svjatoslav Agejenko
212 <ul class="org-ul">
213 <li>Homepage: <a href="http://svjatoslav.eu">http://svjatoslav.eu</a>
214 </li>
215 <li>Email: <a href="mailto://svjatoslav@svjatoslav.eu">mailto://svjatoslav@svjatoslav.eu</a>
216 </li>
217 </ul>
218 </li>
219
220 <li>Tony Bargnesi
221 <ul class="org-ul">
222 <li>GitHub fork for the project:
223 <a href="https://github.com/abargnesi/javainspect">https://github.com/abargnesi/javainspect</a>
224 </li>
225 </ul>
226 </li>
227 </ul>
228 </li>
229
230 <li><a href="http://www.svjatoslav.eu/programs.jsp">other applications hosted at svjatoslav.eu</a>
231 </li>
232 </ul>
233
234 <div id="outline-container-sec-1" class="outline-2">
235 <h2 id="sec-1"><span class="section-number-2">1</span> General</h2>
236 <div class="outline-text-2" id="text-1">
237 <p>
238 Goal: simplify/speed up understanding the computer program code by
239 automatically visualizing its structure.
240 </p>
241
242 <p>
243 <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>.
244 </p>
245
246 <p>
247 JavaInspect can be used as a <a href="#sec-3-1">standalone commandline utility</a> as well as
248 <a href="#sec-3-2">java library</a>. JavaInspect uses primarily Java built-in reflection to
249 discover and visualize any part of Java program.
250 </p>
251
252 <p>
253 JavaInspect currently has no GUI, configuration files, embedded
254 scripting support, direct Maven or Ant integration. See <a href="#sec-3">usage</a> to learn
255 how to instuct Javainspect what to do.
256 </p>
257
258 <p>
259 After discovering application structure and optionally filtering out
260 unimportant parts, JavaInspect produces GraphViz dot file that
261 describes data to be visualized. Then launches GraphViz to generate
262 bitmap graph in PNG or SVG format.
263 </p>
264
265 <p>
266 By default on your Desktop directory when operated in library mode or
267 current working directory when operated as standalone commandline
268 application.
269 </p>
270
271 <p>
272 Note: GraphViz is developed and tested so far only on GNU/Linux.
273 </p>
274 </div>
275 </div>
276
277 <div id="outline-container-sec-2" class="outline-2">
278 <h2 id="sec-2"><span class="section-number-2">2</span> Example graphs</h2>
279 <div class="outline-text-2" id="text-2">
280 <ul class="org-ul">
281 <li>A very simple example:
282
283
284 <figure>
285 <p><a href="example.png"><img src="example.resized.png" class="img-responsive" alt="example.resized.png"></a>
286 </p>
287 </figure>
288
289 <p>
290 Graph legend:
291 </p>
292
293
294 <figure>
295 <p><img src="legend.png" class="img-responsive" alt="legend.png">
296 </p>
297 </figure>
298 </li>
299
300 <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>.
301 </li>
302 </ul>
303 </div>
304 </div>
305
306 <div id="outline-container-sec-3" class="outline-2">
307 <h2 id="sec-3"><a id="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522" name="ID-2ad2889e-6c95-4662-b3f4-2c341fc74522"></a><span class="section-number-2">3</span> Usage</h2>
308 <div class="outline-text-2" id="text-3">
309 <p>
310 JavaInspect can be controlled in 2 different ways:
311 </p>
312 <ul class="org-ul">
313 <li><a href="#sec-3-1">as standalone commandline utility</a>
314 </li>
315 <li><a href="#sec-3-2">as embedded Java library via Java API</a>
316 </li>
317 </ul>
318 </div>
319
320 <div id="outline-container-sec-3-1" class="outline-3">
321 <h3 id="sec-3-1"><a id="ID-acf1896a-74b4-4914-acf6-a77075e07f25" name="ID-acf1896a-74b4-4914-acf6-a77075e07f25"></a><span class="section-number-3">3.1</span> usage as commandline utility</h3>
322 <div class="outline-text-3" id="text-3-1">
323 <p>
324 To enable commandline support, (study and) execute script:
325 </p>
326 <pre class="example">
327 commandline launcher/install
328 </pre>
329
330 <p>
331 Warning: It was tested only on Debian Stretch linux.
332 </p>
333
334 <p>
335 Available commandline arguments:
336 </p>
337 <p class="verse">
338 -j (existing files)&#x2026;<br >
339 &#xa0;&#xa0;&#xa0;&#xa0;JAR file(s) to render.<br >
340 <br >
341 -n (mandatory, string)<br >
342 &#xa0;&#xa0;&#xa0;&#xa0;Graph name.<br >
343 <br >
344 &#x2013;debug<br >
345 &#xa0;&#xa0;&#xa0;&#xa0;Show debug info.<br >
346 <br >
347 -k<br >
348 &#xa0;&#xa0;&#xa0;&#xa0;Keep dot file.<br >
349 <br >
350 -h<br >
351 &#xa0;&#xa0;&#xa0;&#xa0;Hide orphaned classes.<br >
352 <br >
353 -w (one to many strings)&#x2026;<br >
354 &#xa0;&#xa0;&#xa0;&#xa0;Whitelist glob(s).<br >
355 <br >
356 -b (one to many strings)&#x2026;<br >
357 &#xa0;&#xa0;&#xa0;&#xa0;Blacklist glob(s).<br >
358 <br >
359 -d (existingdirectory)<br >
360 &#xa0;&#xa0;&#xa0;&#xa0;Target directory. Default is current directory.<br >
361 <br >
362 -t (options: png, svg)<br >
363 &#xa0;&#xa0;&#xa0;&#xa0;Target image type. Default is: svg.<br >
364 </p>
365 </div>
366 </div>
367 <div id="outline-container-sec-3-2" class="outline-3">
368 <h3 id="sec-3-2"><a id="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee" name="ID-bbeeffc8-3767-440d-8d93-ec9124dd60ee"></a><span class="section-number-3">3.2</span> usage via Java API</h3>
369 <div class="outline-text-3" id="text-3-2">
370 <p>
371 Requires that classes to be visualised are available in the classpath.
372 </p>
373
374 <p>
375 To get JavaInspect into same classpath with your projecs I so far came
376 up with 2 solutions:
377 </p>
378
379 <ol class="org-ol">
380 <li>Add JavaInspect library in your project as a dependency.
381 </li>
382
383 <li>Create new Java project for the purpose visualizing your other
384 projects and include JavaInspect and your projecs binary artifacts
385 (Jar's) into new project classpath. Built binary Jar's (with no
386 source code) are sufficient because JavaInspect operates via
387 reflection.
388 </li>
389 </ol>
390
391 <p>
392 Simple Java based control/configuration code needs to be written for
393 each project. I usually put such code into directories devoted for
394 JUnit tests. Because it needs not to be compiled/embedded into final
395 product or project artifact I'm just willing to visualize.
396 </p>
397
398 <p>
399 Control code in general does the following:
400 </p>
401 <ol class="org-ol">
402 <li>Create graph object.
403 </li>
404 <li>Java reflection/classloaders does not provide mechanism for
405 discovering all classes under given package. Therefore you need to
406 declare at least some classes to be added to the graph by:
407 <ul class="org-ul">
408 <li>Manually adding individual classes to the graph.
409 </li>
410 <li>and/or: Let GraphViz recursively scan and parse specified
411 directories with Java source code files to discover class names.
412 </li>
413 <li>For every class added to the graph, GraphViz will recursively
414 inspect it and add all referecned classes to the graph as well.
415 </li>
416 </ul>
417 </li>
418 <li>Graphs easilly get very big and complex so optionally we filter
419 important code using classname wildcards patterns based blacklist
420 and/or whitelist.
421 </li>
422 <li>Optionally we can tune some rendering parameters like:
423 <ul class="org-ul">
424 <li>Possibility to remove orphaned classes (classes with no
425 references) from the graph.
426 </li>
427 <li>Specify target directory for generated visualization
428 files. (Default is user desktop directory)
429 </li>
430 <li>Keep intermediate GraphViz dot file for later inspection.
431 </li>
432 </ul>
433 </li>
434 <li>Render graph.
435 </li>
436 </ol>
437 </div>
438
439
440 <div id="outline-container-sec-3-2-1" class="outline-4">
441 <h4 id="sec-3-2-1"><span class="section-number-4">3.2.1</span> example 1: individually picked objects</h4>
442 <div class="outline-text-4" id="text-3-2-1">
443 <p>
444 This example demonstrates generating of class graph from hand picked
445 classes and visualizing GraphViz itself.
446 </p>
447
448 <div class="org-src-container">
449
450 <pre class="src src-java"><span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Create graph</span>
451 <span style="color: #F92672;">final</span> <span style="color: #66D9EF;">ClassGraph</span> <span style="color: #FD971F;">graph</span> = <span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>();
452
453 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Add some random object to the graph. GraphViz will detect Class from</span>
454 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">the object.</span>
455 graph.add(graph);
456
457 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Also add some random class to the graph.</span>
458 graph.add(Utils.<span style="color: #F92672;">class</span>);
459
460 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Keep intermediary GraphViz DOT file for reference.</span>
461 graph.setKeepDotFile(<span style="color: #FF80F4;">true</span>);
462
463 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Produce bitmap image titled "JavaInspect.png" to the user Desktop</span>
464 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">directory</span>
465 graph.generateGraph(<span style="color: #EEDC82;">"JavaInspect"</span>);
466 </pre>
467 </div>
468
469 <p>
470 Note: if desired, more compact version of the above:
471 </p>
472 <div class="org-src-container">
473
474 <pre class="src src-java"><span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>().add(randomObject, RandomClass.<span style="color: #F92672;">class</span>)
475                 .setKeepDotFile(<span style="color: #FF80F4;">true</span>).generateGraph(<span style="color: #EEDC82;">"JavaInspect"</span>);
476 </pre>
477 </div>
478
479
480 <p>
481 Result:
482 </p>
483 <ul class="org-ul">
484 <li>Generated DOT file: <a href="JavaInspect.dot">JavaInspect.dot</a>
485 </li>
486 <li>Generated PNG image: <a href="JavaInspect.png">JavaInspect.png</a>
487 </li>
488 </ul>
489 </div>
490 </div>
491
492 <div id="outline-container-sec-3-2-2" class="outline-4">
493 <h4 id="sec-3-2-2"><span class="section-number-4">3.2.2</span> example 2: scan java code, apply filters</h4>
494 <div class="outline-text-4" id="text-3-2-2">
495 <div class="org-src-container">
496
497 <pre class="src src-java"><span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Create graph</span>
498 <span style="color: #F92672;">final</span> <span style="color: #66D9EF;">ClassGraph</span> <span style="color: #FD971F;">graph</span> = <span style="color: #F92672;">new</span> <span style="color: #66D9EF;">ClassGraph</span>();
499
500 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Recursively scan current directory for Java source code and attempt</span>
501 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">to detect class names from there to be added to the graph.</span>
502 graph.addProject(<span style="color: #EEDC82;">"."</span>);
503
504 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Blacklist example classes from being shown on the graph</span>
505 graph.blacklistClassPattern(<span style="color: #EEDC82;">"eu.svjatoslav.inspector.java.structure.example.*"</span>);
506
507 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">do not show single classes with no relationships on the graph</span>
508 graph.hideOrphanedClasses();
509
510 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">Produce bitmap image titled "JavaInspect full project.png" to the</span>
511 <span style="color: #8C8C8C;">// </span><span style="color: #8C8C8C;">user Desktop directory.</span>
512 graph.generateGraph(<span style="color: #EEDC82;">"JavaInspect full project"</span>);
513 </pre>
514 </div>
515 <p>
516 Result:
517 </p>
518 <ul class="org-ul">
519 <li>Generated PNG image: <a href="JavaInspect%20full%20project.png">JavaInspect full project.png</a>
520 </li>
521 </ul>
522 </div>
523 </div>
524
525 <div id="outline-container-sec-3-2-3" class="outline-4">
526 <h4 id="sec-3-2-3"><span class="section-number-4">3.2.3</span> example 3: GraphViz embedded in another project</h4>
527 <div class="outline-text-4" id="text-3-2-3">
528 <ol class="org-ol">
529 <li>Download project Sixth <a href="http://www2.svjatoslav.eu/gitweb/?p=sixth.git;a=snapshot;h=HEAD;sf=tgz">code snapshot</a>.
530 </li>
531 <li>Inspect and run *DataGraph.java*.
532 </li>
533 </ol>
534 </div>
535 </div>
536
537 <div id="outline-container-sec-3-2-4" class="outline-4">
538 <h4 id="sec-3-2-4"><span class="section-number-4">3.2.4</span> Embedding JavaInspect in your Maven project</h4>
539 <div class="outline-text-4" id="text-3-2-4">
540 <p>
541 Declare JavaInspect as dependency:
542 </p>
543 <div class="org-src-container">
544
545 <pre class="src src-xml">&lt;<span style="color: #A6E22E;">dependencies</span>&gt;
546     ...
547     &lt;<span style="color: #A6E22E;">dependency</span>&gt;
548         &lt;<span style="color: #A6E22E;">groupId</span>&gt;eu.svjatoslav&lt;/<span style="color: #A6E22E;">groupId</span>&gt;
549         &lt;<span style="color: #A6E22E;">artifactId</span>&gt;javainspect&lt;/<span style="color: #A6E22E;">artifactId</span>&gt;
550         &lt;<span style="color: #A6E22E;">version</span>&gt;1.6&lt;/<span style="color: #A6E22E;">version</span>&gt;
551     &lt;/<span style="color: #A6E22E;">dependency</span>&gt;
552     ...
553 &lt;/<span style="color: #A6E22E;">dependencies</span>&gt;
554 </pre>
555 </div>
556
557
558 <p>
559 Add Maven repository to retrieve artifact from:
560 </p>
561 <div class="org-src-container">
562
563 <pre class="src src-xml">&lt;<span style="color: #A6E22E;">repositories</span>&gt;
564     ...
565     &lt;<span style="color: #A6E22E;">repository</span>&gt;
566         &lt;<span style="color: #A6E22E;">id</span>&gt;svjatoslav.eu&lt;/<span style="color: #A6E22E;">id</span>&gt;
567         &lt;<span style="color: #A6E22E;">name</span>&gt;Svjatoslav repository&lt;/<span style="color: #A6E22E;">name</span>&gt;
568         &lt;<span style="color: #A6E22E;">url</span>&gt;http://www2.svjatoslav.eu/maven/&lt;/<span style="color: #A6E22E;">url</span>&gt;
569     &lt;/<span style="color: #A6E22E;">repository</span>&gt;
570     ...
571 &lt;/<span style="color: #A6E22E;">repositories</span>&gt;
572 </pre>
573 </div>
574 </div>
575 </div>
576 </div>
577 </div>
578
579 <div id="outline-container-sec-4" class="outline-2">
580 <h2 id="sec-4"><span class="section-number-2">4</span> Requirements</h2>
581 <div class="outline-text-2" id="text-4">
582 <p>
583 <a href="http://www.graphviz.org/">GraphViz</a> - shall be installed on the computer.
584 </p>
585
586 <p>
587 On Ubuntu/Debian use:
588 </p>
589 <div class="org-src-container">
590
591 <pre class="src src-sh">sudo apt-get install graphviz
592 </pre>
593 </div>
594 </div>
595 </div>
596 <div id="outline-container-sec-5" class="outline-2">
597 <h2 id="sec-5"><span class="section-number-2">5</span> TO DO</h2>
598 <div class="outline-text-2" id="text-5">
599 <p>
600 Note: Because this is side project (and I have many of them) I can
601 only contribute few hours per year at average. Any help is welcome.  A
602 LOT of cool ideas could be implemented. For intstance:
603 </p>
604
605 <ul class="org-ul">
606 <li>BUG: Should not hide references if there are too many of them to
607 classes if referring classes are not visible anyway because of
608 blacklist/whitelist rules. Basically reference counting should
609 exclude not visible classes.
610 </li>
611
612 <li>BUG: Orphaned class removal does not work always. There are many
613 bugs and corner cases to find and fix still.
614 </li>
615
616 <li>BUG: Code is not very readable. Document and refactor for better
617 maintainability.
618 </li>
619
620 <li>FEATURE: Create installable DEB package.
621 <ul class="org-ul">
622 <li>Submit it to some Debian developer for integration or become
623 Debian package maintainer.
624 </li>
625 </ul>
626 </li>
627
628 <li>FEATURE: Make it modular. That is: central part, an application
629 model could be standalone and serializable.
630
631 <ul class="org-ul">
632 <li>There could be multiple ways to acquire model:
633 <ul class="org-ul">
634 <li>By introspecting application via Java reflections (current mode
635 of operation).
636 </li>
637 <li>By parsing java source. (unfinished)
638 </li>
639 </ul>
640 </li>
641
642 <li>There could be ways to manipulate model:
643 <ul class="org-ul">
644 <li>Store/load/compare.
645 </li>
646 <li>Trim uninteresting parts.
647 </li>
648 <li>Highlight important parts.
649 </li>
650 </ul>
651 </li>
652
653 <li>There could be multiple ways to render model:
654 <ul class="org-ul">
655 <li>PNG/SVG (currently implemented)
656 </li>
657 <li>PlantUML (TODO)
658 </li>
659 <li>Interactive 3D visualization (TODO)
660 </li>
661 </ul>
662 </li>
663 </ul>
664 </li>
665
666 <li>FEATURE: Replace internal java parser in package
667 eu.svjatoslav.inspector.java.methods with: <a href="https://javaparser.org/">https://javaparser.org/</a>
668 </li>
669
670 <li>FEATURE: Integarte with <a href="http://plantuml.com/class-diagram">PlantUML</a>.
671 </li>
672
673 <li>FEATURE: Add dark theme for generated graphs.
674 </li>
675
676 <li>FEATURE: Sort Class fields by alphabet.
677 </li>
678
679 <li>FEATURE: Visualize also concrete field values so it could be used as
680 ultra cool runtime logging/debugging framework.
681 </li>
682
683 <li>FEATURE: Possibility to visualize structure and data from JVM
684 snapshot.
685 </li>
686
687 <li>FEATURE: Possibility to attach to remote process to visualize
688 data/structure using JVM debug port and mechanism.
689 </li>
690
691 <li>FEATURE: Possibility to attach to JVM using JVM agent.
692 </li>
693
694 <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>.
695 </li>
696
697 <li>FEATURE: Possibility to select classes/fields/values to be
698 visualized in some graph query language. For greater flexibility in
699 comparison to currently supported glob syntax.
700 </li>
701
702 <li>FEATURE: Add option to control JavaInspect via JSON or XML config
703 file. For example different graphs for given project could be
704 defined once in plain text config, possibly with the aid of some
705 interactive utility. Then defined graphs could be updated as part of
706 project build or release process.
707 </li>
708
709 <li>FEATURE: Configurable maven plugin to generate graphs as part of the
710 project build/release process.
711 </li>
712 </ul>
713 </div>
714 </div>
715 </div><div class="col-md-3"><nav id="table-of-contents">
716 <div id="text-table-of-contents" class="bs-docs-sidebar">
717 <ul class="nav">
718 <li><a href="#sec-1">1. General</a></li>
719 <li><a href="#sec-2">2. Example graphs</a></li>
720 <li><a href="#sec-3">3. Usage</a>
721 <ul class="nav">
722 <li><a href="#sec-3-1">3.1. usage as commandline utility</a></li>
723 <li><a href="#sec-3-2">3.2. usage via Java API</a></li>
724 </ul>
725 </li>
726 <li><a href="#sec-4">4. Requirements</a></li>
727 <li><a href="#sec-5">5. TO DO</a></li>
728 </ul>
729 </div>
730 </nav>
731 </div></div></div>
732 <footer id="postamble" class="">
733 <div><p class="author">Author: Svjatoslav Agejenko</p>
734 <p class="date">Created: 2018-01-04 Thu 00:23</p>
735 <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>
736 </div>
737 </footer>
738 </body>
739 </html>