### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java,v retrieving revision 1.75 diff -u -r1.75 MatchLocatorParser.java --- search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java 29 Mar 2006 03:13:59 -0000 1.75 +++ search/org/eclipse/jdt/internal/core/search/matching/MatchLocatorParser.java 10 Nov 2006 21:36:59 -0000 @@ -209,6 +209,12 @@ // this is always a Reference this.patternLocator.match((Reference) this.expressionStack[this.expressionPtr], this.nodeSet); } +protected void consumeFormalParameter(boolean isVarArgs) { + super.consumeFormalParameter(isVarArgs); + + // this is always a LocalDeclaration + this.patternLocator.match((LocalDeclaration) this.astStack[this.astPtr], this.nodeSet); +} protected void consumeLocalVariableDeclaration() { super.consumeLocalVariableDeclaration(); #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/JavaSearchGenericFieldTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchGenericFieldTests.java,v retrieving revision 1.10 diff -u -r1.10 JavaSearchGenericFieldTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchGenericFieldTests.java 29 Mar 2006 04:03:07 -0000 1.10 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchGenericFieldTests.java 10 Nov 2006 21:37:26 -0000 @@ -758,9 +758,13 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R1.java", "gen_run)", "gen_run"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic) [gen_obj] EXACT_MATCH\n" + + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic).gen_exc [gen_exc] EXACT_MATCH\n" + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic) [gen_exc] EXACT_MATCH\n" + + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic).gen_thr [gen_thr] EXACT_MATCH\n" + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic) [gen_thr] EXACT_MATCH\n" + + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic).gen_run [gen_run] EXACT_MATCH\n" + "src/g4/v/ref/R1.java void g4.v.ref.R1.simple_name(Generic, Generic, Generic, Generic) [gen_run] EXACT_MATCH", resultCollector); } @@ -796,9 +800,13 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R2.java", "gen_run)", "gen_run"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember) [gen_obj] EXACT_MATCH\n" + + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember).gen_exc [gen_exc] EXACT_MATCH\n" + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember) [gen_exc] EXACT_MATCH\n" + + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember).gen_thr [gen_thr] EXACT_MATCH\n" + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember) [gen_thr] EXACT_MATCH\n" + + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember).gen_run [gen_run] EXACT_MATCH\n" + "src/g4/v/ref/R2.java void g4.v.ref.R2.qualified_name(g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember, g1.t.s.def.NonGeneric.GenericMember) [gen_run] EXACT_MATCH", resultCollector); } @@ -834,9 +842,13 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R3.java", "gen_run)", "gen_run"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric) [gen_obj] EXACT_MATCH\n" + + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric).gen_exc [gen_exc] EXACT_MATCH\n" + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric) [gen_exc] EXACT_MATCH\n" + + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric).gen_thr [gen_thr] EXACT_MATCH\n" + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric) [gen_thr] EXACT_MATCH\n" + + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric).gen_run [gen_run] EXACT_MATCH\n" + "src/g4/v/ref/R3.java void g4.v.ref.R3.simple_name(Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric, Generic.MemberGeneric) [gen_run] EXACT_MATCH", resultCollector); } @@ -872,9 +884,13 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R4.java", "gen_run)", "gen_run"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member) [gen_obj] EXACT_MATCH\n" + + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member).gen_exc [gen_exc] EXACT_MATCH\n" + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member) [gen_exc] EXACT_MATCH\n" + + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member).gen_thr [gen_thr] EXACT_MATCH\n" + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member) [gen_thr] EXACT_MATCH\n" + + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member).gen_run [gen_run] EXACT_MATCH\n" + "src/g4/v/ref/R4.java void g4.v.ref.R4.qualified_name(g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member, g1.t.s.def.Generic.Member) [gen_run] EXACT_MATCH", resultCollector); } @@ -908,8 +924,11 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R5.java", "gen_obj) // simple", "gen_obj"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>).gen_wld [gen_wld] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>) [gen_wld] EXACT_MATCH\n" + + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>).gen_www [gen_www] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>) [gen_www] EXACT_MATCH\n" + + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.simple_name(GM,GS,GS>, GM,GS>,GS>>>, GM,GS,GS>) [gen_obj] EXACT_MATCH", resultCollector); } @@ -939,8 +958,11 @@ localVar = getLocalVariable("/JavaSearch15/src/g4/v/ref/R5.java", "gen_obj) // qualified", "gen_obj"); search(localVar, ALL_OCCURRENCES, scope, resultCollector); assertSearchResults( + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>).gen_wld [gen_wld] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>) [gen_wld] EXACT_MATCH\n" + + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>).gen_www [gen_www] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>) [gen_www] EXACT_MATCH\n" + + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>).gen_obj [gen_obj] EXACT_MATCH\n" + "src/g4/v/ref/R5.java void g4.v.ref.R5.qualified_name(g3.t.def.GS>, g3.t.def.GS,g3.t.def.GM,g3.t.def.GM>>, g3.t.def.GS>) [gen_obj] EXACT_MATCH", resultCollector); } Index: src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java,v retrieving revision 1.93 diff -u -r1.93 JavaSearchBugsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 10 Nov 2006 17:53:47 -0000 1.93 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java 10 Nov 2006 21:37:23 -0000 @@ -7658,4 +7658,43 @@ // Should have same types with these 2 searches assertEquals("Found types sounds not to be correct", requestor.toString(), collector.toString()); } + +/** + * @bug 164121: [search] Misses declarations of method parameters + * @test Ensure that param declaration are correctly found by search engine + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=164121" + */ +private void setUpBug164121() throws CoreException { + workingCopies = new ICompilationUnit[1]; + workingCopies[0] = getWorkingCopy("/JavaSearchBugs/src/A.java", + "class A {\n" + + " int x(int param) {\n" + + " param = 2 + 2;\n" + + " int x = param + 2;\n" + + " return param - x;\n" + + " }\n" + + "}\n" + ); +} +public void testBug164121a() throws CoreException { + resultCollector.showRule = true; + setUpBug164121(); + ILocalVariable param = getLocalVariable(this.workingCopies[0], "param", "param"); + search(param, DECLARATIONS); + assertSearchResults( + "src/A.java int A.x(int).param [param] EXACT_MATCH" + ); +} +public void testBug164121b() throws CoreException { + resultCollector.showRule = true; + setUpBug164121(); + ILocalVariable param = getLocalVariable(this.workingCopies[0], "param", "param"); + search(param, ALL_OCCURRENCES); + assertSearchResults( + "src/A.java int A.x(int).param [param] EXACT_MATCH\n" + + "src/A.java int A.x(int) [param] EXACT_MATCH\n" + + "src/A.java int A.x(int) [param] EXACT_MATCH\n" + + "src/A.java int A.x(int) [param] EXACT_MATCH" + ); +} } \ No newline at end of file