Bug 577184 - fix URI for windows systems in Target refs
Change-Id: Ic040aeb62e21431480833e86270cb7512a494a5e
Signed-off-by: Christoph Läubrich <laeubi@laeubi-soft.de>
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/190949
Tested-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
Reviewed-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
index ef04da5..259af09 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/RemoteTargetHandle.java
@@ -38,6 +38,8 @@
UNKNWON, EXISTS, NOT_FOUND, FAILED;
}
+ private static final String FILE_SCHEMA = "file:"; //$NON-NLS-1$
+
private static final Map<URI, RemoteTargetHandle> REMOTE_HANDLES = new ConcurrentHashMap<>();
/**
* URI scheme for local targets
@@ -110,7 +112,7 @@
Objects.requireNonNull(uri);
try {
IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
- URI resolvedUri = new URI(manager.performStringSubstitution(uri));
+ URI resolvedUri = new URI(convertRawToUri(manager.performStringSubstitution(uri)));
RemoteTargetHandle handle = REMOTE_HANDLES.computeIfAbsent(resolvedUri, RemoteTargetHandle::new);
synchronized (handle) {
if (handle.state != RemoteState.EXISTS) {
@@ -125,4 +127,15 @@
}
}
+ static String convertRawToUri(String resolvePath) {
+ // We need to convert windows path separators here...
+ resolvePath = resolvePath.replace('\\', '/');
+ String lc = resolvePath.toLowerCase();
+ if (lc.startsWith(FILE_SCHEMA) && lc.charAt(FILE_SCHEMA.length()) != '/') {
+ // according to rfc a file URI must always start with a slash
+ resolvePath = FILE_SCHEMA + '/' + resolvePath.substring(FILE_SCHEMA.length());
+ }
+ return resolvePath;
+ }
+
}