Community
Participate
Working Groups
N20050526-0010 class Generic<G> { void take(G g) { System.out.println("Generic#take(G): " + g); } } class Impl extends Generic<Number> { void take(Integer g) { System.out.println("nonripple Impl#take(Integer): " + g); } void take(Number g) { System.out.println("Impl#take(Number): " + g); } } Search for declarations of Generic#take(G). Both methods in Impl are reported, but Impl#take(Integer) does not override Generic#take(G). Here's a test program you can use to play with method overriding: public class Main { public static void main(String[] args) { new Generic<Number>().take(new Double(1)); new Generic<Integer>().take(new Integer(2)); new Impl().take(new Integer(3)); new Impl().take(new Float(4)); Generic<Number> gn= new Impl(); gn.take(new Integer(6)); gn.take(new Double(7)); } }
+1 for RC2
Created attachment 22619 [details] Patch implementing fix for both this bug and bug 96763 All JDT tests pass (Core+UI). I've made some perf tests on method search modifying FullSourceWorkspaceSearchTests to perform search using string ("equals(java.lang.Object)" ) and IJavaElement (IMethod "equals"). I didn't notice any time increase for both searches either for CPU Time and Elapsed Process.
Fixed and released in HEAD. Search does no longer find non-overridden method while search for take(G) declaration... |jdt-core internal] See patch for changes Test cases added in JavaSearchBugsTests
Verified in N20050609-0010. take(Integer) is not reported anymore.
Verified with I20050610-0010