groovy-eclipse icon indicating copy to clipboard operation
groovy-eclipse copied to clipboard

Wrong navigation/Javadoc hover on DateGroovyMethods overloading

Open mauromol opened this issue 6 years ago • 4 comments

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.

mauromol avatar Aug 23 '19 13:08 mauromol

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
		}

eric-milles avatar Aug 31 '19 14:08 eric-milles

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.

eric-milles avatar Aug 31 '19 15:08 eric-milles

https://bugs.eclipse.org/bugs/show_bug.cgi?id=550625

eric-milles avatar Aug 31 '19 15:08 eric-milles

https://github.com/eclipse-jdt/eclipse.jdt.core/issues/503

eric-milles avatar Oct 29 '22 13:10 eric-milles