diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index 030c6284145..b065e8962a4 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -388,8 +388,18 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { buildResult.assertSuccessful() val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING) - assertEquals("Warning about duplicate module definition: $warnings", 1, warnings.size) - assertEquals("Module \"srcAndTests\" is defined in more, than one file", warnings.first().messageText) + assertEquals("Warning about duplicate module definition: $warnings", 2, warnings.size) + assertEquals("Module \"srcAndTests\" is defined in more, than one file", warnings[0].messageText) + assertEquals("Module \"srcAndTests\" is defined in more, than one file", warnings[1].messageText) + } + + fun testKotlinJavaScriptProjectWithTwoSrcModuleDependency() { + initProject(JS_STDLIB) + val buildResult = makeAll() + buildResult.assertSuccessful() + + val warnings = buildResult.getMessages(BuildMessage.Kind.WARNING) + assertEquals("Warning about duplicate module definition: $warnings", 0, warnings.size) } fun testExcludeFolderInSourceRoot() { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsJsModuleUtils.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsJsModuleUtils.kt index 9dc917535ce..bdddc9118ee 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsJsModuleUtils.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/build/JpsJsModuleUtils.kt @@ -26,7 +26,7 @@ import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.utils.KotlinJavascriptMetadataUtils import java.io.File -import java.util.ArrayList +import java.util.* object JpsJsModuleUtils { fun getLibraryFilesAndDependencies(target: ModuleBuildTarget): List { @@ -50,20 +50,31 @@ object JpsJsModuleUtils { override fun consume(module: JpsModule) { if (module.moduleType != JpsJavaModuleType.INSTANCE) return - for (root in module.sourceRoots) { - val isTestSource = root.rootType == JavaSourceRootType.TEST_SOURCE + var yieldProduction = module != target.module || target.isTests + var yieldTests = module != target.module - if (module == target.module && isTestSource == target.isTests) continue - - if (!isTestSource || target.isTests) { - val targetType = if (isTestSource) JavaModuleBuildTargetType.TEST else JavaModuleBuildTargetType.PRODUCTION - val moduleBuildTarget = ModuleBuildTarget(module, targetType) - val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget) - val metaInfoFile = getOutputMetaFile(outputDir, module.name) - result.add(metaInfoFile.absolutePath) + module.sourceRoots.forEach { + if (it.rootType == JavaSourceRootType.SOURCE) { + if (yieldProduction) { + addTarget(module, JavaModuleBuildTargetType.PRODUCTION) + yieldProduction = false + } + } + else { + if (yieldTests) { + addTarget(module, JavaModuleBuildTargetType.TEST) + yieldTests = false + } } } } + + fun addTarget(module: JpsModule, targetType: JavaModuleBuildTargetType) { + val moduleBuildTarget = ModuleBuildTarget(module, targetType) + val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget) + val metaInfoFile = getOutputMetaFile(outputDir, module.name) + result.add(metaInfoFile.absolutePath) + } }) } diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.iml new file mode 100644 index 00000000000..3776f58cd73 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.ipr new file mode 100644 index 00000000000..30c1d27da77 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/kotlinProject.ipr @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/src/Main.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/src/Main.kt new file mode 100644 index 00000000000..4ec96fd4e15 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/src/Main.kt @@ -0,0 +1,4 @@ +fun main() { + src() + src2() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src/Src.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src/Src.kt new file mode 100644 index 00000000000..840b4c4a485 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src/Src.kt @@ -0,0 +1,3 @@ +fun src() { + src2() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src2/Src2.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src2/Src2.kt new file mode 100644 index 00000000000..2e9a4c8ea07 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/src2/Src2.kt @@ -0,0 +1,3 @@ +fun src2() { + src() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/srcs.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/srcs.iml new file mode 100644 index 00000000000..cdfacea2bb6 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTwoSrcModuleDependency/srcs/srcs.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + +