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;
 	}