From 68437175f650e2869ffbf092c342058265cf9573 Mon Sep 17 00:00:00 2001 From: Alexey Tsvetkov Date: Thu, 24 Sep 2015 23:26:53 +0300 Subject: [PATCH] Enable disabling incremental compilation for tests --- .../kotlin/codegen/MultifileClassCodegen.kt | 2 +- .../kotlin/codegen/PackageCodegen.java | 2 +- .../jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt | 2 +- .../kotlin/config/IncrementalCompilation.java | 20 +++++++++++++++++-- .../kotlin/jps/build/KotlinBuilder.kt | 12 +++++------ .../KotlinBuilderModuleScriptGenerator.java | 2 +- .../jps/incremental/CacheFormatVersion.kt | 2 +- .../modules/KotlinModuleXmlBuilder.java | 2 +- 8 files changed, 30 insertions(+), 14 deletions(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index 3d7291a0594..3ca1588051a 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -247,7 +247,7 @@ public class MultifileClassCodegen( } private fun getCompiledPackageFragment(packageFqName: FqName, state: GenerationState): PackageFragmentDescriptor? = - if (!IncrementalCompilation.ENABLED) null + if (!IncrementalCompilation.isEnabled()) null else state.module.getPackage(packageFqName).fragments.firstOrNull { fragment -> fragment is IncrementalPackageFragmentProvider.IncrementalPackageFragment && fragment.target == state.targetId diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java index 51ef3d4d738..ef83e470684 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/PackageCodegen.java @@ -141,7 +141,7 @@ public class PackageCodegen { @Nullable private PackageFragmentDescriptor getCompiledPackageFragment(@NotNull FqName fqName) { - if (!IncrementalCompilation.ENABLED) { + if (!IncrementalCompilation.isEnabled()) { return null; } 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 d0489d307f7..79644d1a316 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -65,7 +65,7 @@ public open class K2JVMCompiler : CLICompiler() { val configuration = CompilerConfiguration() configuration.put(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, messageSeverityCollector) - if (IncrementalCompilation.ENABLED) { + if (IncrementalCompilation.isEnabled()) { val incrementalCompilationComponents = services.get(javaClass()) configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, incrementalCompilationComponents) } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java b/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java index a44534feb0c..d72e48e48d2 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java +++ b/compiler/util/src/org/jetbrains/kotlin/config/IncrementalCompilation.java @@ -16,6 +16,22 @@ package org.jetbrains.kotlin.config; +import org.jetbrains.annotations.TestOnly; + public class IncrementalCompilation { - public static final boolean ENABLED = !"false".equals(System.getProperty("kotlin.incremental.compilation")); -} + private static final String INCREMENTAL_COMPILATION_PROPERTY = "kotlin.incremental.compilation"; + + public static boolean isEnabled() { + return !"false".equals(System.getProperty(INCREMENTAL_COMPILATION_PROPERTY)); + } + + @TestOnly + public static void disableIncrementalCompilation() { + System.setProperty(INCREMENTAL_COMPILATION_PROPERTY, "false"); + } + + @TestOnly + public static void enableIncrementalCompilation() { + System.setProperty(INCREMENTAL_COMPILATION_PROPERTY, "true"); + } +} \ No newline at end of file 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 1e4592e2e47..7586958262e 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilder.kt @@ -134,7 +134,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val dataManager = projectDescriptor.dataManager - if (IncrementalCompilation.ENABLED && + if (IncrementalCompilation.isEnabled() && chunk.targets.any { dataManager.dataPaths.getKotlinCacheVersion(it).isIncompatible() } ) { LOG.info("Clearing caches for " + chunk.targets.map { it.presentableName }.join()) @@ -215,7 +215,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR copyJsLibraryFilesIfNeeded(chunk, project) } - if (!IncrementalCompilation.ENABLED) return OK + if (!IncrementalCompilation.isEnabled()) return OK val caches = filesToCompile.keySet().map { incrementalCaches[it]!! } val marker = ChangesProcessor(context, chunk, allCompiledFiles, caches) @@ -293,8 +293,8 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR return compileToJs(chunk, commonArguments, environment, null, messageCollector, project) } - if (IncrementalCompilation.ENABLED) { - for (target in chunk.getTargets()) { + if (IncrementalCompilation.isEnabled()) { + for (target in chunk.targets) { val cache = incrementalCaches[target]!! val removedAndDirtyFiles = filesToCompile[target] + dirtyFilesHolder.getRemovedFiles(target).map { File(it) } cache.markOutputClassesDirty(removedAndDirtyFiles) @@ -410,7 +410,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR return sources } - if (!IncrementalCompilation.ENABLED) { + if (!IncrementalCompilation.isEnabled()) { return } @@ -449,7 +449,7 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR ): ChangesInfo { incrementalCaches.values().forEach { it.saveCacheFormatVersion() } - if (!IncrementalCompilation.ENABLED) { + if (!IncrementalCompilation.isEnabled()) { return ChangesInfo.NO_CHANGES } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java index f650f7042bf..4b55b5d3572 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -72,7 +72,7 @@ public class KotlinBuilderModuleScriptGenerator { File outputDir = getOutputDirSafe(target); List moduleSources = new ArrayList( - IncrementalCompilation.ENABLED + IncrementalCompilation.isEnabled() ? sourceFiles.get(target) : KotlinSourceFileCollector.getAllKotlinSourceFiles(target)); diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheFormatVersion.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheFormatVersion.kt index 7e3fab51be1..42233675171 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheFormatVersion.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/CacheFormatVersion.kt @@ -38,7 +38,7 @@ class CacheFormatVersion(targetDataRoot: File) { private val file = File(targetDataRoot, FORMAT_VERSION_FILE_PATH) fun isIncompatible(): Boolean { - assert(IncrementalCompilation.ENABLED) { "Incremental compilation is not enabled" } + assert(IncrementalCompilation.isEnabled()) { "Incremental compilation is not enabled" } if (!file.exists()) return false val versionNumber = file.readText().toInt() diff --git a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java index e9b2cda097e..1df8e11addd 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java +++ b/jps-plugin/src/org/jetbrains/kotlin/modules/KotlinModuleXmlBuilder.java @@ -83,7 +83,7 @@ public class KotlinModuleXmlBuilder { ) { p.println(""); for (File file : files) { - boolean isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.ENABLED; + boolean isOutput = directoriesToFilterOut.contains(file) && !IncrementalCompilation.isEnabled(); 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