Wrong navigation/Javadoc hover on DateGroovyMethods overloading
Consider this:
package test56
class Test56 {
static Date foo(String foo) {
new Date()
}
static Date bar(String bar) {
foo(bar).clearTime()
}
}
Hit F2 or F3 over clearTime(): Greclipse thinks that the invoked method is org.codehaus.groovy.runtime.DateGroovyMethods.clearTime(java.sql.Date), but it is org.codehaus.groovy.runtime.DateGroovyMethods.clearTime(java.util.Date) indeed.
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.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=550625
https://github.com/eclipse-jdt/eclipse.jdt.core/issues/503