fix(extraction): land upstream declaration initializer walks (#1511) (#1802)

Squash danusha2345's PR #1511 at d282f9e8 onto main 8c9c4761,
preserving its nine non-merge commits and main's existing Unreleased notes.
Calls in Kotlin, Java, TS/JS, Scala, Rust and Python declaration initializers
now retain the owner established by the upstream regression expectations.
Include the upstream CFML, dynamic-dispatch summary and viewer follow-ups.

Linux fail-to-pass validation (Node 22.19.0, rebuilt dist and native kernel):
- Before: TS load belonged to file:app.ts; Python/Kotlin/Scala/Rust calls
  vanished; Java lost the field-lambda, anonymous override and eager calls.
- After: all six languages PASS; 12 native/WASM LF/CRLF parity checks PASS.
- Focused initializer regressions: 10 passed with CODEGRAPH_KERNEL=0 and
  10 passed with the kernel enabled; Kotlin's grammar fallback is recorded.
- Related regression suites: 879 passed, 1 skipped across 15 test files.
- Evidence: /workspace/cg-1510-repro/before and /workspace/cg-1510-repro/after
  (combined test output: after/vitest.log).

Fixes #1510
Supersedes #1511

Co-authored-by: Colby McHenry <colbymchenry@users.noreply.github.com>
Co-authored-by: danusha2345 <ewidusoc498@gmail.com>
This commit is contained in:
Colby Mchenry
2026-09-08 17:33:45 -05:00
committed by GitHub
parent 8c9c4761b0
commit 9181dd1ef3
25 changed files with 884 additions and 108 deletions
+19 -11
View File
@@ -483,18 +483,26 @@ impl<'t> Walker<'t> {
}
}
// Walk the initializer for calls — except the object/store shapes
// whose members are extracted method-by-method below.
// Walk the initializer for calls, ATTRIBUTED to the declared symbol
// (#693) — except the object/store shapes whose members are
// extracted method-by-method below (walking those too would
// double-count each member arrow's calls). Before this the walk ran
// with only the FILE on the stack (`const cfg = load()` recorded the
// file as load's caller) and object literals were skipped outright.
let members_extracted_separately = extract_object_methods
|| rtk_endpoints.is_some()
|| pinia_setup.is_some()
|| !store_collections.is_empty();
if let Some(v) = value {
let vk = v.kind();
if vk != "object"
&& vk != "object_expression"
&& !(extract_object_methods && vk == "call_expression")
&& rtk_endpoints.is_none()
&& pinia_setup.is_none()
&& store_collections.is_empty()
{
self.visit_function_body(v);
if !members_extracted_separately {
match var_row {
Some(row) => {
self.stack.push(Scope { row, kind, name: name.clone() });
self.visit_function_body(v);
self.stack.pop();
}
None => self.visit_function_body(v),
}
}
}