View | Details | Raw Unified | Return to bug 228852
Collapse All | Expand All

(-)search/org/eclipse/jdt/internal/core/search/JavaSearchScope.java (-1 / +4 lines)
Lines 599-605 Link Here
599
		if (projectPath != null) {
599
		if (projectPath != null) {
600
			IJavaProject project =JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().getProject(projectPath));
600
			IJavaProject project =JavaCore.create(ResourcesPlugin.getWorkspace().getRoot().getProject(projectPath));
601
			if (isJarFile) {
601
			if (isJarFile) {
602
				return project.getPackageFragmentRoot(this.containerPaths[index]);
602
				IResource resource = JavaModel.getWorkspaceTarget(new Path(jarPath));
603
				if (resource != null)
604
					return project.getPackageFragmentRoot(resource);
605
				return project.getPackageFragmentRoot(jarPath);
603
			}
606
			}
604
			Object target = JavaModel.getWorkspaceTarget(new Path(this.containerPaths[index]+'/'+this.relativePaths[index]));
607
			Object target = JavaModel.getWorkspaceTarget(new Path(this.containerPaths[index]+'/'+this.relativePaths[index]));
605
			if (target instanceof IProject) {
608
			if (target instanceof IProject) {
(-)search/org/eclipse/jdt/internal/core/search/JavaWorkspaceScope.java (-7 / +3 lines)
Lines 127-147 Link Here
127
	if (jarPath != null) {
127
	if (jarPath != null) {
128
		IPath path = new Path(jarPath);
128
		IPath path = new Path(jarPath);
129
		rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
129
		rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
130
		if (rootInfo == null)
131
			return null;
132
		return rootInfo.project.getPackageFragmentRoot0(path);
133
	} else {
130
	} else {
134
		// resource in workspace
135
		IPath path = new Path(resourcePathString);
131
		IPath path = new Path(resourcePathString);
136
		rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
132
		rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
137
		while (rootInfo == null && path.segmentCount() > 0) {
133
		while (rootInfo == null && path.segmentCount() > 0) {
138
			path = path.removeLastSegments(1);
134
			path = path.removeLastSegments(1);
139
			rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
135
			rootInfo = (DeltaProcessor.RootInfo) rootInfos.get(path);
140
		}
136
		}
141
		if (rootInfo == null)
142
			return null;
143
		return rootInfo.getPackageFragmentRoot(null/*no resource hint*/);
144
	}
137
	}
138
	if (rootInfo == null)
139
		return null;
140
	return rootInfo.getPackageFragmentRoot(null/*no resource hint*/);
145
}
141
}
146
142
147
public void processDelta(IJavaElementDelta delta, int eventType) {
143
public void processDelta(IJavaElementDelta delta, int eventType) {
(-)model/org/eclipse/jdt/internal/core/JavaProject.java (-6 / +6 lines)
Lines 1669-1686 Link Here
1669
	/**
1669
	/**
1670
	 * @see IJavaProject
1670
	 * @see IJavaProject
1671
	 */
1671
	 */
1672
	public IPackageFragmentRoot getPackageFragmentRoot(String libraryPath) {
1672
	public IPackageFragmentRoot getPackageFragmentRoot(String externalLibraryPath) {
1673
		return getPackageFragmentRoot0(JavaProject.canonicalizedPath(new Path(libraryPath)));
1673
		return getPackageFragmentRoot0(JavaProject.canonicalizedPath(new Path(externalLibraryPath)));
1674
	}
1674
	}
1675
1675
1676
	/*
1676
	/*
1677
	 * no path canonicalization
1677
	 * no path canonicalization
1678
	 */
1678
	 */
1679
	public IPackageFragmentRoot getPackageFragmentRoot0(IPath libraryPath) {
1679
	public IPackageFragmentRoot getPackageFragmentRoot0(IPath externalLibraryPath) {
1680
		IFolder linkedFolder = JavaModelManager.getExternalManager().getFolder(libraryPath);
1680
		IFolder linkedFolder = JavaModelManager.getExternalManager().getFolder(externalLibraryPath);
1681
		if (linkedFolder != null)
1681
		if (linkedFolder != null)
1682
			return new ExternalPackageFragmentRoot(linkedFolder, libraryPath, this);
1682
			return new ExternalPackageFragmentRoot(linkedFolder, externalLibraryPath, this);
1683
		return new JarPackageFragmentRoot(libraryPath, this);
1683
		return new JarPackageFragmentRoot(externalLibraryPath, this);
1684
	}
1684
	}
1685
1685
1686
	/**
1686
	/**
(-)model/org/eclipse/jdt/internal/core/JarPackageFragmentRoot.java (-2 / +2 lines)
Lines 49-57 Link Here
49
	 * based on a JAR file that is not contained in a <code>IJavaProject</code> and
49
	 * based on a JAR file that is not contained in a <code>IJavaProject</code> and
50
	 * does not have an associated <code>IResource</code>.
50
	 * does not have an associated <code>IResource</code>.
51
	 */
51
	 */
52
	protected JarPackageFragmentRoot(IPath jarPath, JavaProject project) {
52
	protected JarPackageFragmentRoot(IPath externalJarPath, JavaProject project) {
53
		super(null, project);
53
		super(null, project);
54
		this.jarPath = jarPath;
54
		this.jarPath = externalJarPath;
55
	}
55
	}
56
	/**
56
	/**
57
	 * Constructs a package fragment root which is the root of the Java package directory hierarchy 
57
	 * Constructs a package fragment root which is the root of the Java package directory hierarchy 
(-)src/org/eclipse/jdt/core/tests/model/JavaSearchBugsTests.java (+67 lines)
Lines 10001-10004 Link Here
10001
		"src/Z.java Z [public class Z<T extends X<?> & §|I|§<?>> {] ERASURE_MATCH"
10001
		"src/Z.java Z [public class Z<T extends X<?> & §|I|§<?>> {] ERASURE_MATCH"
10002
	);
10002
	);
10003
}
10003
}
10004
10005
/**
10006
 * @bug 228852: classes opened via Open Type not found
10007
 * @test Ensure that types found in an internal jar exist when using a workspace scope
10008
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852"
10009
 */
10010
public void testBug228852a() throws Exception {
10011
	try {
10012
		IJavaProject p = createJavaProject("P", new String[] {}, new String[] {"/P/lib228852.jar"}, "");
10013
		createJar(new String[] {
10014
			"p228852/X228852.java",
10015
			"package p228852;\n" +
10016
			"public class X228852 {\n" +
10017
			"}"
10018
		}, p.getProject().getLocation().append("lib228852.jar").toOSString());
10019
		refresh(p);
10020
		
10021
		char[][] packagesList = new char[][] {
10022
				"p228852".toCharArray()
10023
		};
10024
		TypeNameMatchCollector collector = new TypeNameMatchCollector();
10025
		new SearchEngine().searchAllTypeNames(
10026
			packagesList,
10027
			null,
10028
			SearchEngine.createWorkspaceScope(),
10029
			collector,
10030
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
10031
			null);
10032
		assertTrue("p228852.X228852 should exist", ((IJavaElement) collector.matches.get(0)).exists());
10033
	} finally {
10034
		deleteProject("P");
10035
	}
10036
}
10037
10038
/**
10039
 * @bug 228852: classes opened via Open Type not found
10040
 * @test Ensure that types found in an internal jar exist when using a Java search scope
10041
 * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=228852"
10042
 */
10043
public void testBug228852b() throws Exception {
10044
	try {
10045
		IJavaProject p = createJavaProject("P", new String[] {}, new String[] {"/P/lib228852.jar"}, "");
10046
		createJar(new String[] {
10047
			"p228852/X228852.java",
10048
			"package p228852;\n" +
10049
			"public class X228852 {\n" +
10050
			"}"
10051
		}, p.getProject().getLocation().append("lib228852.jar").toOSString());
10052
		refresh(p);
10053
		
10054
		char[][] packagesList = new char[][] {
10055
				"p228852".toCharArray()
10056
		};
10057
		TypeNameMatchCollector collector = new TypeNameMatchCollector();
10058
		new SearchEngine().searchAllTypeNames(
10059
			packagesList,
10060
			null,
10061
			SearchEngine.createJavaSearchScope(new IJavaElement[] {p}),
10062
			collector,
10063
			IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
10064
			null);
10065
		assertTrue("p228852.X228852 should exist", ((IJavaElement) collector.matches.get(0)).exists());
10066
	} finally {
10067
		deleteProject("P");
10068
	}
10069
}
10070
10004
}
10071
}

Return to bug 228852