Optimized KotlinBuilder for targets without Kotlin. Checking dirty/removed files only.
Original commit: 7212597e61
This commit is contained in:
@@ -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() {}
|
||||
|
||||
Reference in New Issue
Block a user