Deco help to control and analyse different type of dependencies.

API dependencies

The API dependencies are the classes that are used in the public API.

That includes the classes and interfaces extended by the code analyzed, the return type of the public method, the type of the arguments of the public & protected methods (and the 'ancestors' of those classes). The declared exceptions are also part of the API dependencies.

deco doesn't analyze yet the API dependencies.

Compile dependencies

The compile dependencies are the dependencies required to compile the classes.

Deco actually start from the produced jar itself. Ideally we should start from the sources, but in practice there is very little difference when the classes have the debug info.

Deco will not detect dependencies of code that are removed by the compiler like private method unused, used constants of primitive type or compile only annotations.

The compile dependencies includes the API dependencies, all the classes that are invoked, the declared type of all local variable (this may require debug info), but also the exception declared by the invoked method (this is obtained by reading the class of the dependencies).

Runtime dependencies

The runtime dependencies are the dependencies that are required to run the code.

Those dependencies are by nature dynamic. They may depends on value evaluated at runtime (configuration parameters, input, or any kind of dynamic evaluation).

Deco doesn't analyze such dependencies [yet]. The idea will be to allows to configure some scenario hint provided as input of the analysis in order to restrict the possible branch of execution, and thus producing a more precise set of runtime dependencies.