Optimized KotlinBuilder for targets without Kotlin. Checking dirty/removed files only.
This commit is contained in:
@@ -106,10 +106,6 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
return ExitCode.NOTHING_DONE;
|
return ExitCode.NOTHING_DONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hasKotlinFiles(chunk)) {
|
|
||||||
messageCollector.report(INFO, "Kotlin JPS plugin version " + KotlinVersion.VERSION, NO_LOCATION);
|
|
||||||
}
|
|
||||||
|
|
||||||
ModuleBuildTarget representativeTarget = chunk.representativeTarget();
|
ModuleBuildTarget representativeTarget = chunk.representativeTarget();
|
||||||
|
|
||||||
// For non-incremental build: take all sources
|
// For non-incremental build: take all sources
|
||||||
@@ -117,6 +113,13 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
return ExitCode.NOTHING_DONE;
|
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();
|
File outputDir = representativeTarget.getOutputDir();
|
||||||
|
|
||||||
CompilerEnvironment environment = CompilerEnvironment.getEnvironmentFor(
|
CompilerEnvironment environment = CompilerEnvironment.getEnvironmentFor(
|
||||||
@@ -128,10 +131,6 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
if (!environment.success()) {
|
if (!environment.success()) {
|
||||||
if (!hasKotlinFiles(chunk)) {
|
|
||||||
// Configuration is bad, but there's nothing to compile anyways
|
|
||||||
return ExitCode.NOTHING_DONE;
|
|
||||||
}
|
|
||||||
environment.reportErrorsTo(messageCollector);
|
environment.reportErrorsTo(messageCollector);
|
||||||
return ExitCode.ABORT;
|
return ExitCode.ABORT;
|
||||||
}
|
}
|
||||||
@@ -189,7 +188,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
|
|
||||||
boolean haveRemovedFiles = false;
|
boolean haveRemovedFiles = false;
|
||||||
for (ModuleBuildTarget target : chunk.getTargets()) {
|
for (ModuleBuildTarget target : chunk.getTargets()) {
|
||||||
if (!dirtyFilesHolder.getRemovedFiles(target).isEmpty()) {
|
if (!KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target).isEmpty()) {
|
||||||
if (processedTargetsWithRemoved.add(target)) {
|
if (processedTargetsWithRemoved.add(target)) {
|
||||||
haveRemovedFiles = true;
|
haveRemovedFiles = true;
|
||||||
}
|
}
|
||||||
@@ -230,7 +229,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
String targetId = target.getId();
|
String targetId = target.getId();
|
||||||
outDirectories.put(targetId, target.getOutputDir());
|
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)));
|
moduleIdsAndSourceFiles.add(new Pair<String, File>(targetId, new File(file)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -302,16 +301,22 @@ public class KotlinBuilder extends ModuleLevelBuilder {
|
|||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasKotlinFiles(@NotNull ModuleChunk chunk) {
|
private static boolean hasKotlinDirtyOrRemovedFiles(
|
||||||
boolean hasKotlinFiles = false;
|
@NotNull DirtyFilesHolder<JavaSourceRootDescriptor, ModuleBuildTarget> dirtyFilesHolder,
|
||||||
|
@NotNull ModuleChunk chunk
|
||||||
|
)
|
||||||
|
throws IOException {
|
||||||
|
if (!KotlinSourceFileCollector.getDirtySourceFiles(dirtyFilesHolder).isEmpty()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for (ModuleBuildTarget target : chunk.getTargets()) {
|
for (ModuleBuildTarget target : chunk.getTargets()) {
|
||||||
Collection<File> sourceFiles = KotlinSourceFileCollector.getAllKotlinSourceFiles(target);
|
if (!KotlinSourceFileCollector.getRemovedKotlinFiles(dirtyFilesHolder, target).isEmpty()) {
|
||||||
if (!sourceFiles.isEmpty()) {
|
return true;
|
||||||
hasKotlinFiles = true;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return hasKotlinFiles;
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isJavaPluginEnabled(@NotNull CompileContext context) {
|
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.Condition;
|
||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
|
import com.intellij.openapi.util.io.FileUtilRt;
|
||||||
import com.intellij.util.Function;
|
import com.intellij.util.Function;
|
||||||
import com.intellij.util.Processor;
|
import com.intellij.util.Processor;
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
@@ -55,6 +56,19 @@ public class KotlinSourceFileCollector {
|
|||||||
return sourceFiles;
|
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
|
@NotNull
|
||||||
public static List<File> getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) {
|
public static List<File> getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) {
|
||||||
final List<File> moduleExcludes = ContainerUtil.map(target.getModule().getExcludeRootsList().getUrls(), new Function<String, File>() {
|
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) {
|
private static boolean isKotlinSourceFile(File file) {
|
||||||
return file.getPath().endsWith(".kt");
|
return FileUtilRt.extensionEquals(file.getName(), "kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
private KotlinSourceFileCollector() {}
|
private KotlinSourceFileCollector() {}
|
||||||
|
|||||||
Reference in New Issue
Block a user