An early version of ApiSummarizer.
It analyzes java source code / jars and outputs a JSON representation of the public API.
It's currently used in jnigen
to get the information of the Java API.
When using it via jnigen
, the jnigen:setup
script will take care of building the jar in appropriate location.
To build the jar manually, run mvn compile
in project root. To build the jar and run the tests as well, run mvn test
. The jar will be created in target/
directory.
usage: java -jar <JAR> [-s <SOURCE_DIR=.>] [-c <CLASSES_JAR>] <CLASS_OR_PACKAGE_NAMES> Class or package names should be fully qualified. -b,--backend <arg> backend to use for summary generation ('doclet' or 'asm'). -c,--classes <arg> paths to search for compiled classes -D,--doctool-args <arg> Arguments to pass to the documentation tool -M,--use-modules use Java modules -m,--module-names <arg> comma separated list of module names -r,--recursive Include dependencies of classes -s,--sources <arg> paths to search for source files -v,--verbose Enable verbose output
Here class or package names are specified as fully qualified names, for example org.apache.pdfbox.pdmodel.PDDocument
will load org/apache/pdfbox/pdmodel/PDDocument.java
. It assumes the package naming reflects directory structure. If such mapping results in a directory, for example android.os
is given and a directory android/os
is found under the source path, it is considered as a package and all Java source files under that directory are loaded recursively.
Note that some options are directly forwarded to the underlying tool.
ApiSummarizer's current use is in jnigen
for obtaining public API of java packages. Only the features strictly required for that purpose are focused upon.
Run mvn surefire:test
There are not many tests at the moment. We plan to add some later.
The main backend is based on javadoc API and generates summary based on java sources. A more experimental ASM backend also exists, and works somewhat okay-ish. It can summarize the compiled JARs. However, compiled jars without debug information do not include method parameter names. Some basic renaming is applied, i.e If type is Object
, the parameter name will be output as object
if an actual name is absent.
See issue #23.