diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt index e457f0dd720..a2d0fef9845 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt @@ -142,7 +142,11 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR if (compilationErrors) { return ABORT } - + + if (JpsUtils.isJsKotlinModule(chunk.representativeTarget())) { + copyJsLibraryFilesIfNeeded(chunk, project) + } + if (IncrementalCompilation.ENABLED) { if (recompilationDecision == IncrementalCacheImpl.RecompilationDecision.RECOMPILE_ALL) { allCompiledFiles.clear() @@ -304,13 +308,19 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(project) runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, messageCollector, environment, outputItemCollector, sourceFiles, libraryFiles, outputFile) + return outputItemCollector + } + + private fun copyJsLibraryFilesIfNeeded(chunk: ModuleChunk, project: JpsProject) { + val representativeTarget = chunk.representativeTarget() + val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(representativeTarget) + val compilerSettings = JpsKotlinCompilerSettings.getCompilerSettings(project) if (compilerSettings.copyJsLibraryFiles) { val outputLibraryRuntimeDirectory = File(outputDir, compilerSettings.outputDirectoryForJsLibraryFiles).getAbsolutePath() val libraryFilesToCopy = arrayListOf() JpsJsModuleUtils.getLibraryFiles(representativeTarget, libraryFilesToCopy) LibraryUtils.copyJsFilesFromLibraries(libraryFilesToCopy, outputLibraryRuntimeDirectory) } - return outputItemCollector } // if null is returned, nothing was done diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java b/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java index 1dfc85f9b2f..da4377aba83 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/KotlinJpsBuildTest.java @@ -185,6 +185,16 @@ public class KotlinJpsBuildTest extends AbstractKotlinJpsBuildTestCase { checkWhen(touch("src/test1.kt"), null, k2jsOutput(PROJECT_NAME)); } + public void testKotlinJavaScriptProjectWithLibraryAndErrors() { + initProject(); + addKotlinJavaScriptStdlibDependency(); + createKotlinJavaScriptLibraryArchive(); + addKotlinJavaScriptDependency(KOTLIN_JS_LIBRARY, new File(workDir, KOTLIN_JS_LIBRARY_JAR)); + makeAll().assertFailed(); + + assertEquals(Collections.EMPTY_SET, contentOfOutputDir(PROJECT_NAME)); + } + public void testExcludeFolderInSourceRoot() { doTest(); diff --git a/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.iml b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.iml new file mode 100644 index 00000000000..a0cbe548242 --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.ipr b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.ipr new file mode 100644 index 00000000000..12af7dde89a --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/kotlinProject.ipr @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/src/test1.kt b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/src/test1.kt new file mode 100644 index 00000000000..f1204a3d82e --- /dev/null +++ b/jps-plugin/testData/general/KotlinJavaScriptProjectWithLibraryAndErrors/src/test1.kt @@ -0,0 +1,7 @@ +import library.sample.pairAdd + +fun foo() { + val p = Pair1(10, 20) + val x = pairAdd(p) + println("x=$x") +} \ No newline at end of file