## 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 `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.

## 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 `mvn surefire: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.
