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 a1b902c814a..030c6284145 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 @@ -33,7 +33,6 @@ import org.jetbrains.jps.builders.CompileScopeTestBuilder import org.jetbrains.jps.builders.JpsBuildTestCase import org.jetbrains.jps.builders.TestProjectBuilderLogger import org.jetbrains.jps.builders.impl.BuildDataPathsImpl -import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerImpl import org.jetbrains.jps.builders.logging.BuildLoggingManager import org.jetbrains.jps.cmdline.ProjectDescriptor import org.jetbrains.jps.incremental.BuilderRegistry @@ -50,13 +49,10 @@ import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.kotlin.codegen.AsmUtil import org.jetbrains.kotlin.codegen.JvmCodegenUtil -import org.jetbrains.kotlin.config.KotlinCompilerVersion -import org.jetbrains.kotlin.daemon.common.COMPILE_DAEMON_ENABLED_PROPERTY import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.withIC import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.* -import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver.Companion.TEST_IS_PRE_RELEASE_SYSTEM_PROPERTY import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.name.FqName @@ -376,6 +372,26 @@ class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { assertEquals(Collections.EMPTY_SET, contentOfOutputDir(PROJECT_NAME)) } + fun testKotlinJavaScriptProjectWithTests() { + initProject(JS_STDLIB) + makeAll().assertSuccessful() + } + + fun testKotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies() { + initProject(JS_STDLIB) + makeAll().assertSuccessful() + } + + fun testKotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency() { + initProject(JS_STDLIB) + val buildResult = makeAll() + 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) + } + fun testExcludeFolderInSourceRoot() { doTest() 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 b329ce89e8d..9dc917535ce 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 @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.jps.build import com.intellij.util.Consumer import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType import org.jetbrains.jps.incremental.ModuleBuildTarget +import org.jetbrains.jps.model.java.JavaSourceRootType import org.jetbrains.jps.model.java.JpsJavaModuleType import org.jetbrains.jps.model.library.JpsOrderRootType import org.jetbrains.jps.model.module.JpsModule @@ -47,12 +48,21 @@ object JpsJsModuleUtils { fun getDependencyModulesAndSources(target: ModuleBuildTarget, result: MutableList) { JpsUtils.getAllDependencies(target).processModules(object : Consumer { override fun consume(module: JpsModule) { - if (module == target.module || module.moduleType != JpsJavaModuleType.INSTANCE) return + if (module.moduleType != JpsJavaModuleType.INSTANCE) return - val moduleBuildTarget = ModuleBuildTarget(module, JavaModuleBuildTargetType.PRODUCTION) - val outputDir = KotlinBuilderModuleScriptGenerator.getOutputDirSafe(moduleBuildTarget) - val metaInfoFile = getOutputMetaFile(outputDir, module.name) - result.add(metaInfoFile.absolutePath) + for (root in module.sourceRoots) { + val isTestSource = root.rootType == JavaSourceRootType.TEST_SOURCE + + 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) + } + } } }) } diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.iml new file mode 100644 index 00000000000..350676073d1 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.ipr new file mode 100644 index 00000000000..0c363fe68d2 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/kotlinProject.ipr @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/src/Main.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/src/Main.kt new file mode 100644 index 00000000000..e97bc7ec751 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/src/Main.kt @@ -0,0 +1,2 @@ +fun main() { +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/tests/MainTests.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/tests/MainTests.kt new file mode 100644 index 00000000000..d0fbf1444f8 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTests/tests/MainTests.kt @@ -0,0 +1,3 @@ +fun testMain() { + main() +} \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.iml new file mode 100644 index 00000000000..62e30d76009 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.ipr new file mode 100644 index 00000000000..6c1fe3fe02d --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/kotlinProject.ipr @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/src/Main.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/src/Main.kt new file mode 100644 index 00000000000..d922182462e --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/src/Main.kt @@ -0,0 +1,3 @@ +fun main() { + srcOnly() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/src/SrcOnly.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/src/SrcOnly.kt new file mode 100644 index 00000000000..51563329121 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/src/SrcOnly.kt @@ -0,0 +1 @@ +fun srcOnly() {} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/srcOnly.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/srcOnly.iml new file mode 100644 index 00000000000..c90834f2d60 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/srcOnly/srcOnly.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/tests/MainTests.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/tests/MainTests.kt new file mode 100644 index 00000000000..882f75a9953 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/tests/MainTests.kt @@ -0,0 +1,5 @@ +fun testMain() { + main() + srcOnly() + testsOnly() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/tests/TestsOnly.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/tests/TestsOnly.kt new file mode 100644 index 00000000000..b9c5f8d81ae --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/tests/TestsOnly.kt @@ -0,0 +1 @@ +fun testsOnly() {} \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/testsOnly.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/testsOnly.iml new file mode 100644 index 00000000000..d732721923c --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndSeparateTestAndSrcModuleDependencies/testsOnly/testsOnly.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.iml new file mode 100644 index 00000000000..f3d9af241fb --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.ipr new file mode 100644 index 00000000000..6a444a0b5a8 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/kotlinProject.ipr @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/src/Main.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/src/Main.kt new file mode 100644 index 00000000000..5816452a2df --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/src/Main.kt @@ -0,0 +1,3 @@ +fun main() { + srcAndTests() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/src/SrcAndTests.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/src/SrcAndTests.kt new file mode 100644 index 00000000000..4770f151401 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/src/SrcAndTests.kt @@ -0,0 +1 @@ +fun srcAndTests() {} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/srcAndTests.iml b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/srcAndTests.iml new file mode 100644 index 00000000000..fc6e2c7a9cf --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/srcAndTests.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/tests/SrcAndTestsTests.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/tests/SrcAndTestsTests.kt new file mode 100644 index 00000000000..dcdc8f6d32a --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/srcAndTests/tests/SrcAndTestsTests.kt @@ -0,0 +1,3 @@ +fun testSrcAndTests() { + srcAndTests() +} diff --git a/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/tests/MainTests.kt b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/tests/MainTests.kt new file mode 100644 index 00000000000..2035cec6386 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinJavaScriptProjectWithTestsAndTestAndSrcModuleDependency/tests/MainTests.kt @@ -0,0 +1,5 @@ +fun testMain() { + main() + srcAndTests() + testSrcAndTests() +}