You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Java indexing produces incorrect interface-to-implementation edges for overloaded methods. The method signatures in nodes are correct, but the synthesized calls edges connect each interface overload to both implementation overloads. Example
The following simplified example illustrates the pattern observed in an existing project:
import java.util.List;
These are synthesized implementation relationships, not actual calls between the methods. Expected behavior
Only two interface-to-implementation edges should exist:
Overload matching should consider parameter signatures and Java override rules, rather than method names alone. Impact
The extra edges introduce false call paths and make downstream call-chain analysis and visualization misleading. Investigation
The native database already stores distinct, correct parameter signatures for all four method nodes. This points to an issue in interface-to-implementation edge synthesis rather than method extraction.
The observed cross-product suggests name-based matching, although the exact implementation cause still needs confirmation.
Thanks for the clear report and the example. You were right that the stored signatures were already correct: the override pass paired overloads by name alone.
#2820 is merged to main. Each overload of an interface or base-class method now links only to the implementation methods with the same parameters, in Java, Kotlin, C# and Scala, so your two putTairValue overloads each get exactly one edge. On real projects such as guava and hadoop that removed over 3,000 wrong override links, and it restored about 230 correct ones that a per-class limit had been cutting off.
It ships in the next release; re-index after upgrading.
Activity
fix(resolution): an interface overload links the implementation overl…
integration: EXTRACTION_VERSION 49 (upstream Go/ObjC/Swift/C waves, c…
fix(resolution): an interface overload links the implementation overl…
fix(resolution): an interface overload links the implementation overl…
fix(resolution): an interface overload links the implementation overl…
fix(resolution): an interface overload links the implementation overl…
colbymchenry commentedon Oct 23, 2026
Thanks for the clear report and the example. You were right that the stored signatures were already correct: the override pass paired overloads by name alone.
#2820 is merged to
main. Each overload of an interface or base-class method now links only to the implementation methods with the same parameters, in Java, Kotlin, C# and Scala, so your twoputTairValueoverloads each get exactly one edge. On real projects such as guava and hadoop that removed over 3,000 wrong override links, and it restored about 230 correct ones that a per-class limit had been cutting off.It ships in the next release; re-index after upgrading.
fix(java,kotlin,csharp,scala): an overload links only the overrides w…
fix(rust): a Java/Kotlin/C#/Scala overload links only the overrides w…