Skip to content

Commit 9f47e43

Browse files
committed
find platform resources for file URI
1 parent 226a24b commit 9f47e43

File tree

1 file changed

+36
-3
lines changed

1 file changed

+36
-3
lines changed

org.eclipse.emf.util/src/org/eclipse/emf/util/ResourceUtils.java

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.eclipse.emf.util;
22

3+
import java.io.File;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
37
import org.eclipse.core.resources.IResource;
48
import org.eclipse.core.resources.ResourcesPlugin;
59
import org.eclipse.emf.common.util.URI;
@@ -23,9 +27,38 @@ public static IResource convertEResourceToPlatformResource(Resource eResource) {
2327
public static IResource findPlatformResource(URI uri) {
2428
if (uri.isPlatformResource()) {
2529
return ResourcesPlugin.getWorkspace().getRoot().findMember(uri.toPlatformString(true));
26-
} else {
27-
return null;
30+
} else if (uri.isFile()) {
31+
java.net.URI fileURI = java.net.URI.create(uri.toString());
32+
List<IResource> candidates = findPlatformResources(fileURI);
33+
if (!candidates.isEmpty()) {
34+
return candidates.get(0);
35+
}
2836
}
37+
return null;
2938
}
3039

31-
}
40+
/**
41+
* returns a list of (existing) platform resource for the given file uri
42+
*
43+
* returns an empty list if no such resource exists or if the given URI is not a
44+
* file uri
45+
*/
46+
public static List<IResource> findPlatformResources(java.net.URI fileURI) {
47+
List<IResource> result = new ArrayList<>();
48+
File file = new File(fileURI.getRawPath());// remove potential fragment
49+
if (file.exists()) {
50+
IResource[] candidates = null;
51+
if (file.isDirectory()) {
52+
candidates = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(fileURI);
53+
} else if (file.isFile()) {
54+
candidates = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(fileURI);
55+
}
56+
for (IResource candidate : candidates) {
57+
if (candidate.exists()) {
58+
result.add(candidate);
59+
}
60+
}
61+
}
62+
return result;
63+
}
64+
}

0 commit comments

Comments
 (0)