blob: 93aef7cffc76660daa1d91dfd91baa5840667a47 [file] [log] [blame] [view] [edit]
## ApiSummarizer
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.
## Build
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 `gradlew(.bat) buildFatJar` in project root. The jar will be created in `build/libs`
directory.
## Command line
```
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.
## Running tests
Run `gradlew(.bat) test`
There are not many tests at the moment. We plan to add some later.
## ASM backend
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.
## TODO
See issue #23.