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 09d31f3128d..6d3d6195ffd 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 @@ -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(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 dirtyFilesHolder, + @NotNull ModuleChunk chunk + ) + throws IOException { + if (!KotlinSourceFileCollector.getDirtySourceFiles(dirtyFilesHolder).isEmpty()) { + return true; + } + for (ModuleBuildTarget target : chunk.getTargets()) { - Collection 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) { 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 55051bad53f..7eba8646b52 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,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 getRemovedKotlinFiles( + @NotNull DirtyFilesHolder dirtyFilesHolder, + @NotNull ModuleBuildTarget target + ) throws IOException { + return ContainerUtil.filter(dirtyFilesHolder.getRemovedFiles(target), new Condition() { + @Override + public boolean value(String s) { + return FileUtilRt.extensionEquals(s, "kt"); + } + }); + } + @NotNull public static List getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) { final List moduleExcludes = ContainerUtil.map(target.getModule().getExcludeRootsList().getUrls(), new Function() { @@ -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() {}