diff --git a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/model/JvmModule.kt b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/model/JvmModule.kt index 9eb731438fa..c04b55cd21d 100644 --- a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/model/JvmModule.kt +++ b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/model/JvmModule.kt @@ -13,10 +13,7 @@ import org.jetbrains.kotlin.buildtools.api.tests.compilation.model.Module import org.jetbrains.kotlin.tooling.core.KotlinToolingVersion import java.io.File import java.nio.file.Path -import kotlin.io.path.absolutePathString -import kotlin.io.path.createParentDirectories -import kotlin.io.path.listDirectoryEntries -import kotlin.io.path.toPath +import kotlin.io.path.* class JvmModule( project: Project, @@ -51,11 +48,14 @@ class JvmModule( "-cp", dependencyFiles.joinToString(File.pathSeparator), "-module-name", moduleName, ) + val allowedExtensions = compilationConfig.kotlinScriptFilenameExtensions + setOf("kt", "kts") return BaseTest.compilationService.compileJvm( project.projectId, strategyConfig, compilationConfig, - sourcesDirectory.listDirectoryEntries().map { it.toFile() }, + sourcesDirectory.listDirectoryEntries() + .filter { path -> path.pathString.run { allowedExtensions.any { endsWith(".$it") } } } + .map { it.toFile() }, defaultCompilationArguments + additionalCompilationArguments, ) } diff --git a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/ScenarioModule.kt b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/ScenarioModule.kt index e19828471c2..10bc28d1581 100644 --- a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/ScenarioModule.kt +++ b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/ScenarioModule.kt @@ -12,12 +12,24 @@ import org.jetbrains.kotlin.buildtools.api.tests.compilation.model.Module interface ScenarioModule { /** * Performs registered existing file modification. + * + * Prefer the overload with versioned file modification if it's possible */ fun changeFile( fileName: String, transform: (String) -> String, ) + /** + * Performs registered existing file modification. + * + * Check the example `ExampleIncrementalScenarioTest.testScenario4` out + */ + fun changeFile( + fileName: String, + version: UInt, + ) + /** * Performs registered file deletion. */ diff --git a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/scenarioDsl.kt b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/scenarioDsl.kt index 784d96de7a3..9ff9dc77811 100644 --- a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/scenarioDsl.kt +++ b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/kotlin/compilation/scenario/scenarioDsl.kt @@ -28,11 +28,12 @@ internal class ScenarioModuleImpl( transform: (String) -> String, ) { val file = module.sourcesDirectory.resolve(fileName) - file.writeText(transform(file.readText())) - sourcesChanges = SourcesChanges.Known( - modifiedFiles = sourcesChanges.modifiedFiles + file.toFile(), - removedFiles = sourcesChanges.removedFiles, - ) + writeFile(fileName, transform(file.readText())) + } + + override fun changeFile(fileName: String, version: UInt) { + val file = module.sourcesDirectory.resolve("$fileName.$version") + writeFile(fileName, file.readText()) } override fun deleteFile(fileName: String) { @@ -45,8 +46,12 @@ internal class ScenarioModuleImpl( } override fun createFile(fileName: String, content: String) { + writeFile(fileName, content) + } + + private fun writeFile(fileName: String, newContent: String) { val file = module.sourcesDirectory.resolve(fileName) - file.writeText(content) + file.writeText(newContent) sourcesChanges = SourcesChanges.Known( modifiedFiles = sourcesChanges.modifiedFiles + file.toFile(), removedFiles = sourcesChanges.removedFiles, diff --git a/compiler/build-tools/kotlin-build-tools-api-tests/src/main/resources/modules/jvm-module-1/bar.kt.1 b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/resources/modules/jvm-module-1/bar.kt.1 new file mode 100644 index 00000000000..28af28bcc90 --- /dev/null +++ b/compiler/build-tools/kotlin-build-tools-api-tests/src/main/resources/modules/jvm-module-1/bar.kt.1 @@ -0,0 +1,8 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +class Bar { + fun bar(bar: Int) = foo() +} \ No newline at end of file diff --git a/compiler/build-tools/kotlin-build-tools-api-tests/src/testExample/kotlin/ExampleIncrementalScenarioTest.kt b/compiler/build-tools/kotlin-build-tools-api-tests/src/testExample/kotlin/ExampleIncrementalScenarioTest.kt index 5ccb724903e..a4f7872c3d1 100644 --- a/compiler/build-tools/kotlin-build-tools-api-tests/src/testExample/kotlin/ExampleIncrementalScenarioTest.kt +++ b/compiler/build-tools/kotlin-build-tools-api-tests/src/testExample/kotlin/ExampleIncrementalScenarioTest.kt @@ -107,4 +107,20 @@ class ExampleIncrementalScenarioTest : BaseCompilationTest() { } } } + + @DefaultStrategyAgnosticCompilationTest + @DisplayName("Sample scenario DSL IC test with versioned source file modification") + @TestMetadata("jvm-module-1") + fun testScenario4(strategyConfig: CompilerExecutionStrategyConfiguration) { + scenario(strategyConfig) { + val module1 = module("jvm-module-1") + + module1.changeFile("bar.kt", 1U) + + module1.compile { + assertCompiledSources("bar.kt") + assertNoOutputSetChanges() + } + } + } } \ No newline at end of file