diff --git a/compiler/incremental-compilation-impl/build.gradle.kts b/compiler/incremental-compilation-impl/build.gradle.kts index 6f44c1e3b85..b22008cb49c 100644 --- a/compiler/incremental-compilation-impl/build.gradle.kts +++ b/compiler/incremental-compilation-impl/build.gradle.kts @@ -24,6 +24,8 @@ dependencies { testCompile(projectTests(":compiler:tests-common")) testCompile(intellijCoreDep()) { includeJars("intellij-core") } testCompile(intellijDep()) { includeJars("log4j", "jdom") } + testRuntime(project(":kotlin-reflect")) + testRuntime(project(":core:descriptors.runtime")) if (Platform.P192.orHigher()) { testRuntime(intellijDep()) { includeJars("lz4-java", rootProject = rootProject) } diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalCompilerRunnerTestBase.kt b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalCompilerRunnerTestBase.kt index 0d2fba1cef3..c80bd2a3851 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalCompilerRunnerTestBase.kt +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/AbstractIncrementalCompilerRunnerTestBase.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.incremental import org.jetbrains.kotlin.TestWithWorkingDir import org.jetbrains.kotlin.cli.common.ExitCode import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.incremental.testingUtils.* import org.jetbrains.kotlin.incremental.utils.TestCompilationResult import org.jetbrains.kotlin.test.testFramework.KtUsefulTestCase @@ -28,6 +29,10 @@ import java.io.File abstract class AbstractIncrementalCompilerRunnerTestBase : TestWithWorkingDir() { protected abstract fun createCompilerArguments(destinationDir: File, testDir: File): Args + private fun createCompilerArgumentsImpl(destinationDir: File, testDir: File): Args = createCompilerArguments(destinationDir, testDir).apply { + parseCommandLineArguments(parseAdditionalArgs(testDir), this) + } + fun doTest(path: String) { val testDir = File(path) @@ -40,7 +45,7 @@ abstract class AbstractIncrementalCompilerRunnerTestBase { + return File(testDir, ARGUMENTS_FILE_NAME) + .takeIf { it.exists() } + ?.readText() + ?.split(" ", "\n") + ?.filter { it.isNotBlank() } + ?: emptyList() + } } -} \ No newline at end of file +} diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index d3b89fa9b2f..9d1c9816369 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -15,7 +15,6 @@ */ package org.jetbrains.kotlin.jps.build - import com.intellij.openapi.Disposable import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.io.FileUtil @@ -43,15 +42,22 @@ import org.jetbrains.jps.model.JpsModuleRootModificationUtil import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.library.sdk.JpsSdk import org.jetbrains.jps.util.JpsPathUtil +import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.incremental.LookupSymbol import org.jetbrains.kotlin.incremental.testingUtils.* import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxtBuilder import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture -import org.jetbrains.kotlin.jps.incremental.* +import org.jetbrains.kotlin.jps.incremental.CacheAttributesDiff +import org.jetbrains.kotlin.jps.incremental.CacheVersionManager +import org.jetbrains.kotlin.jps.incremental.CompositeLookupsCacheAttributesManager +import org.jetbrains.kotlin.jps.incremental.getKotlinCache import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension +import org.jetbrains.kotlin.jps.model.kotlinCommonCompilerArguments import org.jetbrains.kotlin.jps.model.kotlinFacet import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget import org.jetbrains.kotlin.platform.idePlatformKind @@ -77,11 +83,23 @@ abstract class AbstractIncrementalJpsTest( private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory()) private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true" + + private const val ARGUMENTS_FILE_NAME = "args.txt" + + private fun parseAdditionalArgs(testDir: File): List { + return File(testDir, ARGUMENTS_FILE_NAME) + .takeIf { it.exists() } + ?.readText() + ?.split(" ", "\n") + ?.filter { it.isNotBlank() } + ?: emptyList() + } } protected lateinit var testDataDir: File protected lateinit var workDir: File protected lateinit var projectDescriptor: ProjectDescriptor + protected lateinit var additionalCommandLineArguments: List // is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage) protected lateinit var lookupsDuringTest: MutableSet private var isJvmICEnabledBackup: Boolean = false @@ -175,6 +193,9 @@ abstract class AbstractIncrementalJpsTest( val buildResult = BuildResult() builder.addMessageHandler(buildResult) val finalScope = scope.build() + projectDescriptor.project.kotlinCommonCompilerArguments = projectDescriptor.project.kotlinCommonCompilerArguments.apply { + updateCommandLineArguments(this) + } builder.build(finalScope, false) @@ -231,6 +252,10 @@ abstract class AbstractIncrementalJpsTest( return build(null, CompileScopeTestBuilder.rebuild().allModules()) } + private fun updateCommandLineArguments(arguments: CommonCompilerArguments) { + parseCommandLineArguments(additionalCommandLineArguments, arguments) + } + private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) { val outDir = File(getAbsolutePath("out")) val outAfterMake = File(getAbsolutePath("out-after-make")) @@ -299,6 +324,7 @@ abstract class AbstractIncrementalJpsTest( protected open fun doTest(testDataPath: String) { testDataDir = File(testDataPath) workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null) + additionalCommandLineArguments = parseAdditionalArgs(File(testDataPath)) val buildLogFile = buildLogFinder.findBuildLog(testDataDir) Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) }) diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt.201 b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt.201 index 1d20b2e2a4d..94af68daeef 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt.201 +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt.201 @@ -15,7 +15,6 @@ */ package org.jetbrains.kotlin.jps.build - import com.intellij.openapi.Disposable import com.intellij.openapi.util.Disposer import com.intellij.openapi.util.io.FileUtil @@ -43,8 +42,11 @@ import org.jetbrains.jps.model.JpsModuleRootModificationUtil import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.library.sdk.JpsSdk import org.jetbrains.jps.util.JpsPathUtil +import org.jetbrains.kotlin.cli.common.KOTLIN_COMPILER_ENVIRONMENT_KEEPALIVE_PROPERTY +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.incremental.LookupSymbol import org.jetbrains.kotlin.incremental.testingUtils.* import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxt @@ -52,6 +54,7 @@ import org.jetbrains.kotlin.jps.build.dependeciestxt.ModulesTxtBuilder import org.jetbrains.kotlin.jps.build.fixtures.EnableICFixture import org.jetbrains.kotlin.jps.incremental.* import org.jetbrains.kotlin.jps.model.JpsKotlinFacetModuleExtension +import org.jetbrains.kotlin.jps.model.kotlinCommonCompilerArguments import org.jetbrains.kotlin.jps.model.kotlinFacet import org.jetbrains.kotlin.jps.targets.KotlinModuleBuildTarget import org.jetbrains.kotlin.platform.idePlatformKind @@ -77,11 +80,23 @@ abstract class AbstractIncrementalJpsTest( private val TEMP_DIRECTORY_TO_USE = File(FileUtilRt.getTempDirectory()) private val DEBUG_LOGGING_ENABLED = System.getProperty("debug.logging.enabled") == "true" + + private const val ARGUMENTS_FILE_NAME = "args.txt" + + private fun parseAdditionalArgs(testDir: File): List { + return File(testDir, ARGUMENTS_FILE_NAME) + .takeIf { it.exists() } + ?.readText() + ?.split(" ", "\n") + ?.filter { it.isNotBlank() } + ?: emptyList() + } } protected lateinit var testDataDir: File protected lateinit var workDir: File protected lateinit var projectDescriptor: ProjectDescriptor + protected lateinit var additionalCommandLineArguments: List // is used to compare lookup dumps in a human readable way (lookup symbols are hashed in an actual lookup storage) protected lateinit var lookupsDuringTest: MutableSet private var isJvmICEnabledBackup: Boolean = false @@ -176,6 +191,9 @@ abstract class AbstractIncrementalJpsTest( val buildResult = BuildResult() builder.addMessageHandler(buildResult) val finalScope = scope.build() + projectDescriptor.project.kotlinCommonCompilerArguments = projectDescriptor.project.kotlinCommonCompilerArguments.apply { + updateCommandLineArguments(this) + } builder.build(finalScope, false) @@ -232,6 +250,10 @@ abstract class AbstractIncrementalJpsTest( return build(null, CompileScopeTestBuilder.rebuild().allModules()) } + private fun updateCommandLineArguments(arguments: CommonCompilerArguments) { + parseCommandLineArguments(additionalCommandLineArguments, arguments) + } + private fun rebuildAndCheckOutput(makeOverallResult: MakeResult) { val outDir = File(getAbsolutePath("out")) val outAfterMake = File(getAbsolutePath("out-after-make")) @@ -300,6 +322,7 @@ abstract class AbstractIncrementalJpsTest( protected open fun doTest(testDataPath: String) { testDataDir = File(testDataPath) workDir = FileUtilRt.createTempDirectory(TEMP_DIRECTORY_TO_USE, "aijt-jps-build", null) + additionalCommandLineArguments = parseAdditionalArgs(File(testDataPath)) val buildLogFile = buildLogFinder.findBuildLog(testDataDir) Disposer.register(testRootDisposable, Disposable { FileUtilRt.delete(workDir) })