Bug 537666 - fix test for not existing class folders on Windows
On Windows, external class folders are always encoded with a device part
in the path. Assume that if the device part is missing on Windows, the
path to check can't represent external folder. Of course this could be a
path encoded on Linux, but in this case the project classpath is not
portable anyway.
Change-Id: I3fbd8546809176e33d4d9828310b0980a4b4e70a
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
index 1fb7531..77ac23c 100644
--- a/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
+++ b/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ExternalFoldersManager.java
@@ -55,8 +55,10 @@
import org.eclipse.jdt.internal.core.DeltaProcessor.RootInfo;
import org.eclipse.jdt.internal.core.util.Messages;
import org.eclipse.jdt.internal.core.util.Util;
+import org.eclipse.osgi.service.environment.Constants;
public class ExternalFoldersManager {
+ private static final boolean WINDOWS = Platform.getOS().equals(Constants.OS_WIN32);
private static final String EXTERNAL_PROJECT_NAME = ".org.eclipse.jdt.core.external.folders"; //$NON-NLS-1$
private static final String LINKED_FOLDER_NAME = ".link"; //$NON-NLS-1$
private Map<IPath, IFolder> folders;
@@ -118,11 +120,12 @@
if (externalPath == null || externalPath.isEmpty()) {
return false;
}
+
JavaModelManager manager = JavaModelManager.getJavaModelManager();
if (manager.isExternalFile(externalPath) || manager.isAssumedExternalFile(externalPath)) {
return false;
}
- if (!externalPath.isAbsolute()) {
+ if (!externalPath.isAbsolute() || (WINDOWS && externalPath.getDevice() == null)) {
// can be only project relative path
return false;
}
@@ -142,12 +145,14 @@
if (isInternalContainerPath(externalPath)) {
return false;
}
+ // From here on the legacy code assumes that not existing resource must be external.
+ // We just follow the old assumption.
if (externalPath.getFileExtension() != null/*likely a .jar, .zip, .rar or other file*/) {
manager.addAssumedExternalFile(externalPath);
- // not existing external file
+ // assume not existing external (?) file (?) (can also be a folder with dotted name!)
return false;
}
- // not existing external folder
+ // assume not existing external (?) folder (?)
return true;
}