diff --git a/understand-anything-plugin/packages/core/src/plugins/extractors/__tests__/java-extractor.test.ts b/understand-anything-plugin/packages/core/src/plugins/extractors/__tests__/java-extractor.test.ts index 17d14add..f047b4c4 100644 --- a/understand-anything-plugin/packages/core/src/plugins/extractors/__tests__/java-extractor.test.ts +++ b/understand-anything-plugin/packages/core/src/plugins/extractors/__tests__/java-extractor.test.ts @@ -408,6 +408,25 @@ public class Foo {} parser.delete(); }); + it("strips inner call args from chained method-call callee", () => { + const { tree, parser, root } = parse(`public class Foo { + public void run() { + builder().build(); + } +} +`); + const result = extractor.extractCallGraph(root); + + // The chained call should yield a clean method name "build" for the + // outer call (not the malformed "builder().build"), plus an entry for + // the inner "builder" call. + expect(result.some((e) => e.callee === "build")).toBe(true); + expect(result.some((e) => e.callee.includes("()"))).toBe(false); + + tree.delete(); + parser.delete(); + }); + it("tracks correct caller for constructors", () => { const { tree, parser, root } = parse(`public class Foo { public Foo() { diff --git a/understand-anything-plugin/packages/core/src/plugins/extractors/java-extractor.ts b/understand-anything-plugin/packages/core/src/plugins/extractors/java-extractor.ts index 4ac3a4f3..1a61cd4f 100644 --- a/understand-anything-plugin/packages/core/src/plugins/extractors/java-extractor.ts +++ b/understand-anything-plugin/packages/core/src/plugins/extractors/java-extractor.ts @@ -200,7 +200,7 @@ export class JavaExtractor implements LanguageExtractor { if (!nameNode) return null; const objectNode = node.childForFieldName("object"); - if (objectNode) { + if (objectNode && objectNode.type !== "method_invocation") { return `${objectNode.text}.${nameNode.text}`; }