Open mauromol opened 5 years ago
Resolved binary methods rely on JDT to find source ranges. org.eclipse.jdt.internal.core.SourceMapper
has a map for each method signature (with unqualified types). So clearTime(java.sql.Date)
and clearTime(java.util.Date)
map to the same entry.
SourceRange[] ranges = (SourceRange[]) this.sourceRanges.get(element); // element is [static java.util.Date clearTime(java.util.Date) {key=Lorg/codehaus/groovy/runtime/DateGroovyMethods;.clearTime(Ljava/util/Date;)Ljava/util/Date;}
if (ranges == null) {
return UNKNOWN_RANGE;
} else {
return ranges[0]; // selects the first of 2 matching source ranges
}
This bug seems related. The Java editor's Open Declaration (F3) is finding 2 methods (due to missing packages in parameter types) and then presents a dialog to select the desired method (still missing packages). https://bugs.eclipse.org/bugs/show_bug.cgi?id=441489
The Groovy editor is resolving the target method more accurately, but the supporting framework for determining the source range of the element is not coded to handle overloads like this.
Consider this:
Hit F2 or F3 over
clearTime()
: Greclipse thinks that the invoked method isorg.codehaus.groovy.runtime.DateGroovyMethods.clearTime(java.sql.Date)
, but it isorg.codehaus.groovy.runtime.DateGroovyMethods.clearTime(java.util.Date)
indeed.