From fcce7f25a72a087fc9dfc4083bfa5653a8943609 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 12 Nov 2013 13:33:27 +0400 Subject: [PATCH] JPS: revert KotlinBuilder changes for using dirty files, because it's wrong. Original commit: 923fd74c0a1c74dd58d85cdeaaa81326554b6738 --- .../jet/jps/build/KotlinBuilder.java | 30 ++++++------ .../KotlinBuilderModuleScriptGenerator.java | 36 +++++---------- .../jps/build/KotlinSourceFileCollector.java | 46 +------------------ 3 files changed, 25 insertions(+), 87 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 1cd94d78c3f..3b21e8d228d 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 @@ -134,7 +134,8 @@ public class KotlinBuilder extends ModuleLevelBuilder { return ExitCode.NOTHING_DONE; } - List sourceFiles = KotlinSourceFileCollector.getDirtySourceFiles(dirtyFilesHolder); + List sourceFiles = KotlinSourceFileCollector.getAllKotlinSourceFiles(representativeTarget); + //List sourceFiles = KotlinSourceFileCollector.getDirtySourceFiles(dirtyFilesHolder); if (sourceFiles.isEmpty()) { return ExitCode.NOTHING_DONE; @@ -156,7 +157,7 @@ public class KotlinBuilder extends ModuleLevelBuilder { NO_LOCATION); } - File moduleFile = KotlinBuilderModuleScriptGenerator.generateModuleDescription(context, dirtyFilesHolder); + File moduleFile = KotlinBuilderModuleScriptGenerator.generateModuleDescription(context, chunk); if (moduleFile == null) { // No Kotlin sources found return ExitCode.NOTHING_DONE; @@ -168,9 +169,15 @@ public class KotlinBuilder extends ModuleLevelBuilder { moduleFile, outputItemCollector); } - Map sourceToTarget = KotlinSourceFileCollector.getMapDirtySourcesToTarget(dirtyFilesHolder); - - boolean isAllRegistered = false; + // If there's only one target, this map is empty: get() always returns null, and the representativeTarget will be used below + Map> sourceToTarget = new HashMap>(); + if (chunk.getTargets().size() > 1) { + for (ModuleBuildTarget target : chunk.getTargets()) { + for (File file : KotlinSourceFileCollector.getAllKotlinSourceFiles(target)) { + sourceToTarget.put(file, target); + } + } + } for (SimpleOutputItem outputItem : outputItemCollector.getOutputs()) { BuildTarget target = null; @@ -182,18 +189,7 @@ public class KotlinBuilder extends ModuleLevelBuilder { messageCollector.report(EXCEPTION, "KotlinBuilder: outputItem.sourceFiles is null or empty, outputItem = " + outputItem, NO_LOCATION); } - //TODO FIX: Hack for compile all files if someone changed, because we don't have incremental compilation. - if (!isAllRegistered) { - isAllRegistered = true; - sourceFiles = sourceToTarget.keySet(); - } - - if (target == null) { - messageCollector.report(EXCEPTION, "KotlinBuilder: target is null for outputItem = " + outputItem, NO_LOCATION); - } - else { - outputConsumer.registerOutputFile(target, outputItem.getOutputFile(), paths(sourceFiles)); - } + outputConsumer.registerOutputFile(target != null ? target : representativeTarget, outputItem.getOutputFile(), paths(sourceFiles)); } return ExitCode.OK; 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 4d3a2133601..f105f36047c 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 @@ -17,14 +17,13 @@ package org.jetbrains.jet.jps.build; import com.intellij.openapi.util.io.FileUtil; -import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; 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.jps.builders.DirtyFilesHolder; +import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.incremental.CompileContext; import org.jetbrains.jps.incremental.ModuleBuildTarget; @@ -47,39 +46,27 @@ import java.util.*; import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProcessor; import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProvider; import static org.jetbrains.jet.jps.build.JpsUtils.getAllDependencies; -import static org.jetbrains.jet.jps.build.KotlinSourceFileCollector.getMapTargetToDirtySources; public class KotlinBuilderModuleScriptGenerator { public static final KotlinModuleDescriptionBuilderFactory FACTORY = KotlinModuleXmlBuilderFactory.INSTANCE; @Nullable - public static File generateModuleDescription( - CompileContext context, - DirtyFilesHolder dirtyFilesHolder - ) throws IOException { + public static File generateModuleDescription(CompileContext context, ModuleChunk chunk) + throws IOException + { KotlinModuleDescriptionBuilder builder = FACTORY.create(); boolean noSources = true; - Map> target2sources = getMapTargetToDirtySources(dirtyFilesHolder); - - Set targets = target2sources.keySet(); - Set outputDirs = ContainerUtil.map2Set(targets, new Function() { - @Override - public File fun(ModuleBuildTarget target) { - return getOutputDir(target); - } - }); - - for (ModuleBuildTarget target : targets) { + Set outputDirs = new HashSet(); + for (ModuleBuildTarget target : chunk.getTargets()) { + outputDirs.add(getOutputDir(target)); + } + for (ModuleBuildTarget target : chunk.getTargets()) { File outputDir = getOutputDir(target); - List sourceFiles = target2sources.get(target); - if (sourceFiles == null) { - sourceFiles = Collections.emptyList(); - } - + List sourceFiles = KotlinSourceFileCollector.getAllKotlinSourceFiles(target); noSources &= sourceFiles.isEmpty(); builder.addModule( @@ -95,8 +82,7 @@ public class KotlinBuilderModuleScriptGenerator { if (noSources) return null; - ModuleBuildTarget representativeTarget = targets.iterator().next(); - File scriptFile = new File(getOutputDir(representativeTarget), "script." + FACTORY.getFileExtension()); + File scriptFile = new File(getOutputDir(chunk.representativeTarget()), "script." + FACTORY.getFileExtension()); writeScriptToFile(context, builder.asText(), scriptFile); diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java index 2f71e54e3d9..029a59ff91e 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java @@ -18,7 +18,6 @@ package org.jetbrains.jet.jps.build; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.Processor; -import com.intellij.util.SmartList; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.builders.DirtyFilesHolder; @@ -30,7 +29,7 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRoot; import java.io.File; import java.io.IOException; -import java.util.*; +import java.util.List; public class KotlinSourceFileCollector { // For incremental compilation @@ -51,49 +50,6 @@ public class KotlinSourceFileCollector { return sourceFiles; } - public static Map> getMapTargetToDirtySources( - DirtyFilesHolder dirtyFilesHolder - ) throws IOException { - final Map> target2sources = new HashMap>(); - - dirtyFilesHolder.processDirtyFiles(new FileProcessor() { - @Override - public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor root) throws IOException { - List sources = target2sources.get(target); - if (sources == null) { - sources = new SmartList(); - target2sources.put(target, sources); - } - - if (isKotlinSourceFile(file)) { - sources.add(file); - } - return true; - } - }); - - return target2sources; - } - - - public static Map getMapDirtySourcesToTarget( - DirtyFilesHolder dirtyFilesHolder - ) throws IOException { - final Map source2target = new HashMap(); - - dirtyFilesHolder.processDirtyFiles(new FileProcessor() { - @Override - public boolean apply(ModuleBuildTarget target, File file, JavaSourceRootDescriptor root) throws IOException { - if (isKotlinSourceFile(file)) { - source2target.put(file, target); - } - return true; - } - }); - - return source2target; - } - @NotNull public static List getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) { final List result = ContainerUtil.newArrayList();