diff --git a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java index 1c84d6781e5..107e9fa6fdd 100644 --- a/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java +++ b/compiler/util/src/org/jetbrains/jet/utils/PathUtil.java @@ -67,6 +67,20 @@ public class PathUtil { return null; } + public static File getCompilerPathForJpsPlugin() { + File plugin_jar_path = new File(getJarPathForClass(PathUtil.class)); + + if (!plugin_jar_path.exists()) return null; + + if (plugin_jar_path.getName().equals("kotlin-jps-plugin.jar")) { + File pluginHome = plugin_jar_path.getParentFile().getParentFile().getParentFile(); + File answer = new File(pluginHome, "kotlinc"); + return answer.exists() ? answer : null; + } + + return null; + } + @Nullable public static File getDefaultRuntimePath() { return getFilePackedIntoLib("kotlin-runtime.jar"); diff --git a/ide-compiler-runner/src/org/jetbrains/jet/compiler/runner/CompilerEnvironment.java b/ide-compiler-runner/src/org/jetbrains/jet/compiler/runner/CompilerEnvironment.java index 5e345f4fbc3..dcd947e95da 100644 --- a/ide-compiler-runner/src/org/jetbrains/jet/compiler/runner/CompilerEnvironment.java +++ b/ide-compiler-runner/src/org/jetbrains/jet/compiler/runner/CompilerEnvironment.java @@ -32,13 +32,17 @@ import static org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity.ERRO public final class CompilerEnvironment { @NotNull - public static CompilerEnvironment getEnvironmentFor(boolean tests, File mainOutput, File outputDirectoryForTests) { + public static CompilerEnvironment getEnvironmentFor(boolean tests, @Nullable File mainOutput, @Nullable File outputDirectoryForTests) { final File outputDir = tests ? outputDirectoryForTests : mainOutput; return getEnvironmentFor(outputDir); } - public static CompilerEnvironment getEnvironmentFor(File outputDir) { + public static CompilerEnvironment getEnvironmentFor(@Nullable File outputDir) { File kotlinHome = PathUtil.getDefaultCompilerPath(); + return getEnvironmentFor(kotlinHome, outputDir); + } + + public static CompilerEnvironment getEnvironmentFor(@Nullable File kotlinHome, @Nullable File outputDir) { return new CompilerEnvironment(kotlinHome, outputDir); } diff --git a/jps-plugin/jps-plugin.iml b/jps-plugin/jps-plugin.iml index e58e9906a3c..21f152906eb 100644 --- a/jps-plugin/jps-plugin.iml +++ b/jps-plugin/jps-plugin.iml @@ -10,6 +10,7 @@ + diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java index fde3fcdbcdc..9573d07f877 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java @@ -22,6 +22,7 @@ import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation; import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.compiler.runner.*; +import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.builders.ChunkBuildOutputConsumer; import org.jetbrains.jps.builders.DirtyFilesHolder; @@ -83,7 +84,7 @@ public class KotlinBuilder extends ModuleLevelBuilder { File outputDir = representativeTarget.getOutputDir(); - CompilerEnvironment environment = CompilerEnvironment.getEnvironmentFor(outputDir); + CompilerEnvironment environment = CompilerEnvironment.getEnvironmentFor(PathUtil.getCompilerPathForJpsPlugin(), outputDir); if (!environment.success()) { environment.reportErrorsTo(messageCollector); return ExitCode.ABORT;