Ignore all output directories in a chunk

Otherwise the class files generated by previous builds for one of the targets in the chunk would interfere with source definitions, and we get overload resolution ambiguities and such
This commit is contained in:
Andrey Breslav
2013-10-21 19:04:25 +04:00
parent 2a43d2adee
commit aacf133ef6
2 changed files with 8 additions and 6 deletions
@@ -41,9 +41,7 @@ import org.jetbrains.jps.model.module.JpsSdkDependency;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.Collection; import java.util.*;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProcessor; import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProcessor;
import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProvider; import static org.jetbrains.jet.compiler.runner.KotlinModuleDescriptionBuilder.DependencyProvider;
@@ -61,6 +59,10 @@ public class KotlinBuilderModuleScriptGenerator {
boolean noSources = true; boolean noSources = true;
Set<File> outputDirs = new HashSet<File>();
for (ModuleBuildTarget target : chunk.getTargets()) {
outputDirs.add(getOutputDir(target));
}
for (ModuleBuildTarget target : chunk.getTargets()) { for (ModuleBuildTarget target : chunk.getTargets()) {
File outputDir = getOutputDir(target); File outputDir = getOutputDir(target);
@@ -73,8 +75,8 @@ public class KotlinBuilderModuleScriptGenerator {
getKotlinModuleDependencies(context, target), getKotlinModuleDependencies(context, target),
sourceFiles, sourceFiles,
target.isTests(), target.isTests(),
// this excludes the output directory from the class path, to be removed for true incremental compilation // this excludes the output directories from the class path, to be removed for true incremental compilation
Collections.singleton(outputDir) outputDirs
); );
} }
@@ -169,7 +169,7 @@ public class KotlinJpsBuildTestCase extends AbstractKotlinJpsBuildTestCase {
private void assertOutputDeleted(String sourceFileName, String packageClassFqName, String moduleName) { private void assertOutputDeleted(String sourceFileName, String packageClassFqName, String moduleName) {
File file = new File(workDir, sourceFileName); File file = new File(workDir, sourceFileName);
change(file.getAbsolutePath()); change(file.getAbsolutePath());
makeAll(); makeAll().assertSuccessful();
String outputDirPrefix = "out/production/" + moduleName + "/"; String outputDirPrefix = "out/production/" + moduleName + "/";
assertDeleted(outputDirPrefix + packageClassFqName.replace('.', '/') + ".class", assertDeleted(outputDirPrefix + packageClassFqName.replace('.', '/') + ".class",