diff --git a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsCompilerExcludes.java b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsCompilerExcludes.java index bea08537e9b1..2b86e634a1ec 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsCompilerExcludes.java +++ b/jps/model-api/src/org/jetbrains/jps/model/java/compiler/JpsCompilerExcludes.java @@ -16,6 +16,7 @@ package org.jetbrains.jps.model.java.compiler; import java.io.File; +import java.util.Set; /** * @author nik @@ -25,5 +26,17 @@ public interface JpsCompilerExcludes { void addExcludedDirectory(String url, boolean recursively); + /** + * @return {@code true} if {@code file} is explicitly excluded or located under excluded directory + */ boolean isExcluded(File file); + + /** + * @return set of explicitly excluded files + */ + Set getExcludedFiles(); + + Set getExcludedDirectories(); + + Set getRecursivelyExcludedDirectories(); } diff --git a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsCompilerExcludesImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsCompilerExcludesImpl.java index 9d52f7e4e4e4..0a835f200291 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsCompilerExcludesImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/java/impl/compiler/JpsCompilerExcludesImpl.java @@ -16,20 +16,20 @@ package org.jetbrains.jps.model.java.impl.compiler; import com.intellij.openapi.util.io.FileUtilRt; -import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.jps.model.java.compiler.JpsCompilerExcludes; +import org.jetbrains.jps.util.JpsPathUtil; import java.io.File; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.Set; /** * @author nik */ public class JpsCompilerExcludesImpl implements JpsCompilerExcludes { - private final Set myFiles = new HashSet<>(); - private final Set myDirectories = new HashSet<>(); - private final Set myRecursivelyExcludedDirectories = new HashSet<>(); + private final Set myFiles = new LinkedHashSet<>(); + private final Set myDirectories = new LinkedHashSet<>(); + private final Set myRecursivelyExcludedDirectories = new LinkedHashSet<>(); @Override public void addExcludedFile(String url) { @@ -50,7 +50,7 @@ public class JpsCompilerExcludesImpl implements JpsCompilerExcludes { } @Override - public boolean isExcluded(File file) { + public boolean isExcluded(File file) { if (myFiles.contains(file)) { return true; } @@ -70,4 +70,19 @@ public class JpsCompilerExcludesImpl implements JpsCompilerExcludes { } return false; } + + @Override + public Set getExcludedFiles() { + return myFiles; + } + + @Override + public Set getExcludedDirectories() { + return myDirectories; + } + + @Override + public Set getRecursivelyExcludedDirectories() { + return myRecursivelyExcludedDirectories; + } } diff --git a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java index 654f349a96a2..6b73a05a5cb6 100644 --- a/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java +++ b/jps/model-serialization/testSrc/org/jetbrains/jps/model/serialization/JpsCompilerConfigurationTest.java @@ -23,6 +23,8 @@ import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerOptions; import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import org.jetbrains.jps.util.JpsPathUtil; +import java.io.File; + public class JpsCompilerConfigurationTest extends JpsSerializationTestCase { public void testLoadFromIpr() { doTest("jps/model-serialization/testData/compilerConfiguration/compilerConfiguration.ipr"); @@ -41,18 +43,24 @@ public class JpsCompilerConfigurationTest extends JpsSerializationTestCase { ProcessorConfigProfile defaultProfile = configuration.getDefaultAnnotationProcessingProfile(); assertTrue(defaultProfile.isEnabled()); assertFalse(defaultProfile.isObtainProcessorsFromClasspath()); - assertEquals(FileUtil.toSystemDependentName(JpsPathUtil.urlToPath(getUrl("src"))), defaultProfile.getProcessorPath()); + String srcDir = JpsPathUtil.urlToPath(getUrl("src")); + assertEquals(FileUtil.toSystemDependentName(srcDir), defaultProfile.getProcessorPath()); assertEquals("b", defaultProfile.getProcessorOptions().get("a")); assertEquals("d", defaultProfile.getProcessorOptions().get("c")); assertEquals("gen", defaultProfile.getGeneratedSourcesDirectoryName(false)); + JpsCompilerExcludes excludes = configuration.getCompilerExcludes(); + assertSameElements(excludes.getExcludedFiles(), new File(srcDir, "A.java")); + assertSameElements(excludes.getExcludedDirectories(), new File(srcDir, "nonrec")); + assertSameElements(excludes.getRecursivelyExcludedDirectories(), new File(srcDir, "rec")); + assertFalse(isExcluded(excludes, "src/nonrec/x/Y.java")); assertTrue(isExcluded(excludes, "src/nonrec/Y.java")); assertTrue(isExcluded(excludes, "src/rec/x/Y.java")); assertTrue(isExcluded(excludes, "src/rec/Y.java")); assertTrue(isExcluded(excludes, "src/A.java")); assertFalse(isExcluded(excludes, "src/B.java")); - + JpsJavaCompilerOptions options = configuration.getCurrentCompilerOptions(); assertNotNull(options); assertEquals(512, options.MAXIMUM_HEAP_SIZE);