From d1a14f1d7827140ad548937beeb10c577836ebb2 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 11 Mar 2014 23:56:50 +0400 Subject: [PATCH] Added incremental compilation flag. For publishing intermediate implementation. Original commit: a502374a62d2f90a76c46123f63657acb35d64e3 --- .../jet/jps/build/KotlinBuilder.java | 31 ++++++++++++------- .../KotlinBuilderModuleScriptGenerator.java | 7 ++++- .../jet/jps/build/IncrementalJpsTest.kt | 5 +++ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java index 2b6607c95df..c99ce3f55c9 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.jps.build; +import com.google.common.collect.Maps; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -35,6 +36,7 @@ import org.jetbrains.jet.compiler.runner.CompilerEnvironment; import org.jetbrains.jet.compiler.runner.CompilerRunnerConstants; import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl; import org.jetbrains.jet.compiler.runner.SimpleOutputItem; +import org.jetbrains.jet.config.IncrementalCompilation; import org.jetbrains.jet.jps.JpsKotlinCompilerSettings; import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jps.ModuleChunk; @@ -191,9 +193,11 @@ public class KotlinBuilder extends ModuleLevelBuilder { } for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) { - // TODO this is a hack: we don't remove - if (outputItem.getOutputFile().getName().endsWith("Package.class")) { - continue; + if (IncrementalCompilation.ENABLED) { + // TODO this is a hack: we don't remove + if (outputItem.getOutputFile().getName().endsWith("Package.class")) { + continue; + } } BuildTarget target = null; Collection sourceFiles = outputItem.getSourceFiles(); @@ -208,14 +212,19 @@ public class KotlinBuilder extends ModuleLevelBuilder { paths(sourceFiles)); } - // TODO should mark dependencies as dirty, as well - FSOperations.markDirty(context, chunk, new FileFilter() { - @Override - public boolean accept(@NotNull File file) { - return !allCompiledFiles.contains(file); - } - }); - return ExitCode.ADDITIONAL_PASS_REQUIRED; + if (IncrementalCompilation.ENABLED) { + // TODO should mark dependencies as dirty, as well + FSOperations.markDirty(context, chunk, new FileFilter() { + @Override + public boolean accept(@NotNull File file) { + return !allCompiledFiles.contains(file); + } + }); + return ExitCode.ADDITIONAL_PASS_REQUIRED; + } + else { + return ExitCode.OK; + } } private static Set getAllCompiledFilesContainer(CompileContext context) { diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java index b77ce9de3d5..ae00121e279 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilderModuleScriptGenerator.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder; import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilderFactory; import org.jetbrains.jet.compiler.runner.KotlinModuleXmlBuilderFactory; +import org.jetbrains.jet.config.IncrementalCompilation; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; @@ -56,7 +57,7 @@ public class KotlinBuilderModuleScriptGenerator { public static File generateModuleDescription( CompileContext context, ModuleChunk chunk, - List sourceFiles + List sourceFiles // ignored for non-incremental compilation ) throws IOException { @@ -72,6 +73,10 @@ public class KotlinBuilderModuleScriptGenerator { for (ModuleBuildTarget target : chunk.getTargets()) { File outputDir = getOutputDir(target); + if (!IncrementalCompilation.ENABLED) { + sourceFiles = new ArrayList(KotlinSourceFileCollector.getAllKotlinSourceFiles(target)); + } + if (sourceFiles.size() > 0) { noSources = false; diff --git a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTest.kt b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTest.kt index f0b321e7b19..26b23e69b33 100644 --- a/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTest.kt +++ b/jps/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTest.kt @@ -28,6 +28,7 @@ import org.jetbrains.jps.builders.logging.BuildLoggingManager import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.util.JpsPathUtil import com.intellij.testFramework.UsefulTestCase +import org.jetbrains.jet.config.IncrementalCompilation public class IncrementalJpsTest : JpsBuildTestCase() { private val testDataDir: File @@ -64,6 +65,10 @@ public class IncrementalJpsTest : JpsBuildTestCase() { } private fun doTest() { + if (!IncrementalCompilation.ENABLED) { + return + } + addModule("module", array(getAbsolutePath("src")), null, null, addJdk("my jdk")) AbstractKotlinJpsBuildTestCase.addKotlinRuntimeDependency(myProject!!)