diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt index 7d3600f84c0..53fc2efd95f 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/KotlinGradlePluginIT.kt @@ -771,4 +771,18 @@ class KotlinGradleIT : BaseGradleIT() { } } } + + @Test + fun testModuleNameFiltering() = with(Project("typeAlias")) { // Use a Project with a top-level typealias + setupWorkingDir() + + gradleBuildScript().appendText("\n" + """archivesBaseName = 'a/really\\tricky\n\rmodule\tname'""") + build("classes") { + assertSuccessful() + + val metaInfDir = File(projectDir, kotlinClassesDir() + "META-INF") + assertNotNull(metaInfDir.listFiles().singleOrNull { it.name.endsWith(".kotlin_module") }) + } + } + } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt index d079f56dcf9..c08b6073d8f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/Tasks.kt @@ -164,7 +164,7 @@ abstract class AbstractKotlinCompile() : AbstractKo val baseName = project.convention.findPlugin(BasePluginConvention::class.java)?.archivesBaseName ?: project.name val suffix = if (sourceSetName == "main") "" else "_$sourceSetName" - return "$baseName$suffix" + return filterModuleName("${baseName}_$suffix") } @Suppress("UNCHECKED_CAST") @@ -538,6 +538,11 @@ open class Kotlin2JsCompile() : AbstractKotlinCompile(), } } +private val invalidModuleNameCharactersRegex = """[\\/\r\n\t]""".toRegex() + +private fun filterModuleName(moduleName: String): String = + moduleName.replace(invalidModuleNameCharactersRegex, "_") + private fun Task.getGradleVersion(): ParsedGradleVersion? { val gradleVersion = project.gradle.gradleVersion val result = ParsedGradleVersion.parse(gradleVersion)