diff --git a/build-common/src/org/jetbrains/kotlin/incremental/CacheVersion.kt b/build-common/src/org/jetbrains/kotlin/incremental/CacheVersion.kt index b0c16ffa9a9..e92abb40eeb 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/CacheVersion.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/CacheVersion.kt @@ -35,9 +35,8 @@ class CacheVersion( private val whenVersionChanged: CacheVersion.Action, private val whenTurnedOn: CacheVersion.Action, private val whenTurnedOff: CacheVersion.Action, - isEnabled: ()->Boolean + private val isEnabled: Boolean ) { - private val isEnabled by lazy(isEnabled) private val actualVersion: Int? get() = try { @@ -95,18 +94,18 @@ class CacheVersion( } } -fun normalCacheVersion(dataRoot: File, enabled: Boolean? = null): CacheVersion = +fun normalCacheVersion(dataRoot: File, enabled: Boolean): CacheVersion = CacheVersion(ownVersion = NORMAL_VERSION, versionFile = File(dataRoot, NORMAL_VERSION_FILE_NAME), whenVersionChanged = CacheVersion.Action.REBUILD_CHUNK, whenTurnedOn = CacheVersion.Action.REBUILD_CHUNK, whenTurnedOff = CacheVersion.Action.CLEAN_NORMAL_CACHES, - isEnabled = { enabled ?: IncrementalCompilation.isEnabled() }) + isEnabled = enabled) -fun dataContainerCacheVersion(dataRoot: File, enabled: Boolean? = null): CacheVersion = +fun dataContainerCacheVersion(dataRoot: File, enabled: Boolean): CacheVersion = CacheVersion(ownVersion = DATA_CONTAINER_VERSION, versionFile = File(dataRoot, DATA_CONTAINER_VERSION_FILE_NAME), whenVersionChanged = CacheVersion.Action.REBUILD_ALL_KOTLIN, whenTurnedOn = CacheVersion.Action.REBUILD_ALL_KOTLIN, whenTurnedOff = CacheVersion.Action.CLEAN_DATA_CONTAINER, - isEnabled = { enabled ?: IncrementalCompilation.isEnabled() }) + isEnabled = enabled) diff --git a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt index add0da9a48b..e1ae3d3fe71 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/IncrementalJvmCache.kt @@ -23,6 +23,7 @@ import com.intellij.util.io.EnumeratorStringDescriptor import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.build.GeneratedJvmClass +import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.incremental.storage.* import org.jetbrains.kotlin.inline.inlineFunctionsJvmNames import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader @@ -264,7 +265,7 @@ open class IncrementalJvmCache( override fun clean() { super.clean() - normalCacheVersion(targetDataRoot).clean() + normalCacheVersion(targetDataRoot, IncrementalCompilation.isEnabledForJvm()).clean() } private inner class ProtoMap(storageFile: File) : BasicStringMap(storageFile, ProtoMapValueExternalizer) { diff --git a/build-common/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.kt b/build-common/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.kt index 14e69b1bbd9..beaff6a893c 100644 --- a/build-common/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.kt +++ b/build-common/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.kt @@ -78,7 +78,7 @@ class KotlinModuleXmlBuilder { directoriesToFilterOut: Set) { p.println("") for (file in files) { - val isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.isEnabled() + val isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.isEnabledForJvm() if (isOutput) { // For IDEA's make (incremental compilation) purposes, output directories of the current module and its dependencies // appear on the class path, so we are at risk of seeing the results of the previous build, i.e. if some class was diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index f44f73864d1..d3e37b67954 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -383,7 +383,7 @@ class MultifileClassCodegenImpl( private fun getCompiledPackageFragment( facadeFqName: FqName, state: GenerationState ): IncrementalPackageFragmentProvider.IncrementalMultifileClassPackageFragment? { - if (!IncrementalCompilation.isEnabled()) return null + if (!IncrementalCompilation.isEnabledForJvm()) return null val packageFqName = facadeFqName.parent() diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt index 5554fad01bc..ab6d1f523f7 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -307,7 +307,7 @@ class K2JVMCompiler : CLICompiler() { override fun setupPlatformSpecificArgumentsAndServices( configuration: CompilerConfiguration, arguments: K2JVMCompilerArguments, services: Services ) { - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { services.get(LookupTracker::class.java)?.let { configuration.put(CommonConfigurationKeys.LOOKUP_TRACKER, it) } diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt index 1fe167002e4..d503b07a00d 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/CompileServiceImpl.kt @@ -38,6 +38,7 @@ import org.jetbrains.kotlin.cli.js.K2JSCompiler import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.metadata.K2MetadataCompiler +import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.daemon.common.* import org.jetbrains.kotlin.daemon.report.CompileServicesFacadeMessageCollector @@ -469,7 +470,7 @@ class CompileServiceImpl( } val workingDir = incrementalCompilationOptions.workingDir - val versions = commonCacheVersions(workingDir) + + val versions = commonCacheVersions(workingDir, enabled = true) + customCacheVersion(incrementalCompilationOptions.customCacheVersion, incrementalCompilationOptions.customCacheVersionFileName, workingDir, @@ -519,7 +520,7 @@ class CompileServiceImpl( } val workingDir = incrementalCompilationOptions.workingDir - val versions = commonCacheVersions(workingDir) + + val versions = commonCacheVersions(workingDir, enabled = true) + customCacheVersion(incrementalCompilationOptions.customCacheVersion, incrementalCompilationOptions.customCacheVersionFileName, workingDir, diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt index 9910c759f49..bff39339687 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunner.kt @@ -37,7 +37,8 @@ fun makeJsIncrementally( messageCollector: MessageCollector = MessageCollector.NONE, reporter: ICReporter = EmptyICReporter ) { - val versions = commonCacheVersions(cachesDir) + standaloneCacheVersion(cachesDir) + val isIncremental = IncrementalCompilation.isEnabledForJs() + val versions = commonCacheVersions(cachesDir, isIncremental) + standaloneCacheVersion(cachesDir, isIncremental) val allKotlinFiles = sourceRoots.asSequence().flatMap { it.walk() } .filter { it.isFile && it.extension.equals("kt", ignoreCase = true) }.toList() @@ -47,14 +48,13 @@ fun makeJsIncrementally( } } -inline fun withJsIC(fn: ()->R): R { +inline fun withJsIC(fn: () -> R): R { val isJsEnabledBackup = IncrementalCompilation.isEnabledForJs() IncrementalCompilation.setIsEnabledForJs(true) try { - return withIC { fn() } - } - finally { + return fn() + } finally { IncrementalCompilation.setIsEnabledForJs(isJsEnabledBackup) } } @@ -70,7 +70,7 @@ class IncrementalJsCompilerRunner( reporter ) { override fun isICEnabled(): Boolean = - IncrementalCompilation.isEnabled() && IncrementalCompilation.isEnabledForJs() + IncrementalCompilation.isEnabledForJs() override fun createCacheManager(args: K2JSCompilerArguments): IncrementalJsCachesManager = IncrementalJsCachesManager(cacheDirectory, reporter) diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt index c937b0bab9f..b3dcbeab82a 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunner.kt @@ -56,7 +56,8 @@ fun makeIncrementally( messageCollector: MessageCollector = MessageCollector.NONE, reporter: ICReporter = EmptyICReporter ) { - val versions = commonCacheVersions(cachesDir) + standaloneCacheVersion(cachesDir) + val isIncremental = IncrementalCompilation.isEnabledForJvm() + val versions = commonCacheVersions(cachesDir, isIncremental) + standaloneCacheVersion(cachesDir, isIncremental) val kotlinExtensions = listOf("kt", "kts") val allExtensions = kotlinExtensions + listOf("java") @@ -86,7 +87,7 @@ object EmptyICReporter : ICReporter { } inline fun withIC(enabled: Boolean = true, fn: ()->R): R { - val isEnabledBackup = IncrementalCompilation.isEnabled() + val isEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabled(enabled) try { @@ -114,7 +115,7 @@ class IncrementalJvmCompilerRunner( localStateDirs = localStateDirs ) { override fun isICEnabled(): Boolean = - IncrementalCompilation.isEnabled() + IncrementalCompilation.isEnabledForJvm() override fun createCacheManager(args: K2JVMCompilerArguments): IncrementalJvmCachesManager = IncrementalJvmCachesManager(cacheDirectory, File(args.destination), reporter) diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/cacheVersions.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/cacheVersions.kt index 83b1c62d31f..d6370ca1ab4 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/cacheVersions.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/cacheVersions.kt @@ -21,8 +21,8 @@ import java.io.File internal const val STANDALONE_CACHE_VERSION = 2 internal const val STANDALONE_VERSION_FILE_NAME = "standalone-ic-format-version.txt" -fun standaloneCacheVersion(dataRoot: File): CacheVersion = - customCacheVersion(STANDALONE_CACHE_VERSION, STANDALONE_VERSION_FILE_NAME, dataRoot, enabled = true) +fun standaloneCacheVersion(dataRoot: File, enabled: Boolean): CacheVersion = + customCacheVersion(STANDALONE_CACHE_VERSION, STANDALONE_VERSION_FILE_NAME, dataRoot, enabled) fun customCacheVersion(version: Int, fileName: String, dataRoot: File, enabled: Boolean): CacheVersion = CacheVersion(ownVersion = version, @@ -30,8 +30,7 @@ fun customCacheVersion(version: Int, fileName: String, dataRoot: File, enabled: whenVersionChanged = CacheVersion.Action.REBUILD_ALL_KOTLIN, whenTurnedOn = CacheVersion.Action.REBUILD_ALL_KOTLIN, whenTurnedOff = CacheVersion.Action.REBUILD_ALL_KOTLIN, - isEnabled = { enabled }) + isEnabled = enabled) -fun commonCacheVersions(cachesDir: File): List = - listOf(normalCacheVersion(cachesDir), - dataContainerCacheVersion(cachesDir)) \ No newline at end of file +fun commonCacheVersions(cachesDir: File, enabled: Boolean): List = + listOf(normalCacheVersion(cachesDir, enabled), dataContainerCacheVersion(cachesDir, enabled)) \ No newline at end of file diff --git a/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java b/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java index 5815a2aefb8..8eff196eafb 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java +++ b/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java @@ -24,7 +24,7 @@ public class IncrementalCompilation { private static final String INCREMENTAL_COMPILATION_PROPERTY = "kotlin.incremental.compilation"; private static final String INCREMENTAL_COMPILATION_JS_PROPERTY = "kotlin.incremental.compilation.js"; - public static boolean isEnabled() { + public static boolean isEnabledForJvm() { return "true".equals(System.getProperty(INCREMENTAL_COMPILATION_PROPERTY)); } @@ -43,7 +43,7 @@ public class IncrementalCompilation { } public static void toJvmArgs(List jvmArgs) { - if (isEnabled()) addJvmSystemFlag(jvmArgs, INCREMENTAL_COMPILATION_PROPERTY); + if (isEnabledForJvm()) addJvmSystemFlag(jvmArgs, INCREMENTAL_COMPILATION_PROPERTY); if (isEnabledForJs()) addJvmSystemFlag(jvmArgs, INCREMENTAL_COMPILATION_JS_PROPERTY); } diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalCacheVersionChangedTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalCacheVersionChangedTest.kt index f8d2a49a50c..5c3c8996a30 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalCacheVersionChangedTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalCacheVersionChangedTest.kt @@ -33,7 +33,7 @@ abstract class AbstractIncrementalCacheVersionChangedTest : AbstractIncrementalJ } if (modifiedFiles.none { it.endsWith("do-not-change-cache-versions") }) { - val cacheVersionProvider = CacheVersionProvider(paths) + val cacheVersionProvider = CacheVersionProvider(paths, isIncrementalCompilationEnabled = true) val versions = getVersions(cacheVersionProvider, targets) val versionFiles = versions.map { it.formatVersionFile }.filter { it.exists() } versionFiles.forEach { it.writeText("777") } 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 52f0930007d..4a1f2ce99f9 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 @@ -114,7 +114,7 @@ abstract class AbstractIncrementalJpsTest( override fun setUp() { super.setUp() lookupsDuringTest = hashSetOf() - isICEnabledBackup = IncrementalCompilation.isEnabled() + isICEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabled(true) if (DEBUG_LOGGING_ENABLED) { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt index 533a0091c0f..3b7fa0fc409 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalLazyCachesTest.kt @@ -40,7 +40,7 @@ abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJpsTest() override fun setUp() { super.setUp() - isICEnabledBackup = IncrementalCompilation.isEnabled() + isICEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabled(true) } @@ -89,7 +89,7 @@ abstract class AbstractIncrementalLazyCachesTest : AbstractIncrementalJpsTest() val targets = projectDescriptor.allModuleTargets val dataManager = projectDescriptor.dataManager val paths = dataManager.dataPaths - val versions = CacheVersionProvider(paths) + val versions = CacheVersionProvider(paths, isIncrementalCompilationEnabled = true) dumpCachesForTarget(p, paths, KotlinDataContainerTarget, versions.dataContainerVersion().formatVersionFile) diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt index b060acfce2a..a909ad2516d 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt @@ -163,7 +163,7 @@ abstract class AbstractLookupTrackerTest : TestWithWorkingDir() { super.setUp() srcDir = File(workingDir, "src").apply { mkdirs() } outDir = File(workingDir, "out") - isICEnabledBackup = IncrementalCompilation.isEnabled() + isICEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabled(true) } diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt index f1ba6d7506e..b1535fd080d 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTest.kt @@ -61,7 +61,6 @@ import org.jetbrains.kotlin.config.KotlinCompilerVersion.TEST_IS_PRE_RELEASE_SYS import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.withIC -import org.jetbrains.kotlin.jps.model.JpsKotlinCompilerSettings import org.jetbrains.kotlin.jps.build.KotlinJpsBuildTest.LibraryDependency.* import org.jetbrains.kotlin.jps.model.kotlinCommonCompilerArguments import org.jetbrains.kotlin.jps.model.kotlinCompilerArguments @@ -451,7 +450,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { assertFilesExistInOutput(module, "Foo.class", "Bar.class") assertFilesNotExistInOutput(module, *EXCLUDE_FILES) - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/foo.kt"), null, arrayOf(module("kotlinProject"), klass("kotlinProject", "Foo"))) } else { @@ -470,7 +469,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { assertFilesExistInOutput(module, "Foo.class", "Bar.class") assertFilesNotExistInOutput(module, *EXCLUDE_FILES) - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/foo.kt"), null, arrayOf(module("kotlinProject"), klass("kotlinProject", "Foo"))) checkWhen(touch("src/dir/subdir/bar.kt"), null, arrayOf(module("kotlinProject"), klass("kotlinProject", "Bar"))) } @@ -491,7 +490,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { assertFilesExistInOutput(module, "Foo.class", "Bar.class") assertFilesNotExistInOutput(module, *EXCLUDE_FILES) - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/foo.kt"), null, arrayOf(module("kotlinProject"), klass("kotlinProject", "Foo"))) } else { @@ -508,7 +507,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { fun testKotlinProjectTwoFilesInOnePackage() { doTest() - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/test1.kt"), null, packageClasses("kotlinProject", "src/test1.kt", "_DefaultPackage")) checkWhen(touch("src/test2.kt"), null, packageClasses("kotlinProject", "src/test2.kt", "_DefaultPackage")) } @@ -577,7 +576,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { result.assertSuccessful() - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/kt2.kt"), null, packageClasses("kotlinProject", "src/kt2.kt", "kt2.Kt2Kt")) checkWhen(touch("module2/src/kt1.kt"), null, packageClasses("module2", "module2/src/kt1.kt", "kt1.Kt1Kt")) } @@ -600,7 +599,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { UsefulTestCase.assertSameElements(getMethodsOfClass(facadeWithB), "", "b", "getB", "setB") - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("module1/src/a.kt"), null, packageClasses("module1", "module1/src/a.kt", "test.TestPackage")) checkWhen(touch("module2/src/b.kt"), null, packageClasses("module2", "module2/src/b.kt", "test.TestPackage")) } @@ -622,7 +621,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { UsefulTestCase.assertSameElements(getMethodsOfClass(facadeWithA), "", "a", "funA", "getA") UsefulTestCase.assertSameElements(getMethodsOfClass(facadeWithB), "", "b", "funB", "getB", "setB") - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("module1/src/a.kt"), null, packageClasses("module1", "module1/src/a.kt", "test.TestPackage")) checkWhen(touch("module2/src/b.kt"), null, packageClasses("module2", "module2/src/b.kt", "test.TestPackage")) } @@ -903,7 +902,7 @@ open class KotlinJpsBuildTest : AbstractKotlinJpsBuildTestCase() { initProject(JVM_MOCK_RUNTIME) buildAllModules().assertSuccessful() - if (IncrementalCompilation.isEnabled()) { + if (IncrementalCompilation.isEnabledForJvm()) { checkWhen(touch("src/utils.kt"), null, packageClasses("kotlinProject", "src/utils.kt", "_DefaultPackage")) } else { diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt index 1e7f69a7d4a..2dcbcbec5a4 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/KotlinJpsBuildTestIncremental.kt @@ -22,7 +22,6 @@ import org.jetbrains.jps.builders.JpsBuildTestCase import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.LanguageVersion -import org.jetbrains.kotlin.jps.model.JpsKotlinCompilerSettings import kotlin.reflect.KMutableProperty1 import org.jetbrains.kotlin.daemon.common.COMPILE_DAEMON_CUSTOM_RUN_FILES_PATH_FOR_TESTS import org.jetbrains.kotlin.daemon.common.COMPILE_DAEMON_ENABLED_PROPERTY @@ -36,7 +35,7 @@ class KotlinJpsBuildTestIncremental : KotlinJpsBuildTest() { override fun setUp() { super.setUp() - isICEnabledBackup = IncrementalCompilation.isEnabled() + isICEnabledBackup = IncrementalCompilation.isEnabledForJvm() IncrementalCompilation.setIsEnabled(true) } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt index 28c773a7926..cdc86f97bc0 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -34,7 +34,6 @@ import org.jetbrains.jps.model.java.JpsJavaClasspathKind import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.module.JpsModule import org.jetbrains.kotlin.build.GeneratedFile -import org.jetbrains.kotlin.build.JvmBuildMetaInfo import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.ERROR import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity.INFO @@ -88,7 +87,8 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { override fun buildStarted(context: CompileContext) { LOG.debug("==========================================") - LOG.info("is Kotlin incremental compilation enabled: ${IncrementalCompilation.isEnabled()}") + LOG.info("is Kotlin incremental compilation enabled for JVM: ${IncrementalCompilation.isEnabledForJvm()}") + LOG.info("is Kotlin incremental compilation enabled for JS: ${IncrementalCompilation.isEnabledForJs()}") LOG.info("is Kotlin compiler daemon enabled: ${isDaemonEnabled()}") val historyLabel = context.getBuilderParameter("history label") @@ -128,8 +128,13 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { ) val fsOperations = FSOperationsHelper(context, chunk, roundDirtyFiles, LOG) - if (System.getProperty(SKIP_CACHE_VERSION_CHECK_PROPERTY) == null) { - val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths) + val jpsRepresentativeTarget = chunk.representativeTarget() + val representativeTarget = context.kotlinBuildTargets[jpsRepresentativeTarget] + if (representativeTarget == null) { + LOG.warn("Unable to find Kotlin build target for JPS target ${jpsRepresentativeTarget.presentableName}") + } + if (System.getProperty(SKIP_CACHE_VERSION_CHECK_PROPERTY) == null && representativeTarget != null) { + val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths, representativeTarget.isIncrementalCompilationEnabled) val actions = checkCachesVersions(context, cacheVersionsProvider, chunk) applyActionsOnCacheVersionChange(actions, cacheVersionsProvider, context, dataManager, targets, fsOperations) if (CacheVersion.Action.REBUILD_ALL_KOTLIN in actions) { @@ -280,7 +285,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { || targets.any { rebuildAfterCacheVersionChanged[it] == true } if (kotlinDirtyFilesHolder.hasDirtyOrRemovedFiles) { - if (!isChunkRebuilding && !IncrementalCompilation.isEnabled()) { + if (!isChunkRebuilding && !representativeTarget.isIncrementalCompilationEnabled) { targets.forEach { rebuildAfterCacheVersionChanged[it] = true } return CHUNK_REBUILD_REQUIRED } @@ -300,7 +305,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { } val project = projectDescriptor.project - val lookupTracker = getLookupTracker(project) + val lookupTracker = getLookupTracker(project, representativeTarget) val exceptActualTracer = ExpectActualTrackerImpl() val incrementalCaches = getIncrementalCaches(chunk, context) val environment = createCompileEnvironment( @@ -366,7 +371,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { incrementalCaches ) - if (!IncrementalCompilation.isEnabled()) { + if (!representativeTarget.isIncrementalCompilationEnabled) { return OK } @@ -477,7 +482,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { private fun doCompileModuleChunk( chunk: ModuleChunk, - kotlinTarget: KotlinModuleBuildTarget<*>, + representativeTarget: KotlinModuleBuildTarget<*>, commonArguments: CommonCompilerArguments, context: CompileContext, dirtyFilesHolder: KotlinDirtySourceFilesHolder, @@ -486,26 +491,25 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { incrementalCaches: Map ): OutputItemsCollector? { - val representativeTarget = chunk.representativeTarget() - fun concatenate(strings: Array?, cp: List) = arrayOf(*strings.orEmpty(), *cp.toTypedArray()) for (argumentProvider in ServiceLoader.load(KotlinJpsCompilerArgumentsProvider::class.java)) { + val jpsModuleBuildTarget = representativeTarget.jpsModuleBuildTarget // appending to pluginOptions commonArguments.pluginOptions = concatenate( commonArguments.pluginOptions, - argumentProvider.getExtraArguments(representativeTarget, context) + argumentProvider.getExtraArguments(jpsModuleBuildTarget, context) ) // appending to classpath commonArguments.pluginClasspaths = concatenate( commonArguments.pluginClasspaths, - argumentProvider.getClasspath(representativeTarget, context) + argumentProvider.getClasspath(jpsModuleBuildTarget, context) ) LOG.debug("Plugin loaded: ${argumentProvider::class.java.simpleName}") } - if (IncrementalCompilation.isEnabled()) { + if (representativeTarget.isIncrementalCompilationEnabled) { for (target in chunk.targets) { val cache = incrementalCaches[target] val targetDirtyFiles = dirtyFilesHolder.byTarget[target] @@ -519,7 +523,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { } } - val isDoneSomething = kotlinTarget.compileModuleChunk(chunk, commonArguments, dirtyFilesHolder, environment) + val isDoneSomething = representativeTarget.compileModuleChunk(chunk, commonArguments, dirtyFilesHolder, environment) return if (isDoneSomething) environment.outputItemsCollector else null } @@ -663,10 +667,10 @@ private fun ChangesCollector.getDirtyFiles( return dirtyFilesFromLookups + mapClassesFqNamesToFiles(caches, dirtyClassFqNames, reporter) } -private fun getLookupTracker(project: JpsProject): LookupTracker { +private fun getLookupTracker(project: JpsProject, representativeTarget: KotlinModuleBuildTarget<*>): LookupTracker { val testLookupTracker = project.testingContext?.lookupTracker ?: LookupTracker.DO_NOTHING - if (IncrementalCompilation.isEnabled()) return LookupTrackerImpl(testLookupTracker) + if (representativeTarget.isIncrementalCompilationEnabled) return LookupTrackerImpl(testLookupTracker) return testLookupTracker } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionProvider.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionProvider.kt index c99186a839f..da25b6c95b4 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionProvider.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheVersionProvider.kt @@ -25,20 +25,23 @@ import org.jetbrains.kotlin.incremental.normalCacheVersion import java.io.File -class CacheVersionProvider(private val paths: BuildDataPaths) { +class CacheVersionProvider( + private val paths: BuildDataPaths, + private val isIncrementalCompilationEnabled: Boolean +) { private val BuildTarget<*>.dataRoot: File get() = paths.getTargetDataRoot(this) - fun normalVersion(target: ModuleBuildTarget): CacheVersion = normalCacheVersion(target.dataRoot) + fun normalVersion(target: ModuleBuildTarget): CacheVersion = normalCacheVersion(target.dataRoot, isIncrementalCompilationEnabled) - fun dataContainerVersion(): CacheVersion = dataContainerCacheVersion(KotlinDataContainerTarget.dataRoot) + fun dataContainerVersion(): CacheVersion = dataContainerCacheVersion(KotlinDataContainerTarget.dataRoot, isIncrementalCompilationEnabled) fun allVersions(targets: Iterable): Iterable { val versions = arrayListOf() - versions.add(dataContainerCacheVersion(KotlinDataContainerTarget.dataRoot)) + versions.add(dataContainerCacheVersion(KotlinDataContainerTarget.dataRoot, isIncrementalCompilationEnabled)) for (dataRoot in targets.map { it.dataRoot }) { - versions.add(normalCacheVersion(dataRoot)) + versions.add(normalCacheVersion(dataRoot, isIncrementalCompilationEnabled)) } return versions diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt index f900f7b9f42..fada07f934c 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinCommonModuleBuildTarget.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2MetadataCompilerArguments import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner +import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.jps.build.KotlinDirtySourceFilesHolder import org.jetbrains.kotlin.jps.model.k2MetadataCompilerArguments import org.jetbrains.kotlin.jps.model.kotlinCompilerSettings @@ -26,6 +27,9 @@ private const val COMMON_BUILD_META_INFO_FILE_NAME = "common-build-meta-info.txt class KotlinCommonModuleBuildTarget(context: CompileContext, jpsModuleBuildTarget: ModuleBuildTarget) : KotlinModuleBuildTarget(context, jpsModuleBuildTarget) { + override val isIncrementalCompilationEnabled: Boolean + get() = false + override val buildMetaInfoFactory get() = CommonBuildMetaInfo diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt index 9f5e650efc0..c650f587b41 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJsModuleBuildTarget.kt @@ -45,6 +45,9 @@ private const val JS_BUILD_META_INFO_FILE_NAME = "js-build-meta-info.txt" class KotlinJsModuleBuildTarget(compileContext: CompileContext, jpsModuleBuildTarget: ModuleBuildTarget) : KotlinModuleBuildTarget(compileContext, jpsModuleBuildTarget) { + override val isIncrementalCompilationEnabled: Boolean + get() = IncrementalCompilation.isEnabledForJs() + override val buildMetaInfoFactory get() = JsBuildMetaInfo @@ -68,7 +71,7 @@ class KotlinJsModuleBuildTarget(compileContext: CompileContext, jpsModuleBuildTa with(builder) { register(IncrementalResultsConsumer::class.java, IncrementalResultsConsumerImpl()) - if (IncrementalCompilation.isEnabled() && !isFirstBuild) { + if (isIncrementalCompilationEnabled && !isFirstBuild) { val cache = incrementalCaches[jpsModuleBuildTarget] as IncrementalJsCache register( diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt index 9f839bf3054..81354586a27 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinJvmModuleBuildTarget.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.compilerRunner.JpsCompilerEnvironment import org.jetbrains.kotlin.compilerRunner.JpsKotlinCompilerRunner +import org.jetbrains.kotlin.config.IncrementalCompilation import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.incremental.ChangesCollector import org.jetbrains.kotlin.incremental.IncrementalCompilationComponentsImpl @@ -53,6 +54,9 @@ private const val JVM_BUILD_META_INFO_FILE_NAME = "jvm-build-meta-info.txt" class KotlinJvmModuleBuildTarget(compileContext: CompileContext, jpsModuleBuildTarget: ModuleBuildTarget) : KotlinModuleBuildTarget(compileContext, jpsModuleBuildTarget) { + override val isIncrementalCompilationEnabled: Boolean + get() = IncrementalCompilation.isEnabledForJvm() + override fun createCacheStorage(paths: BuildDataPaths) = JpsIncrementalJvmCache(jpsModuleBuildTarget, paths) override val buildMetaInfoFactory diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuildTarget.kt index 24c0f8513c2..2382da36257 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/platforms/KotlinModuleBuildTarget.kt @@ -28,6 +28,7 @@ import org.jetbrains.kotlin.config.Services import org.jetbrains.kotlin.incremental.CacheVersion import org.jetbrains.kotlin.incremental.ChangesCollector import org.jetbrains.kotlin.incremental.ExpectActualTrackerImpl +import org.jetbrains.kotlin.incremental.LookupTrackerImpl import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.jps.build.KotlinBuilder @@ -52,6 +53,8 @@ abstract class KotlinModuleBuildTarget( val context: CompileContext, val jpsModuleBuildTarget: ModuleBuildTarget ) { + abstract val isIncrementalCompilationEnabled: Boolean + val module: JpsModule get() = jpsModuleBuildTarget.module @@ -241,8 +244,10 @@ abstract class KotlinModuleBuildTarget( // Should not be cached since may be vary in different rounds val jpsModuleTarget = target.jpsModuleBuildTarget - return if (IncrementalCompilation.isEnabled()) dirtyFilesHolder.getDirtyFiles(jpsModuleTarget) - else target.sourceFiles + return when { + isIncrementalCompilationEnabled -> dirtyFilesHolder.getDirtyFiles(jpsModuleTarget) + else -> target.sourceFiles + } } protected fun checkShouldCompileAndLog(dirtyFilesHolder: KotlinDirtySourceFilesHolder, moduleSources: Collection) = @@ -278,7 +283,7 @@ abstract class KotlinModuleBuildTarget( fun saveVersions(context: CompileContext, chunk: ModuleChunk, commonArguments: CommonCompilerArguments) { val dataManager = context.projectDescriptor.dataManager val targets = chunk.targets - val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths) + val cacheVersionsProvider = CacheVersionProvider(dataManager.dataPaths, isIncrementalCompilationEnabled) cacheVersionsProvider.allVersions(targets).forEach { it.saveIfNeeded() } val buildMetaInfo = buildMetaInfoFactory.create(commonArguments)