| Summary: | [1.5][search] Search for declarations of generic method finds non-overriding method | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] JDT | Reporter: | Markus Keller <markus.kell.r> | ||||
| Component: | Core | Assignee: | Frederic Fusier <frederic_fusier> | ||||
| Status: | CLOSED FIXED | QA Contact: | |||||
| Severity: | normal | ||||||
| Priority: | P3 | ||||||
| Version: | 3.1 | ||||||
| Target Milestone: | 3.1 RC2 | ||||||
| Hardware: | PC | ||||||
| OS: | Windows XP | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
+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 |
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)); } }