### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java,v retrieving revision 1.313 diff -u -r1.313 MatchLocator.java --- search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 28 Mar 2008 16:30:25 -0000 1.313 +++ search/org/eclipse/jdt/internal/core/search/matching/MatchLocator.java 6 May 2008 22:05:28 -0000 @@ -2169,7 +2169,7 @@ // Look for annotation type ref TypeReference typeRef = annotationType.type; Integer level = (Integer) nodeSet.matchingNodes.removeKey(typeRef); - if (level != null && matchedContainer) { + if (level != null && enclosesElement && matchedContainer) { localElement = createHandle(annotationType, (IAnnotatable) enclosingElement); this.patternLocator.matchReportReference(typeRef, enclosingElement, localElement, otherElements, elementBinding, level.intValue(), this); } #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java,v retrieving revision 1.48 diff -u -r1.48 JavaSearchMultipleProjectsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 9 Jan 2008 08:36:06 -0000 1.48 +++ src/org/eclipse/jdt/core/tests/model/JavaSearchMultipleProjectsTests.java 6 May 2008 22:05:33 -0000 @@ -1278,4 +1278,62 @@ } } +/** + * @bug 229128: JDT Search finding matches in working copies that are not part of scope + * @test Ensure that an annotation reference is not found in a working copy if outside the scope + * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=229128" + */ +public void testBug229128() throws CoreException { + ICompilationUnit[] copies = new ICompilationUnit[2]; + try { + // setup project P1 + createJavaProject("P1", new String[] {""}, new String[] {"JCL15_LIB"}, "", "1.5"); + createFolder("/P1/p"); + createFile( + "/P1/p/MyAnnot.java", + "package p;\n" + + "public @interface MyAnnot {\n" + + "}\n" + ); + copies[0] = getWorkingCopy( + "/P1/p/X.java", + "package p;\n" + + "@MyAnnot\n" + + "public class X {\n" + + "}\n", + null/*default working copy owner*/ + ); + + // setup project P2 + IJavaProject p2 = createJavaProject("P2", new String[] {""}, new String[] {"JCL15_LIB"}, new String[] { "/P1" }, "", "1.5"); + createFolder("/P2/q"); + copies[1] = getWorkingCopy( + "/P2/q/Y.java", + "package q;\n" + + "@p.MyAnnot\n" + + "public class Y {\n" + + "}\n", + null/*default working copy owner*/ + ); + + // Get annotation type + IType type = getCompilationUnit("/P1/p/MyAnnot.java").getType("MyAnnot"); + + // search annotation type reference in P2 scope + IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {p2}, false/*don't include referenced projects*/); + JavaSearchResultCollector resultCollector = new JavaSearchResultCollector(); + resultCollector.showProject = true; + resultCollector.showAccuracy = true; + search(type, ANNOTATION_TYPE_REFERENCE, scope, resultCollector); + assertSearchResults( + "Unexpected references of annotation type MyAnnot", + "q/Y.java [in P2] q.Y [p.MyAnnot] EXACT_MATCH", + resultCollector); + } finally { + discardWorkingCopies(copies); + deleteProject("P1"); + deleteProject("P2"); + } +} + } Index: src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java,v retrieving revision 1.211 diff -u -r1.211 AbstractJavaModelTests.java --- src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 23 Apr 2008 19:43:16 -0000 1.211 +++ src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 6 May 2008 22:05:33 -0000 @@ -1887,9 +1887,11 @@ else workingCopy.becomeWorkingCopy(null/*no progress monitor*/); workingCopy.getBuffer().setContents(source); - IProblemRequestor problemRequestor = owner.getProblemRequestor(workingCopy); - if (problemRequestor instanceof ProblemRequestor) { - ((ProblemRequestor) problemRequestor).initialize(source.toCharArray()); + if (owner != null) { + IProblemRequestor problemRequestor = owner.getProblemRequestor(workingCopy); + if (problemRequestor instanceof ProblemRequestor) { + ((ProblemRequestor) problemRequestor).initialize(source.toCharArray()); + } } workingCopy.makeConsistent(null/*no progress monitor*/); return workingCopy;