Optimized KotlinBuilder for targets without Kotlin. Checking dirty/removed files only.

Original commit: 7212597e61
This commit is contained in:
Evgeny Gerashchenko
2014-07-08 12:08:03 +04:00
parent fd8cff1f53
commit 30e1b77c9b
2 changed files with 37 additions and 18 deletions
@@ -106,10 +106,6 @@ public class KotlinBuilder extends ModuleLevelBuilder {
return ExitCode.NOTHING_DONE;
}
if (hasKotlinFiles(chunk)) {
messageCollector.report(INFO, "Kotlin JPS plugin version " + KotlinVersion.VERSION, NO_LOCATION);
}
ModuleBuildTarget representativeTarget = chunk.representativeTarget();
// For non-incremental build: take all sources
@@ -117,6 +113,13 @@ public class KotlinBuilder extends ModuleLevelBuilder {
return ExitCode.NOTHING_DONE;
}
boolean hasKotlinFiles = hasKotlinDirtyOrRemovedFiles(dirtyFilesHolder, chunk);
if (!hasKotlinFiles) {
return ExitCode.NOTHING_DONE;
}
messageCollector.report(INFO, "Kotlin JPS plugin version " + KotlinVersion.VERSION, NO_LOCATION);
File outputDir = representativeTarget.getOutputDir();
CompilerEnvironment environment = CompilerEnvironment.getEnvironmentFor(
@@ -128,10 +131,6 @@ public class KotlinBuilder extends ModuleLevelBuilder {
}
);
if (!environment.success()) {
if (!hasKotlinFiles(chunk)) {
// Configuration is bad, but there's nothing to compile anyways
return ExitCode.NOTHING_DONE;
}
environment.reportErrorsTo(messageCollector);
return ExitCode.ABORT;
}
@@ -189,7 +188,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
boolean haveRemovedFiles = false;
for (ModuleBuildTarget target : chunk.getTargets()) {
if (!dirtyFilesHolder.getRemovedFiles(target).isEmpty()) {
if (!KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target).isEmpty()) {
if (processedTargetsWithRemoved.add(target)) {
haveRemovedFiles = true;
}
@@ -230,7 +229,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
String targetId = target.getId();
outDirectories.put(targetId, target.getOutputDir());
for (String file : dirtyFilesHolder.getRemovedFiles(target)) {
for (String file : KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target)) {
moduleIdsAndSourceFiles.add(new Pair<String, File>(targetId, new File(file)));
}
}
@@ -302,16 +301,22 @@ public class KotlinBuilder extends ModuleLevelBuilder {
return set;
}
private static boolean hasKotlinFiles(@NotNull ModuleChunk chunk) {
boolean hasKotlinFiles = false;
private static boolean hasKotlinDirtyOrRemovedFiles(
@NotNull DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
@NotNull ModuleChunk chunk
)
throws IOException {
if (!KotlinSourceFileCollector.getDirtySourceFiles(dirtyFilesHolder).isEmpty()) {
return true;
}
for (ModuleBuildTarget target : chunk.getTargets()) {
Collection<File> sourceFiles = KotlinSourceFileCollector.getAllKotlinSourceFiles(target);
if (!sourceFiles.isEmpty()) {
hasKotlinFiles = true;
break;
if (!KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target).isEmpty()) {
return true;
}
}
return hasKotlinFiles;
return false;
}
private static boolean isJavaPluginEnabled(@NotNull CompileContext context) {
@@ -18,6 +18,7 @@ package org.jetbrains.jet.jps.build;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.util.Function;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
@@ -55,6 +56,19 @@ public class KotlinSourceFileCollector {
return sourceFiles;
}
@NotNull
public static List<String> getRemovedKotlinFiles(
@NotNull DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
@NotNull ModuleBuildTarget target
) throws IOException {
return ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target), new Condition<String>() {
@Override
public boolean value(String s) {
return FileUtilRt.extensionEquals(s, "kt");
}
});
}
@NotNull
public static List<File> getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) {
final List<File> moduleExcludes = ContainerUtil.map(target.getModule().getExcludeRootsList().getUrls(), new Function<String, File>() {
@@ -105,7 +119,7 @@ public class KotlinSourceFileCollector {
}
private static boolean isKotlinSourceFile(File file) {
return file.getPath().endsWith(".kt");
return FileUtilRt.extensionEquals(file.getName(), "kt");
}
private KotlinSourceFileCollector() {}