diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/ModuleStructureDirectives.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/ModuleStructureDirectives.kt index 2caba2f867f..9d47e3b0341 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/ModuleStructureDirectives.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/ModuleStructureDirectives.kt @@ -39,6 +39,12 @@ object ModuleStructureDirectives : SimpleDirectivesContainer() { """.trimIndent() ) + val ALLOW_FILES_WITH_SAME_NAMES by directive( + """ + Allows specifying test files with the same names using the // FILE directive. + """.trimIndent() + ) + val TARGET_FRONTEND by stringDirective( """ Usage: // TARGET_FRONTEND: {Frontend} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt index 95b3d0ebfbd..1e90ace016e 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/services/impl/ModuleStructureExtractorImpl.kt @@ -100,6 +100,8 @@ class ModuleStructureExtractorImpl( private var linesOfCurrentFile = mutableListOf() private var endLineNumberOfLastFile = -1 + private var allowFilesWithSameNames = false + private var directivesBuilder = RegisteredDirectivesParser(directivesContainer, assertions) private var moduleDirectivesBuilder: RegisteredDirectivesParser = directivesBuilder private var fileDirectivesBuilder: RegisteredDirectivesParser? = null @@ -218,6 +220,9 @@ class ModuleStructureExtractorImpl( } currentFileName = (values.first() as String).also(::validateFileName) } + ModuleStructureDirectives.ALLOW_FILES_WITH_SAME_NAMES -> { + allowFilesWithSameNames = true + } ModuleStructureDirectives.TARGET_PLATFORM -> { if (currentModuleTargetPlatform != null) { assertions.fail { "Target platform already specified twice for module $currentModuleName" } @@ -367,7 +372,7 @@ class ModuleStructureExtractorImpl( "module_${currentModuleName}_$defaultFileName" } val filename = currentFileName ?: actualDefaultFileName - if (filesOfCurrentModule.any { it.name == filename }) { + if (!allowFilesWithSameNames && filesOfCurrentModule.any { it.name == filename }) { error("File with name \"$filename\" already defined in module ${currentModuleName ?: actualDefaultFileName}") } val directives = fileDirectivesBuilder?.build()?.also { directives -> @@ -419,6 +424,7 @@ class ModuleStructureExtractorImpl( moduleDirectivesBuilder = directivesBuilder } currentFileName = null + allowFilesWithSameNames = false resetDirectivesBuilder() fileDirectivesBuilder = directivesBuilder }