order enumerator fixes and tests (+hot swap fixed)

This commit is contained in:
Anton Makeev
2010-12-27 18:23:31 +03:00
parent a7b07b3264
commit efdb3f0ddf
8 changed files with 82 additions and 22 deletions
@@ -77,7 +77,7 @@ public class HotSwapManager extends AbstractProjectComponent {
ApplicationManager.getApplication().runReadAction(new Runnable() {
public void run() {
final List<VirtualFile> allClasses = OrderEnumerator.orderEntries(myProject).getPathsList().getRootDirs();
final List<VirtualFile> allClasses = OrderEnumerator.orderEntries(myProject).withoutSdk().getPathsList().getRootDirs();
final VirtualFile[] allDirs = VfsUtil.toVirtualFileArray(allClasses);
final FileTypeManager fileTypeManager = FileTypeManager.getInstance();
@@ -9,10 +9,12 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.ArrayUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import static com.intellij.openapi.roots.OrderEnumerator.orderEntries;
/**
* @author nik
*/
@@ -53,18 +55,31 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
public void testModuleDependency() throws Exception {
final Module dep = createModule("dep");
final VirtualFile srcRoot = addSourceRoot(dep, false);
final VirtualFile testRoot = addSourceRoot(dep, true);
final VirtualFile output = setModuleOutput(dep, false);
final VirtualFile testOutput = setModuleOutput(dep, true);
final VirtualFile depSrcRoot = addSourceRoot(dep, false);
final VirtualFile depTestRoot = addSourceRoot(dep, true);
final VirtualFile depOutput = setModuleOutput(dep, false);
final VirtualFile depTestOutput = setModuleOutput(dep, true);
addLibraryDependency(dep, createJDomLibrary(), DependencyScope.COMPILE, true);
addModuleDependency(myModule, dep, DependencyScope.COMPILE, true);
assertClassRoots(orderEntries(myModule).withoutSdk(), testOutput, output);
assertClassRoots(orderEntries(myModule).withoutSdk().recursively(), testOutput, output, getJDomJar());
assertSourceRoots(orderEntries(myModule), srcRoot, testRoot);
assertSourceRoots(orderEntries(myModule).recursively(), srcRoot, testRoot, getJDomSources());
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().recursively().classes().withoutSelfModuleOutput(), testOutput, output, getJDomJar());
final VirtualFile srcRoot = addSourceRoot(myModule, false);
final VirtualFile testRoot = addSourceRoot(myModule, true);
final VirtualFile output = setModuleOutput(myModule, false);
final VirtualFile testOutput = setModuleOutput(myModule, true);
assertClassRoots(orderEntries(myModule).withoutSdk(), testOutput, output, depTestOutput, depOutput);
assertClassRoots(orderEntries(myModule).withoutSdk().recursively(), testOutput, output, depTestOutput, depOutput, getJDomJar());
assertSourceRoots(orderEntries(myModule), srcRoot, testRoot, depSrcRoot, depTestRoot);
assertSourceRoots(orderEntries(myModule).recursively(), srcRoot, testRoot, depSrcRoot, depTestRoot, getJDomSources());
assertEnumeratorRoots(orderEntries(myModule).withoutSdk().recursively().classes().withoutSelfModuleOutput(),
output, depTestOutput, depOutput, getJDomJar());
assertEnumeratorRoots(orderEntries(myModule).productionOnly().withoutSdk().recursively().classes().withoutSelfModuleOutput(),
depOutput, getJDomJar());
assertClassRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively(),
depTestOutput, depOutput, getJDomJar());
assertSourceRoots(orderEntries(myModule).withoutSdk().withoutModuleSourceEntries().recursively(),
depSrcRoot, depTestRoot, getJDomSources());
}
public void testModuleDependencyScope() throws Exception {
@@ -80,7 +95,7 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
assertClassRoots(ProjectRootManager.getInstance(myProject).orderEntries().withoutSdk(), getJDomJar());
assertClassRoots(ProjectRootManager.getInstance(myProject).orderEntries().withoutSdk().productionOnly(), getJDomJar());
}
public void testNotExportedLibrary() throws Exception {
final Module dep = createModule("dep");
addLibraryDependency(dep, createJDomLibrary(), DependencyScope.COMPILE, false);
@@ -111,7 +126,7 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
assertRoots(orderEntries(myModule).classes().usingCache().getPathsList(), getRtJar(), getJDomJar());
assertRoots(orderEntries(myModule).withoutSdk().classes().usingCache().getPathsList(), getJDomJar());
}
public void testCachingUrls() throws Exception {
final String[] urls = orderEntries(myModule).classes().usingCache().getUrls();
assertOrderedEquals(urls, getRtJar().getUrl());
@@ -127,6 +142,32 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
assertOrderedEquals(orderEntries(myModule).sources().usingCache().getUrls(), getJDomSources().getUrl());
}
public void testProject() throws Exception {
addLibraryDependency(myModule, createJDomLibrary());
final VirtualFile srcRoot = addSourceRoot(myModule, false);
final VirtualFile testRoot = addSourceRoot(myModule, true);
final VirtualFile output = setModuleOutput(myModule, false);
final VirtualFile testOutput = setModuleOutput(myModule, true);
assertClassRoots(orderEntries(myProject).withoutSdk(), testOutput, output, getJDomJar());
assertSourceRoots(orderEntries(myProject).withoutSdk(), srcRoot, testRoot, getJDomSources());
}
public void testModules() throws Exception {
addLibraryDependency(myModule, createJDomLibrary());
final VirtualFile srcRoot = addSourceRoot(myModule, false);
final VirtualFile testRoot = addSourceRoot(myModule, true);
final VirtualFile output = setModuleOutput(myModule, false);
final VirtualFile testOutput = setModuleOutput(myModule, true);
assertClassRoots(ProjectRootManager.getInstance(myProject).orderEntries(Arrays.asList(myModule)).withoutSdk(),
testOutput, output, getJDomJar());
assertSourceRoots(ProjectRootManager.getInstance(myProject).orderEntries(Arrays.asList(myModule)).withoutSdk(),
srcRoot, testRoot, getJDomSources());
}
private static void assertClassRoots(final OrderEnumerator enumerator, VirtualFile... files) {
assertEnumeratorRoots(enumerator.classes(), files);
}
@@ -143,5 +184,4 @@ public class OrderEnumeratorTest extends ModuleRootManagerTestCase {
}
assertOrderedEquals(rootsEnumerator.getUrls(), ArrayUtil.toStringArray(expectedUrls));
}
}
@@ -66,6 +66,10 @@ public abstract class OrderEnumerator {
public abstract OrderEnumerator withoutDepModules();
/**
* Skip root module's entries
* @return this
*/
public abstract OrderEnumerator withoutModuleSourceEntries();
public OrderEnumerator librariesOnly() {
@@ -44,7 +44,7 @@ public class ModuleOrderEnumerator extends OrderEnumeratorBase {
}
@Override
public boolean isMainModuleModel(@NotNull ModuleRootModel rootModel) {
public boolean isRootModuleModel(@NotNull ModuleRootModel rootModel) {
return rootModel.equals(myRootModel);
}
}
@@ -17,6 +17,7 @@ package com.intellij.openapi.roots.impl;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootModel;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.util.Processor;
import gnu.trove.THashSet;
@@ -50,4 +51,9 @@ public class ModulesOrderEnumerator extends OrderEnumeratorBase {
processEntries(getRootModel(module), processor, processed, true);
}
}
@Override
public boolean isRootModuleModel(@NotNull ModuleRootModel rootModel) {
return myModules.contains(rootModel.getModule());
}
}
@@ -44,7 +44,7 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
private boolean myWithoutJdk;
private boolean myWithoutLibraries;
protected boolean myWithoutDepModules;
private boolean myWithoutThisModuleContent;
private boolean myWithoutRootModuleContent;
protected boolean myRecursively;
protected boolean myRecursivelyExportedOnly;
private boolean myExportedOnly;
@@ -105,7 +105,7 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
@Override
public OrderEnumerator withoutModuleSourceEntries() {
myWithoutThisModuleContent = true;
myWithoutRootModuleContent = true;
return this;
}
@@ -186,7 +186,7 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
flags <<= 1;
if (myWithoutDepModules) flags |= 1;
flags <<= 1;
if (myWithoutThisModuleContent) flags |= 1;
if (myWithoutRootModuleContent) flags |= 1;
flags <<= 1;
if (myRecursively) flags |= 1;
flags <<= 1;
@@ -206,9 +206,13 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
if (myWithoutLibraries && entry instanceof LibraryOrderEntry) continue;
if (myWithoutDepModules) {
if (!myRecursively && entry instanceof ModuleOrderEntry) continue;
if (entry instanceof ModuleSourceOrderEntry && !isMainModuleModel(((ModuleSourceOrderEntry)entry).getRootModel())) continue;
if (entry instanceof ModuleSourceOrderEntry && !isRootModuleModel(((ModuleSourceOrderEntry)entry).getRootModel())) continue;
}
if (myWithoutRootModuleContent
&& entry instanceof ModuleSourceOrderEntry
&& isRootModuleModel(((ModuleSourceOrderEntry)entry).getRootModel())) {
continue;
}
if (myWithoutThisModuleContent && entry instanceof ModuleSourceOrderEntry) continue;
OrderEnumerationHandler.AddDependencyType shouldAdd = OrderEnumerationHandler.AddDependencyType.DEFAULT;
for (OrderEnumerationHandler handler : myCustomHandlers) {
@@ -348,7 +352,7 @@ abstract class OrderEnumeratorBase extends OrderEnumerator {
}
}
public boolean isMainModuleModel(@NotNull ModuleRootModel rootModel) {
public boolean isRootModuleModel(@NotNull ModuleRootModel rootModel) {
return false;
}
@@ -215,7 +215,7 @@ public class OrderRootsEnumeratorImpl implements OrderRootsEnumerator {
else if (type.equals(OrderRootType.CLASSES)) {
final CompilerModuleExtension extension = rootModel.getModuleExtension(CompilerModuleExtension.class);
if (extension != null) {
if (myWithoutSelfModuleOutput && myOrderEnumerator.isMainModuleModel(rootModel)) {
if (myWithoutSelfModuleOutput && myOrderEnumerator.isRootModuleModel(rootModel)) {
if (!productionOnly) {
Collections.addAll(result, extension.getOutputRoots(false));
}
@@ -235,7 +235,7 @@ public class OrderRootsEnumeratorImpl implements OrderRootsEnumerator {
else if (type.equals(OrderRootType.CLASSES)) {
final CompilerModuleExtension extension = rootModel.getModuleExtension(CompilerModuleExtension.class);
if (extension != null) {
if (myWithoutSelfModuleOutput && myOrderEnumerator.isMainModuleModel(rootModel)) {
if (myWithoutSelfModuleOutput && myOrderEnumerator.isRootModuleModel(rootModel)) {
if (!productionOnly) {
Collections.addAll(result, extension.getOutputRootUrls(false));
}
@@ -18,6 +18,7 @@ package com.intellij.openapi.roots.impl;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootModel;
import com.intellij.openapi.roots.OrderEntry;
import com.intellij.util.Processor;
import gnu.trove.THashSet;
@@ -55,4 +56,9 @@ public class ProjectOrderEnumerator extends OrderEnumeratorBase {
}
});
}
@Override
public boolean isRootModuleModel(@NotNull ModuleRootModel rootModel) {
return true;
}
}