Added incremental compilation flag. For publishing intermediate implementation.

Original commit: a502374a62
This commit is contained in:
Evgeny Gerashchenko
2014-03-11 23:56:50 +04:00
parent 06cb6eb030
commit d1a14f1d78
3 changed files with 31 additions and 12 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jet.jps.build; package org.jetbrains.jet.jps.build;
import com.google.common.collect.Maps;
import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil; 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.CompilerRunnerConstants;
import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl; import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.compiler.runner.SimpleOutputItem; import org.jetbrains.jet.compiler.runner.SimpleOutputItem;
import org.jetbrains.jet.config.IncrementalCompilation;
import org.jetbrains.jet.jps.JpsKotlinCompilerSettings; import org.jetbrains.jet.jps.JpsKotlinCompilerSettings;
import org.jetbrains.jet.utils.PathUtil; import org.jetbrains.jet.utils.PathUtil;
import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ModuleChunk;
@@ -191,9 +193,11 @@ public class KotlinBuilder extends ModuleLevelBuilder {
} }
for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) { for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) {
// TODO this is a hack: we don't remove if (IncrementalCompilation.ENABLED) {
if (outputItem.getOutputFile().getName().endsWith("Package.class")) { // TODO this is a hack: we don't remove
continue; if (outputItem.getOutputFile().getName().endsWith("Package.class")) {
continue;
}
} }
BuildTarget<?> target = null; BuildTarget<?> target = null;
Collection<File> sourceFiles = outputItem.getSourceFiles(); Collection<File> sourceFiles = outputItem.getSourceFiles();
@@ -208,14 +212,19 @@ public class KotlinBuilder extends ModuleLevelBuilder {
paths(sourceFiles)); paths(sourceFiles));
} }
// TODO should mark dependencies as dirty, as well if (IncrementalCompilation.ENABLED) {
FSOperations.markDirty(context, chunk, new FileFilter() { // TODO should mark dependencies as dirty, as well
@Override FSOperations.markDirty(context, chunk, new FileFilter() {
public boolean accept(@NotNull File file) { @Override
return !allCompiledFiles.contains(file); public boolean accept(@NotNull File file) {
} return !allCompiledFiles.contains(file);
}); }
return ExitCode.ADDITIONAL_PASS_REQUIRED; });
return ExitCode.ADDITIONAL_PASS_REQUIRED;
}
else {
return ExitCode.OK;
}
} }
private static Set<File> getAllCompiledFilesContainer(CompileContext context) { private static Set<File> getAllCompiledFilesContainer(CompileContext context) {
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder; import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder;
import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilderFactory; import org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilderFactory;
import org.jetbrains.jet.compiler.runner.KotlinModuleXmlBuilderFactory; import org.jetbrains.jet.compiler.runner.KotlinModuleXmlBuilderFactory;
import org.jetbrains.jet.config.IncrementalCompilation;
import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ModuleChunk;
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; import org.jetbrains.jps.builders.logging.ProjectBuilderLogger;
@@ -56,7 +57,7 @@ public class KotlinBuilderModuleScriptGenerator {
public static File generateModuleDescription( public static File generateModuleDescription(
CompileContext context, CompileContext context,
ModuleChunk chunk, ModuleChunk chunk,
List<File> sourceFiles List<File> sourceFiles // ignored for non-incremental compilation
) )
throws IOException throws IOException
{ {
@@ -72,6 +73,10 @@ public class KotlinBuilderModuleScriptGenerator {
for (ModuleBuildTarget target : chunk.getTargets()) { for (ModuleBuildTarget target : chunk.getTargets()) {
File outputDir = getOutputDir(target); File outputDir = getOutputDir(target);
if (!IncrementalCompilation.ENABLED) {
sourceFiles = new ArrayList<File>(KotlinSourceFileCollector.getAllKotlinSourceFiles(target));
}
if (sourceFiles.size() > 0) { if (sourceFiles.size() > 0) {
noSources = false; noSources = false;
@@ -28,6 +28,7 @@ import org.jetbrains.jps.builders.logging.BuildLoggingManager
import org.jetbrains.jps.model.java.JpsJavaExtensionService import org.jetbrains.jps.model.java.JpsJavaExtensionService
import org.jetbrains.jps.util.JpsPathUtil import org.jetbrains.jps.util.JpsPathUtil
import com.intellij.testFramework.UsefulTestCase import com.intellij.testFramework.UsefulTestCase
import org.jetbrains.jet.config.IncrementalCompilation
public class IncrementalJpsTest : JpsBuildTestCase() { public class IncrementalJpsTest : JpsBuildTestCase() {
private val testDataDir: File private val testDataDir: File
@@ -64,6 +65,10 @@ public class IncrementalJpsTest : JpsBuildTestCase() {
} }
private fun doTest() { private fun doTest() {
if (!IncrementalCompilation.ENABLED) {
return
}
addModule("module", array<String>(getAbsolutePath("src")), null, null, addJdk("my jdk")) addModule("module", array<String>(getAbsolutePath("src")), null, null, addJdk("my jdk"))
AbstractKotlinJpsBuildTestCase.addKotlinRuntimeDependency(myProject!!) AbstractKotlinJpsBuildTestCase.addKotlinRuntimeDependency(myProject!!)