diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java index f7681726e89..efa60eddc5a 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -67,8 +67,16 @@ public class K2JVMCompiler extends CLICompiler { "Using Kotlin home directory " + paths.getHomePath(), CompilerMessageLocation.NO_LOCATION); CompilerConfiguration configuration = new CompilerConfiguration(); - configuration.addAll(JVMConfigurationKeys.CLASSPATH_KEY, getClasspath(paths, arguments)); - configuration.addAll(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, getAnnotationsPath(paths, arguments)); + + try { + configuration.addAll(JVMConfigurationKeys.CLASSPATH_KEY, getClasspath(paths, arguments)); + configuration.addAll(JVMConfigurationKeys.ANNOTATIONS_PATH_KEY, getAnnotationsPath(paths, arguments)); + } + catch (Throwable t) { + messageCollector.report(CompilerMessageSeverity.EXCEPTION, MessageRenderer.PLAIN.renderException(t), + CompilerMessageLocation.NO_LOCATION); + return INTERNAL_ERROR; + } final List argumentsSourceDirs = arguments.getSourceDirs(); if (!arguments.script && diff --git a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java index 6b92987a052..4b5371f7d90 100644 --- a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java +++ b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.utils; import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; @@ -138,30 +139,25 @@ public class PathUtil { @NotNull public static File findRtJar() { - String javaHome = System.getProperty("java.home"); - if ("jre".equals(new File(javaHome).getName())) { - javaHome = new File(javaHome).getParent(); - } - - File rtJar = findRtJar(javaHome); - - if (rtJar == null || !rtJar.exists()) { - throw new IllegalArgumentException("No JDK rt.jar found under " + javaHome); - } - - return rtJar; + return findRtJar(System.getProperty("java.home")); } private static File findRtJar(String javaHome) { - File rtJar = new File(javaHome, "jre/lib/rt.jar"); - if (rtJar.exists()) { - return rtJar; - } + if (SystemInfo.isMac) { + File classesJar = new File(new File(javaHome).getParentFile(), "Classes/classes.jar"); + if (classesJar.exists()) { + return classesJar; + } - File classesJar = new File(new File(javaHome).getParentFile().getAbsolutePath(), "Classes/classes.jar"); - if (classesJar.exists()) { - return classesJar; + throw new IllegalArgumentException("No classes.jar found under " + classesJar.getParent()); + } + else { + File rtJar = new File(javaHome, "lib/rt.jar"); + if (rtJar.exists()) { + return rtJar; + } + + throw new IllegalArgumentException("No rt.jar found under " + rtJar.getParent()); } - return null; } }