Package Name | Comment |
com.jeantessier.classreader |
com.jeantessier.classreader
Parse .class files and traverse their structure.
Start with either
{@link com.jeantessier.classreader.AggregatingClassfileLoader} or
{@link com.jeantessier.classreader.TransientClassfileLoader} to load
.class files into memory, and then use
{@link com.jeantessier.classreader.Classfile} to traverse the structures.
|
com.jeantessier.commandline |
com.jeantessier.commandline
Use CommandLine to parse and validate command line parameters.
|
com.jeantessier.dependency |
com.jeantessier.dependency
Build forests of packages, classes, and features and their dependencies.
Each node can cross-reference other nodes in the forest, according to dependencies
within the code.
Here are the core abstractions. At the code are Node and its
subclasses. The NodeFactory creates Node instances.
The Visitor implementations traverse dependency graphs and perform
custom operations. For instance, the GraphSummarizer is used to
perform queries and the Printer subclasses do textual rendering.
Visitors
CodeDependencyCollector traverses .class files and
builds the dependency graph along the way, using a NodeFactory .
CodeDependencyCollector
Another way to build a dependency graph is to load one that was saved to an
XML document. Dependency Finder uses SAX in the form of NodeLoader
and NodeHandler . The latter, again, uses a NodeFactory
to build the actual in memory representation.
SAX
|
com.jeantessier.dependencyfinder |
com.jeantessier.dependencyfinder
Is the head of the hierarchy for all user-interface for Dependency Finder.
The classes in these sub-packages serve two purposes:
- Presentation layer for the application
- Examples of how to use the libraries that make up Dependency Finder
The first purpose is self-explanatory, but the second one deserves extra
attention. The code in each class is meant to provide a one-stop example of
how you can build tools using Dependency Finder. As such, I did not try to
refactor common code into helper classes or create complex hierarchies. There
is a fair bit of duplication and some of the code can be quite unsophisticated.
This is done on purpose so that you can study any which one in isolation and
understand how you can rool up your own.
Layers
You can think of {@link com.jeantessier.classreader} as a kind of read-only
persistence, where we obtain data from compiled Java classes on the
filesystem.
The packages {@link com.jeantessier.dependency},
{@link com.jeantessier.diff}, and {@link com.jeantessier.metrics} are where you
will find all the logic for dealing with graphs and various results.
The packages {@link com.jeantessier.commandline} and
{@link com.jeantessier.text} are utility packages.
|
com.jeantessier.dependencyfinder.ant |
com.jeantessier.dependencyfinder.ant
Apache Ant task-based tools. These classes are the entry points
for using the various tools as part of Ant build files.
|
com.jeantessier.dependencyfinder.cli |
com.jeantessier.dependencyfinder.cli
Command line interface tools. These classes are the entry points
for the scripts of the various tools. Each tool has a -help
switch that describes the various options for calling it.
|
com.jeantessier.dependencyfinder.gui |
com.jeantessier.dependencyfinder.gui
Graphical user interface tools. These classes are the entry points
for the scripts of the various tools and their Swing-based utilities.
Each tool has a -help switch that describes the various
options for calling it.
|
com.jeantessier.dependencyfinder.web | |
com.jeantessier.dependencyfinder.webwork | |
com.jeantessier.diff |
com.jeantessier.diff
Compare two groups of classes with each other. The classes in this
package compile API differences between the two groups.
|
com.jeantessier.metrics |
com.jeantessier.metrics
Compute various object-oriented metrics from .class classes.
Overall Structure
Measurements Hierarchy
|
com.jeantessier.text | |
three.words.packagename | |
twowords.packagename | |