jps: include project output to excluded list of containing module (IDEA-98186)

This commit is contained in:
nik
2012-12-28 15:37:56 +04:00
parent b13938b315
commit 83805c9fd9
2 changed files with 28 additions and 9 deletions
@@ -16,6 +16,7 @@
package org.jetbrains.jps.indices.impl;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import gnu.trove.THashMap;
import gnu.trove.THashSet;
import org.jetbrains.jps.indices.ModuleExcludeIndex;
@@ -60,15 +61,7 @@ public class ModuleExcludeIndexImpl implements ModuleExcludeIndex {
myExcludedRoots.addAll(moduleExcludes);
}
JpsJavaProjectExtension projectExtension = JpsJavaExtensionService.getInstance().getProjectExtension(model.getProject());
if (projectExtension != null) {
String url = projectExtension.getOutputUrl();
if (url != null) {
myExcludedRoots.add(JpsPathUtil.urlToFile(url));
}
}
Map<File, JpsModule> contentToModule = new HashMap<File, JpsModule>();
Map<File, JpsModule> contentToModule = new THashMap<File, JpsModule>(FileUtil.FILE_HASHING_STRATEGY);
for (JpsModule module : allModules) {
for (String contentUrl : module.getContentRootsList().getUrls()) {
File contentRoot = JpsPathUtil.urlToFile(contentUrl);
@@ -101,6 +94,24 @@ public class ModuleExcludeIndexImpl implements ModuleExcludeIndex {
}
}
}
JpsJavaProjectExtension projectExtension = JpsJavaExtensionService.getInstance().getProjectExtension(model.getProject());
if (projectExtension != null) {
String url = projectExtension.getOutputUrl();
if (!StringUtil.isEmpty(url)) {
File excluded = JpsPathUtil.urlToFile(url);
File parent = excluded;
while (parent != null) {
JpsModule module = contentToModule.get(parent);
if (module != null) {
myModuleToExcludesMap.get(module).add(excluded);
}
parent = parent.getParentFile();
}
myExcludedRoots.add(excluded);
}
}
for (List<File> files : myModuleToExcludesMap.values()) {
((ArrayList<File>)files).trimToSize();
}
@@ -41,8 +41,16 @@ public class ModuleExcludeIndexTest extends JpsJavaModelTestCase {
public void testExcludeProjectOutput() throws IOException {
File out = new File(myRoot, "out");
getJavaService().getOrCreateProjectExtension(myProject).setOutputUrl(JpsPathUtil.pathToUrl(out.getAbsolutePath()));
JpsModule module1 = addModule();
getJavaService().getOrCreateModuleExtension(module1).setInheritOutput(true);
JpsModule module2 = addModule();
module2.getContentRootsList().addUrl(JpsPathUtil.pathToUrl(out.getAbsolutePath()));
getJavaService().getOrCreateModuleExtension(module2).setInheritOutput(true);
assertNotExcluded(myRoot);
assertExcluded(out);
assertEmpty(getModuleExcludes(module1));
assertSameElements(getModuleExcludes(module2), out);
}
public void testExcludeModuleOutput() {