mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
RootIndex: ensure transitive dependents end up in order entries cache
This commit is contained in:
@@ -159,7 +159,7 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
PsiTestUtil.addExcludedRoot(myModule2, myExcludeDir);
|
||||
ModuleRootModificationUtil.addModuleLibrary(myModule2, "lib",
|
||||
singletonList(myLibClsDir.getUrl()), singletonList(myLibSrcDir.getUrl()),
|
||||
Arrays.asList(myExcludedLibClsDir.getUrl(), myExcludedLibSrcDir.getUrl()), DependencyScope.COMPILE);
|
||||
Arrays.asList(myExcludedLibClsDir.getUrl(), myExcludedLibSrcDir.getUrl()), DependencyScope.COMPILE, true);
|
||||
}
|
||||
|
||||
// fill roots of module3
|
||||
@@ -204,8 +204,8 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
checkInfo(myTestResDir, myModule, false, false, "", JavaResourceRootType.TEST_RESOURCE, myModule);
|
||||
|
||||
checkInfo(myLibDir, myModule, false, false, null, null);
|
||||
checkInfo(myLibSrcDir, myModule, false, true, "", null, myModule2);
|
||||
checkInfo(myLibClsDir, myModule, true, false, "", null, myModule2);
|
||||
checkInfo(myLibSrcDir, myModule, false, true, "", null, myModule2, myModule3);
|
||||
checkInfo(myLibClsDir, myModule, true, false, "", null, myModule2, myModule3);
|
||||
|
||||
checkInfo(myModule2Dir, myModule2, false, false, null, null);
|
||||
checkInfo(mySrcDir2, myModule2, false, false, "", JavaSourceRootType.SOURCE, myModule2, myModule3);
|
||||
@@ -503,9 +503,11 @@ public class DirectoryIndexTest extends IdeaTestCase {
|
||||
checkInfo(myModule1Dir, myModule, true, false, "", null, myModule);
|
||||
checkInfo(mySrcDir1, myModule, true, false, "", JavaSourceRootType.SOURCE, myModule);
|
||||
|
||||
//todo this looks strange and inconsistent: the same library classes and sources have different order entries
|
||||
checkInfo(myLibDir, myModule, true, false, "lib", null, myModule);
|
||||
checkInfo(myLibClsDir, myModule, true, false, "", null, myModule2);
|
||||
checkInfo(myLibSrcDir, myModule, true, true, "", null, myModule);
|
||||
checkInfo(myLibClsDir, myModule, true, false, "", null, myModule2, myModule3);
|
||||
checkInfo(myLibSrcDir, myModule, true, true, "", null, myModule, myModule3);
|
||||
|
||||
checkInfo(myResDir, myModule, true, false, "", JavaResourceRootType.RESOURCE, myModule);
|
||||
}
|
||||
|
||||
|
||||
@@ -117,8 +117,9 @@ class RootIndex {
|
||||
}
|
||||
}
|
||||
else if (orderEntry instanceof ModuleSourceOrderEntry) {
|
||||
for (VirtualFile sourceRoot : ((ModuleSourceOrderEntry)orderEntry).getRootModel().getSourceRoots()) {
|
||||
depEntries.putValue(sourceRoot, orderEntry);
|
||||
final VirtualFile[] sourceRoots = ((ModuleSourceOrderEntry)orderEntry).getRootModel().getSourceRoots();
|
||||
for (VirtualFile sourceRoot : sourceRoots) {
|
||||
fillMapWithOrderEntries(sourceRoot, Arrays.asList(orderEntry), orderEntry.getOwnerModule(), null, null);
|
||||
}
|
||||
}
|
||||
else if (orderEntry instanceof LibraryOrSdkOrderEntry) {
|
||||
@@ -164,13 +165,13 @@ class RootIndex {
|
||||
|
||||
// fill ordered entries
|
||||
for (Map.Entry<VirtualFile, Collection<OrderEntry>> mapEntry : depEntries.entrySet()) {
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), null, null);
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), null, null, null);
|
||||
}
|
||||
for (Map.Entry<VirtualFile, Collection<OrderEntry>> mapEntry : libClassRootEntries.entrySet()) {
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), mapEntry.getKey(), null);
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), null, mapEntry.getKey(), null);
|
||||
}
|
||||
for (Map.Entry<VirtualFile, Collection<OrderEntry>> mapEntry : libSourceRootEntries.entrySet()) {
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), null, mapEntry.getKey());
|
||||
fillMapWithOrderEntries(mapEntry.getKey(), mapEntry.getValue(), null, null, mapEntry.getKey());
|
||||
}
|
||||
|
||||
mergeWithParentInfos();
|
||||
@@ -261,6 +262,7 @@ class RootIndex {
|
||||
|
||||
private void fillMapWithOrderEntries(final VirtualFile root,
|
||||
@NotNull final Collection<OrderEntry> orderEntries,
|
||||
@Nullable final Module module,
|
||||
@Nullable final VirtualFile libraryClassRoot,
|
||||
@Nullable final VirtualFile librarySourceRoot) {
|
||||
|
||||
@@ -273,7 +275,10 @@ class RootIndex {
|
||||
DirectoryInfo info = myRoots.get(root);
|
||||
if (info == null) return;
|
||||
|
||||
if (libraryClassRoot != null) {
|
||||
if (module != null) {
|
||||
if (info.getModule() != module) return;
|
||||
if (!info.isInModuleSource()) return;
|
||||
} else if (libraryClassRoot != null) {
|
||||
if (info.getLibraryClassRoot() != libraryClassRoot) return;
|
||||
if (info.isInModuleSource()) return;
|
||||
} else if (librarySourceRoot != null) {
|
||||
@@ -285,7 +290,7 @@ class RootIndex {
|
||||
OrderEntry[] orderEntriesArray = orderEntries.toArray(new OrderEntry[orderEntries.size()]);
|
||||
Arrays.sort(orderEntriesArray, DirectoryInfo.BY_OWNER_MODULE);
|
||||
|
||||
myRoots.put(root, info.withInternedEntries(orderEntriesArray));
|
||||
myRoots.put(root, info.withInternedEntries(info.calcNewOrderEntries(orderEntriesArray, null, info.getOrderEntries())));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+9
@@ -49,6 +49,14 @@ public class ModuleRootModificationUtil {
|
||||
final List<String> sourceRoots,
|
||||
final List<String> excludedRoots,
|
||||
final DependencyScope scope) {
|
||||
addModuleLibrary(module, libName, classesRoots, sourceRoots, excludedRoots, scope, false);
|
||||
}
|
||||
public static void addModuleLibrary(final Module module, final String libName,
|
||||
final List<String> classesRoots,
|
||||
final List<String> sourceRoots,
|
||||
final List<String> excludedRoots,
|
||||
final DependencyScope scope,
|
||||
final boolean exported) {
|
||||
updateModel(module, new Consumer<ModifiableRootModel>() {
|
||||
@Override
|
||||
public void consume(final ModifiableRootModel model) {
|
||||
@@ -68,6 +76,7 @@ public class ModuleRootModificationUtil {
|
||||
LibraryOrderEntry entry = model.findLibraryOrderEntry(library);
|
||||
assert entry != null : library;
|
||||
entry.setScope(scope);
|
||||
entry.setExported(exported);
|
||||
|
||||
doWriteAction(new Runnable() {
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user