How kgcorner/marga works
Marga is a Maven plugin that scans compiled classes across the reactor, builds a Spring-aware method call graph, and writes a self-contained interactive HTML report. The main workflow is reactor classes → bytecode scan → graph construction → report. Optionally, a Git ref or supplied diff is mapped to changed methods and callers, with impact data included in the report. The viewer supports search, profiles, navigation links, and graph views. Some viewer behavior is documented but its implementation is not represented by sampled source; those links are omitted.
Main entry points: MargaMojo.java Marga goal · ReportWriter.java Report writer · ImpactAnalyzer.java Impact analyzer · MargaClassVisitor.java Class visitor
Components 18
Bytecode scan
- Marga goal
src/main/java/com/scriptchess/marga/mojo/MargaMojo.java - Class-file scanner
src/main/java/com/scriptchess/marga/scanner/MargaClassFileScanner.java - Class visitor
src/main/java/com/scriptchess/marga/visitors/MargaClassVisitor.java - Method visitor
src/main/java/com/scriptchess/marga/visitors/MargaMethodVisitor.java - Scanned classes
src/main/java/com/scriptchess/marga/scan/ScannedClass.java
Graph and impact
- Call graph builder
src/main/java/com/scriptchess/marga/graph/CallGraphBuilder.java - Compact call graph
src/main/java/com/scriptchess/marga/graph/CallGraph.java - Impact analyzer
src/main/java/com/scriptchess/marga/impact/ImpactAnalyzer.java - Impact results
src/main/java/com/scriptchess/marga/impact/Impact.java
Report output
- Report writer
src/main/java/com/scriptchess/marga/report/ReportWriter.java - HTML template
src/main/resources/marga/report-template.html - Interactive HTML report
src/main/java/com/scriptchess/marga/report/ReportWriter.java
Change inputs
- Diff file
- Git repository
- Git diff parser
src/main/java/com/scriptchess/marga/impact/GitDiff.java
Other components
- Maven reactor
- Compiled classes
- Report user
Connections 23
- Maven reactor → Marga goal: invokes goal
- Marga goal → Class-file scanner: scans modules
- Compiled classes → Class-file scanner: reads bytecode
- Class-file scanner → Class visitor: visits classes
- Class visitor → Method visitor: visits methods
- Class visitor → Scanned classes: assembles metadata
- Method visitor → Scanned classes: records method data
- Marga goal → Call graph builder: builds graph
- Call graph builder → Scanned classes: consumes metadata
- Call graph builder → Compact call graph: produces graph
- Marga goal → Git diff parser: runs or parses diff
- Git diff parser → Git repository: runs git diff
- Diff file → Marga goal: supplies diff path
- Marga goal → Impact analyzer: analyzes changes
- Git diff parser → Impact analyzer: provides changed lines
- Impact analyzer → Compact call graph: reads callers and lines
- Impact analyzer → Impact results: produces impact
- Marga goal → Report writer: writes report
- Report writer → Compact call graph: serializes graph
- Report writer → Impact results: serializes impact
- Report writer → HTML template: loads template
- Report writer → Interactive HTML report: generates HTML
- Report user → Interactive HTML report: opens report