Plan (optional)
Design spec: https://github.com/codellm-devkit/codeanalyzer-java/blob/main/docs/design/specs/schema-v2-l3-l4-design.md
Problem
v1 emits rich JGraphEdges (embedding method detail) as the call graph. Canonical v2 requires an identity-only call_graph at application scope and the callee: null → id refinement on body call nodes.
Scope boundary
L2 edges + callee backfill only, over the L1 v2 tree. WALA RTA call-graph construction is unchanged (Java's only call graph is WALA's). No dataflow.
Goals
Caveats and known risks
- WALA-RTA unsoundness (reflection, dynamic dispatch, unmodeled natives) — document in the analyzer README; precision recovered downstream by the SDK.
call_graph edges are immutable once written (never re-anchored to a statement at L3).
Definition of done
- L2 gate: no dangling endpoints (every
src/dst resolves to a real callable id); every edge has non-empty prov; callee backfilled on resolved sites and still null on honest-unresolved ones; a named expected (src,dst) edge present + at least one cross-package edge.
L1 ⊆ L2 superset holds (nothing L1 emitted changed except the callee backfill); output validates against the SDK model.
Plan (optional)
Design spec: https://github.com/codellm-devkit/codeanalyzer-java/blob/main/docs/design/specs/schema-v2-l3-l4-design.md
Problem
v1 emits rich
JGraphEdges(embedding method detail) as the call graph. Canonical v2 requires an identity-onlycall_graphat application scope and thecallee: null → idrefinement onbodycallnodes.Scope boundary
L2 edges +
calleebackfill only, over the L1 v2 tree. WALA RTA call-graph construction is unchanged (Java's only call graph is WALA's). No dataflow.Goals
call_graph:[{src, dst, prov, weight}]atapplicationscope; endpoints are callablecan://idsbodycallnode'scallee(null → id) on resolved sitesexternal_symbols{}homes call targets outside the project (imported/library/builtin), keyed bycan://…/@external/…callee:null, skip the edge, never crashCaveats and known risks
call_graphedges are immutable once written (never re-anchored to a statement at L3).Definition of done
src/dstresolves to a real callable id); every edge has non-emptyprov;calleebackfilled on resolved sites and stillnullon honest-unresolved ones; a named expected(src,dst)edge present + at least one cross-package edge.L1 ⊆ L2superset holds (nothing L1 emitted changed except thecalleebackfill); output validates against the SDK model.