diff --git a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java index fb4ba4b3ec6a..953b22827ad2 100644 --- a/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java +++ b/java/java-impl/src/com/intellij/openapi/projectRoots/impl/JavaSdkImpl.java @@ -24,6 +24,7 @@ import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.*; import com.intellij.util.containers.HashMap; import org.jdom.Element; @@ -39,7 +40,7 @@ import java.util.regex.Pattern; /** * @author Eugene Zhuravlev - * Date: Sep 17, 2004 + * @since Sep 17, 2004 */ public class JavaSdkImpl extends JavaSdk { // do not use javaw.exe for Windows because of issues with encoding @@ -450,25 +451,26 @@ public class JavaSdkImpl extends JavaSdk { } private static VirtualFile[] findClasses(File file, boolean isJre) { - FileFilter jarFileFilter = new FileFilter(){ + FileFilter jarFileFilter = new FileFilter() { @Override @SuppressWarnings({"HardCodedStringLiteral"}) - public boolean accept(File f){ + public boolean accept(File f) { return !f.isDirectory() && f.getName().endsWith(".jar"); } }; File[] jarDirs; - if(SystemInfo.isMac && /*!ApplicationManager.getApplication().isUnitTestMode()) &&*/ !file.getName().startsWith("mockJDK")){ + if (SystemInfo.isMac && !file.getName().startsWith("mockJDK")) { final File openJdkRtJar = new File(new File(new File(file, "jre"), "lib"), "rt.jar"); if (openJdkRtJar.exists() && !openJdkRtJar.isDirectory()) { - // openjdk + // OpenJDK File libFile = new File(file, "lib"); @NonNls File classesFile = openJdkRtJar.getParentFile(); @NonNls File libExtFile = new File(openJdkRtJar.getParentFile(), "ext"); @NonNls File libEndorsedFile = new File(libFile, "endorsed"); jarDirs = new File[]{libEndorsedFile, libFile, classesFile, libExtFile}; - } else { + } + else { File libFile = new File(file, "lib"); @NonNls File classesFile = new File(file, "../Classes"); @NonNls File libExtFile = new File(libFile, "ext"); @@ -476,7 +478,7 @@ public class JavaSdkImpl extends JavaSdk { jarDirs = new File[]{libEndorsedFile, libFile, classesFile, libExtFile}; } } - else{ + else { @NonNls final String jre = "jre"; File jreLibFile = isJre ? new File(file, "lib") : new File(new File(file, jre), "lib"); @NonNls File jreLibExtFile = new File(jreLibFile, "ext"); @@ -506,19 +508,27 @@ public class JavaSdkImpl extends JavaSdk { ArrayList result = new ArrayList(); for (File child : children) { - String url = JarFileSystem.PROTOCOL_PREFIX + child.getAbsolutePath().replace(File.separatorChar, '/') + JarFileSystem.JAR_SEPARATOR; + String url = JarFileSystem.PROTOCOL_PREFIX + FileUtil.toSystemIndependentName(child.getAbsolutePath()) + JarFileSystem.JAR_SEPARATOR; VirtualFile vFile = VirtualFileManager.getInstance().findFileByUrl(url); if (vFile != null) { result.add(vFile); } } - - @NonNls File classesZipFile = new File(new File(file, "lib"), "classes.zip"); - if(!classesZipFile.isDirectory() && classesZipFile.exists()){ - String url = - JarFileSystem.PROTOCOL_PREFIX + classesZipFile.getAbsolutePath().replace(File.separatorChar, '/') + JarFileSystem.JAR_SEPARATOR; + + File classesZip = new File(new File(file, "lib"), "classes.zip"); + if (classesZip.isFile()) { + String url = JarFileSystem.PROTOCOL_PREFIX + FileUtil.toSystemIndependentName(classesZip.getAbsolutePath()) + JarFileSystem.JAR_SEPARATOR; VirtualFile vFile = VirtualFileManager.getInstance().findFileByUrl(url); - if (vFile != null){ + if (vFile != null) { + result.add(vFile); + } + } + + File classesDir = new File(file, "classes"); + if (result.isEmpty() && classesDir.isDirectory()) { + String url = LocalFileSystem.PROTOCOL_PREFIX + FileUtil.toSystemIndependentName(classesDir.getAbsolutePath()); + VirtualFile vFile = VirtualFileManager.getInstance().findFileByUrl(url); + if (vFile != null) { result.add(vFile); } } diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java index d00c0a8e50a4..3694101ae83c 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java @@ -149,10 +149,11 @@ public class JdkUtil { } public static boolean checkForRuntime(final String homePath) { - return new File(homePath + File.separator + "jre" + File.separator + "lib" + File.separator + "rt.jar").exists() || - new File(homePath + File.separator + "lib" + File.separator + "rt.jar").exists() || - new File(homePath + File.separator + ".." + File.separator + "Classes" + File.separator + "classes.jar").exists() || - new File(homePath + File.separator + "jre" + File.separator + "lib" + File.separator + "vm.jar").exists(); + return new File(new File(new File(homePath, "jre"), "lib"), "rt.jar").exists() || + new File(new File(homePath, "lib"), "rt.jar").exists() || + new File(new File(new File(homePath, ".."), "Classes"), "classes.jar").exists() || // Apple JDK + new File(new File(new File(homePath, "jre"), "lib"), "vm.jar").exists() || // IBM JDK + new File(homePath, "classes").isDirectory(); // custom build } public static GeneralCommandLine setupJVMCommandLine(final String exePath,