Bug 576425 - Support mapping of resources to remote URIs
Support mapping of resources to remote URIs, inverse of the mapping
provided by I0362aecc8d5b905b481fa5a4f27d2c5f4f862112
Change-Id: Ida41f97f25929523381ee7b2077cdf358bd1f9f7
diff --git a/org.eclipse.lsp4e.test/fragment.xml b/org.eclipse.lsp4e.test/fragment.xml
index b4d226c..dc26039 100644
--- a/org.eclipse.lsp4e.test/fragment.xml
+++ b/org.eclipse.lsp4e.test/fragment.xml
@@ -184,7 +184,7 @@
class="org.eclipse.lsp4e.test.CreateAndRegisterContentTypeLSPLaunchConfigMapping">
</startup>
</extension>
-
+
<extension
point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
@@ -195,7 +195,7 @@
type="java.lang.Object">
</propertyTester>
</extension>
- <extension
+ <extension
point="org.eclipse.core.filesystem.filesystems">
<filesystem scheme="other">
<run class="org.eclipse.lsp4e.test.OtherFileSystem" />
@@ -221,4 +221,14 @@
</adapter>
</factory>
</extension>
+ <extension
+ point="org.eclipse.core.runtime.adapters">
+ <factory
+ adaptableType="org.eclipse.core.resources.IFile"
+ class="org.eclipse.lsp4e.test.UriToResourceAdapterFactory">
+ <adapter
+ type="java.net.URI">
+ </adapter>
+ </factory>
+ </extension>
</fragment>
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
index c050154..74a4a65 100644
--- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
+++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/UriToResourceAdapterFactory.java
@@ -26,15 +26,15 @@
*
*/
public class UriToResourceAdapterFactory implements IAdapterFactory{
-
-
+
+
private static final String A_SEGMENT = "/a/";
@SuppressWarnings("unchecked")
@Override
public <T> T getAdapter(final Object adaptableObject, final Class<T> adapterType) {
if (adaptableObject instanceof String) {
- URI uri = URI.create(((String) adaptableObject).replace(A_SEGMENT, ""));
+ URI uri = URI.create(((String) adaptableObject).replace(A_SEGMENT, ""));
String path = uri.getPath();
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(LSPEclipseUtilsTest.class.getSimpleName() + uri.getScheme());
if (path != null) {
@@ -44,12 +44,18 @@
return (T) project.getFile(path);
}
}
+ } else if (adaptableObject instanceof IFile) {
+ URI uri = ((IResource)adaptableObject).getLocationURI();
+ IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(LSPEclipseUtilsTest.class.getSimpleName() + uri.getScheme());
+ if (project != null && uri.getScheme().equals("other")) {
+ return (T) URI.create(uri.toString().replaceAll("//", "/" + A_SEGMENT));
+ }
}
return null;
}
@Override
public Class<?>[] getAdapterList() {
- return new Class<?>[] {IResource.class, IFile.class};
+ return new Class<?>[] {IResource.class, IFile.class, URI.class};
}
}
diff --git a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
index d7ce489..86f83d7 100644
--- a/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
+++ b/org.eclipse.lsp4e.test/src/org/eclipse/lsp4e/test/edit/LSPEclipseUtilsTest.java
@@ -156,7 +156,7 @@
IFile file = project1.getFile("res");
file.create(new ByteArrayInputStream(new byte[0]), true, new NullProgressMonitor());
Assert.assertEquals(file, LSPEclipseUtils.findResourceFor(file.getLocationURI().toString()));
-
+
project1.getFile("suffix").create(new ByteArrayInputStream(new byte[0]), true, new NullProgressMonitor());
project2 = TestUtils.createProject(project1.getName() + "suffix");
Assert.assertEquals(project2, LSPEclipseUtils.findResourceFor(project2.getLocationURI().toString()));
@@ -167,7 +167,7 @@
}
@Test
- public void testURIToLinkedResourceMapping() throws CoreException { // bug 576425
+ public void testCustomURIToResourceMapping() throws CoreException { // bug 576425
IProject project = null;
try {
URI uri = URI.create("other://a/res.txt");
@@ -180,7 +180,21 @@
if (project != null) { project.delete(true, new NullProgressMonitor()); }
}
}
-
+
+ @Test
+ public void testCustomResourceToURIMapping() throws CoreException { // bug 576425
+ IProject project = null;
+ try {
+ URI uri = URI.create("other://res.txt");
+ project = TestUtils.createProject(getClass().getSimpleName() + uri.getScheme());
+ IFile file = project.getFile("res.txt");
+ file.createLink(uri, IResource.REPLACE | IResource.ALLOW_MISSING_LOCAL, new NullProgressMonitor());
+ Assert.assertEquals(LSPEclipseUtils.toUri(file).toString(), "other://a/res.txt");
+ } finally {
+ if (project != null) { project.delete(true, new NullProgressMonitor()); }
+ }
+ }
+
@Test
public void testApplyTextEditLongerThanOrigin() throws Exception {
IProject project = null;
@@ -199,7 +213,7 @@
if (project != null) { project.delete(true, new NullProgressMonitor()); }
}
}
-
+
@Test
public void testApplyTextEditShorterThanOrigin() throws Exception {
IProject project = null;
diff --git a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
index f75a06e..e6f2d32 100644
--- a/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
+++ b/org.eclipse.lsp4e/src/org/eclipse/lsp4e/LSPEclipseUtils.java
@@ -769,6 +769,10 @@
}
public static URI toUri(IResource resource) {
+ URI adaptedURI = Adapters.adapt(resource, URI.class, true);
+ if (adaptedURI != null) {
+ return adaptedURI;
+ }
IPath location = resource.getLocation();
if (location != null) {
return toUri(location);