Skip to content

vitaliy-hnatyk/java-code-map-yaml

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Java Code Map YAML

Static Java analyzer that exports classes, fields, methods, visibility and cross-class method calls to YAML.

Java CI License: MIT

GitHub description

Java static analyzer CLI that creates a YAML map of classes, fields, methods, visibility modifiers and cross-class method calls.

GitHub topics / tags

java
static-analysis
javaparser
java-parser
symbol-solver
yaml
code-map
call-graph
architecture-documentation
reverse-engineering
maven
cli-tool

What it does

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.

Limitations

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

Requirements

  • Java 8+
  • Maven 3.8+

Build

mvn clean package

The runnable jar will be created in:

target/java-code-map-yaml-1.0.0.jar

Usage

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.yml

Short positional syntax also works:

java -jar target/java-code-map-yaml-1.0.0.jar /path/to/your/java-project /path/to/code-map.yml

Analyze 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.yml

Exclude test sources:

java -jar target/java-code-map-yaml-1.0.0.jar \
  --project /path/to/project \
  --exclude-tests

Show help:

java -jar target/java-code-map-yaml-1.0.0.jar --help

Output example

generator: 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

Output schema

See docs/OUTPUT_SCHEMA.md.

Recommended workflow for a legacy project

  1. Run the tool and generate code-map.yml.
  2. Commit the YAML to a documentation branch.
  3. Search in YAML for external_class_call: true to find cross-class dependencies.
  4. Search in called_by_other_classes to find method consumers before refactoring.
  5. Regenerate YAML after large refactors and compare changes in Git.

Dependencies

License

MIT. See LICENSE.

About

Java static analyzer CLI that creates a YAML map of classes, fields, methods, visibility modifiers and cross-class method calls.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages