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