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 f6d3c0a0c09..62fb117a963 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 @@ -946,6 +946,12 @@ open class KotlinJpsBuildTest : KotlinJpsBuildTestBase() { checkWhen(emptyArray(), null, packageClasses("kotlinProject", "src/test1.kt", "Test1Kt")) } + @WorkingDir("KotlinProjectWithSingleKotlinFileAsSourceRoot") + fun testBuildProjectWithSingleKotlinFileAsSource() { + initProject(JVM_MOCK_RUNTIME) + buildAllModules().assertSuccessful() + } + fun testBuildAfterGdwBuild() { initProject(JVM_FULL_RUNTIME) findModule("module2").let { diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt index 138bd3a9fbb..ef251088979 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt @@ -202,7 +202,7 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB kotlinModuleId.name, outputDir.absolutePath, preprocessSources(allFiles), - target.findSourceRoots(dirtyFilesHolder.context), + target.findJavaSourceRoots(dirtyFilesHolder.context), target.findClassPathRoots(), preprocessSources(commonSourceFiles), target.findModularJdkRoot(), @@ -327,13 +327,14 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB return File(url.substringAfter(URLUtil.JRT_PROTOCOL + URLUtil.SCHEME_SEPARATOR).substringBeforeLast(URLUtil.JAR_SEPARATOR)) } - private fun findSourceRoots(context: CompileContext): List { + private fun findJavaSourceRoots(context: CompileContext): List { val roots = context.projectDescriptor.buildRootIndex.getTargetRoots(jpsModuleBuildTarget, context) val result = mutableListOf() for (root in roots) { val file = root.rootFile + val filePath = file.toPath() val prefix = root.packagePrefix - if (Files.exists(file.toPath())) { + if (Files.exists(filePath) && (Files.isDirectory(filePath) || file.extension == "java")) { result.add(JvmSourceRoot(file, prefix.ifEmpty { null })) } } diff --git a/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.iml b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.iml new file mode 100644 index 00000000000..28b61f9b5d3 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.ipr b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.ipr new file mode 100644 index 00000000000..e02c0c30a2f --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/kotlinProject.ipr @@ -0,0 +1,14 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/src/test1.kt b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/src/test1.kt new file mode 100644 index 00000000000..a2c4e958bb5 --- /dev/null +++ b/jps/jps-plugin/testData/general/KotlinProjectWithSingleKotlinFileAsSourceRoot/src/test1.kt @@ -0,0 +1,3 @@ +fun foo() { + +} \ No newline at end of file