Static Java analyzer that exports classes, fields, methods, visibility and cross-class method calls to YAML.
Java static analyzer CLI that creates a YAML map of classes, fields, methods, visibility modifiers and cross-class method calls.
java
static-analysis
javaparser
java-parser
symbol-solver
yaml
code-map
call-graph
architecture-documentation
reverse-engineering
maven
cli-tool
java-code-map-yaml scans a Java project and generates a code-map.yml file with:
- classes, interfaces, enums and annotations
- package name, file path and source line
- class visibility:
public,private,protected,package-private - fields with type, modifiers and annotations
- constructors and methods
- method visibility and modifiers
- method parameters and return type
- method calls inside each method/constructor
- resolved target class/method when JavaParser Symbol Solver can resolve it
- reverse index: which external project classes call a given method
It is useful for documenting old Java projects, WildFly/JBoss applications, service layers, SOAP/REST modules, GWT projects and large legacy codebases.
This tool performs static source-code analysis. It can detect direct Java calls like:
userValidator.validate(dto);
repository.save(user);
this.prepareData();It may not fully detect dynamic or framework-driven calls such as:
- reflection
- Spring/CDI proxy calls
- XML-only wiring
- JSP/JSF/GWT UiBinder events
- SOAP dispatch by WSDL/runtime metadata
- SQL stored procedure calls
- calls hidden inside generated sources that are not included in the scanned source roots
- Java 8+
- Maven 3.8+
mvn clean packageThe runnable jar will be created in:
target/java-code-map-yaml-1.0.0.jar
Analyze a Java project:
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/your/java-project \
--output /path/to/your/java-project/code-map.ymlShort positional syntax also works:
java -jar target/java-code-map-yaml-1.0.0.jar /path/to/your/java-project /path/to/code-map.ymlAnalyze only selected source roots:
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/project \
--source-root module-a/src/main/java \
--source-root module-b/src/main/java \
--output code-map.ymlExclude test sources:
java -jar target/java-code-map-yaml-1.0.0.jar \
--project /path/to/project \
--exclude-testsShow help:
java -jar target/java-code-map-yaml-1.0.0.jar --helpgenerator: java-code-map-yaml
generated_at: '2026-07-09T22:00:00+02:00'
project_root: /projects/my-java-app
source_roots:
- /projects/my-java-app/src/main/java
java_files_count: 2
classes_count: 2
classes:
- name: com.example.app.service.UserService
simple_name: UserService
package: com.example.app.service
kind: class
file: src/main/java/com/example/app/service/UserService.java
line: 5
visibility: public
modifiers:
- public
annotations: []
extends: []
implements: []
fields:
- names:
- validator
type: UserValidator
visibility: private
modifiers:
- private
- final
annotations: []
line: 7
methods:
- name: createUser
signature: createUser(String)
return_type: String
visibility: public
modifiers:
- public
annotations: []
line: 14
parameters:
- name: email
type: String
varargs: false
annotations: []
calls:
- name: validate
raw: validator.validate(email)
scope: validator
line: 15
resolved: true
target_class: com.example.app.validation.UserValidator
target_signature: com.example.app.validation.UserValidator.validate(java.lang.String)
target_method: validate
project_class: true
external_class_call: true
called_by_other_classes:
- target_method: com.example.app.validation.UserValidator.validate(java.lang.String)
called_by:
- caller_class: com.example.app.service.UserService
caller_method: createUser(String)
line: 15- Run the tool and generate
code-map.yml. - Commit the YAML to a documentation branch.
- Search in YAML for
external_class_call: trueto find cross-class dependencies. - Search in
called_by_other_classesto find method consumers before refactoring. - Regenerate YAML after large refactors and compare changes in Git.
MIT. See LICENSE.