mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
order enumerator fixes and tests (+hot swap fixed)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user