From b31e2d7421b6a514da9a7d816d71cbd916e1fc2b Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 12 Nov 2013 15:44:51 +0400 Subject: [PATCH] JPS: ignore excluded directories and files in compilation. #KT-4188 fixed --- .../jps/build/KotlinSourceFileCollector.java | 48 +++++++++++++++---- 1 file changed, 39 insertions(+), 9 deletions(-) diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java index 029a59ff91e..55051bad53f 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinSourceFileCollector.java @@ -16,7 +16,9 @@ package org.jetbrains.jet.jps.build; +import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.Function; import com.intellij.util.Processor; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; @@ -25,7 +27,10 @@ import org.jetbrains.jps.builders.FileProcessor; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.incremental.ModuleBuildTarget; import org.jetbrains.jps.model.java.JavaSourceRootType; +import org.jetbrains.jps.model.java.JpsJavaExtensionService; +import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes; import org.jetbrains.jps.model.module.JpsModuleSourceRoot; +import org.jetbrains.jps.util.JpsPathUtil; import java.io.File; import java.io.IOException; @@ -52,17 +57,42 @@ public class KotlinSourceFileCollector { @NotNull public static List getAllKotlinSourceFiles(@NotNull ModuleBuildTarget target) { + final List moduleExcludes = ContainerUtil.map(target.getModule().getExcludeRootsList().getUrls(), new Function() { + @Override + public File fun(String url) { + return JpsPathUtil.urlToFile(url); + } + }); + + final JpsCompilerExcludes compilerExcludes = + JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(target.getModule().getProject()).getCompilerExcludes(); + final List result = ContainerUtil.newArrayList(); for (JpsModuleSourceRoot sourceRoot : getRelevantSourceRoots(target)) { - FileUtil.processFilesRecursively(sourceRoot.getFile(), new Processor() { - @Override - public boolean process(File file) { - if (file.isFile() && isKotlinSourceFile(file)) { - result.add(file); - } - return true; - } - }); + FileUtil.processFilesRecursively( + sourceRoot.getFile(), + new Processor() { + @Override + public boolean process(File file) { + if (compilerExcludes.isExcluded(file)) return true; + + if (file.isFile() && isKotlinSourceFile(file)) { + result.add(file); + } + return true; + } + }, + new Processor() { + @Override + public boolean process(final File dir) { + return ContainerUtil.find(moduleExcludes, new Condition() { + @Override + public boolean value(File exclude) { + return FileUtil.filesEqual(exclude, dir); + } + }) == null; + } + }); } return result; }