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;