diff --git a/java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/DirectoryIndexRestoreTest.java b/java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/ProjectFileIndexRestoreTest.java similarity index 97% rename from java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/DirectoryIndexRestoreTest.java rename to java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/ProjectFileIndexRestoreTest.java index b8dbc3d03731..ffd873b9f1e5 100644 --- a/java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/DirectoryIndexRestoreTest.java +++ b/java/java-tests/testSrc/com/intellij/java/openapi/roots/impl/ProjectFileIndexRestoreTest.java @@ -16,7 +16,7 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @HeavyPlatformTestCase.WrapInCommand -public class DirectoryIndexRestoreTest extends JavaProjectTestCase { +public class ProjectFileIndexRestoreTest extends JavaProjectTestCase { private VirtualFile myTempVFile; private String myTestDirPath; diff --git a/java/java-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexForExcludePatternsTest.kt b/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ExcludePatternsInProjectFileIndexTest.kt similarity index 99% rename from java/java-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexForExcludePatternsTest.kt rename to java/java-tests/testSrc/com/intellij/openapi/roots/impl/ExcludePatternsInProjectFileIndexTest.kt index 015e89dabe14..d2658212cfc7 100644 --- a/java/java-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexForExcludePatternsTest.kt +++ b/java/java-tests/testSrc/com/intellij/openapi/roots/impl/ExcludePatternsInProjectFileIndexTest.kt @@ -33,7 +33,7 @@ import org.junit.jupiter.api.extension.RegisterExtension @TestApplication @RunInEdt -class DirectoryIndexForExcludePatternsTest { +class ExcludePatternsInProjectFileIndexTest { @JvmField @RegisterExtension val projectModel: ProjectModelExtension = ProjectModelExtension() diff --git a/platform/platform-impl/src/com/intellij/ide/lightEdit/project/LightEditDirectoryIndex.java b/platform/platform-impl/src/com/intellij/ide/lightEdit/project/LightEditDirectoryIndex.java index d759e1d4bf85..aee972d4b53e 100644 --- a/platform/platform-impl/src/com/intellij/ide/lightEdit/project/LightEditDirectoryIndex.java +++ b/platform/platform-impl/src/com/intellij/ide/lightEdit/project/LightEditDirectoryIndex.java @@ -55,7 +55,7 @@ class LightEditDirectoryIndex extends DirectoryIndex { @NotNull @Override - public List getOrderEntries(@NotNull DirectoryInfo info) { + public List getOrderEntries(@NotNull VirtualFile fileOrDir) { return Collections.emptyList(); } diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexBeneathTest.kt b/platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/IteratingContentUnderExcludedTest.kt similarity index 99% rename from platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexBeneathTest.kt rename to platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/IteratingContentUnderExcludedTest.kt index 33aca55a545b..cd4c28ba77aa 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/DirectoryIndexBeneathTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/openapi/roots/impl/IteratingContentUnderExcludedTest.kt @@ -21,7 +21,7 @@ import java.io.File @TestApplication @RunInEdt -class DirectoryIndexBeneathTest { +class IteratingContentUnderExcludedTest { @JvmField @RegisterExtension val projectModel: ProjectModelExtension = ProjectModelExtension() diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndex.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndex.java index 4d817ab4d395..92c53bebf6e7 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndex.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndex.java @@ -51,7 +51,7 @@ public abstract class DirectoryIndex { public abstract String getPackageName(@NotNull VirtualFile dir); @NotNull - public abstract List getOrderEntries(@NotNull DirectoryInfo info); + public abstract List getOrderEntries(@NotNull VirtualFile fileOrDir); /** * @return names of unloaded modules which directly or transitively via exported dependencies depend on the specified module diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java index d78a586c17fe..b0470efe847f 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/DirectoryIndexImpl.java @@ -1,7 +1,9 @@ // Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.openapi.roots.impl; +import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.model.ModelBranch; +import com.intellij.notebook.editor.BackedVirtualFile; import com.intellij.openapi.Disposable; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -28,11 +30,12 @@ import com.intellij.util.SlowOperations; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.messages.MessageBusConnection; import com.intellij.workspaceModel.core.fileIndex.WorkspaceFileIndex; +import com.intellij.workspaceModel.core.fileIndex.WorkspaceFileSetWithCustomData; import com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileIndexEx; +import com.intellij.workspaceModel.core.fileIndex.impl.WorkspaceFileInternalInfo; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.annotations.TestOnly; import org.jetbrains.jps.model.module.JpsModuleSourceRootType; import java.util.Collection; @@ -214,10 +217,23 @@ public final class DirectoryIndexImpl extends DirectoryIndex implements Disposab @NotNull @Override - public List getOrderEntries(@NotNull DirectoryInfo info) { + public List getOrderEntries(@NotNull VirtualFile fileOrDir) { checkAvailability(); if (myProject.isDefault()) return Collections.emptyList(); - return getRootIndex().getOrderEntries(info); + if (myWorkspaceFileIndex != null) { + WorkspaceFileInternalInfo fileInfo = myWorkspaceFileIndex.getFileInfo(fileOrDir, true, true, true, true); + WorkspaceFileSetWithCustomData fileSet = fileInfo.findFileSet(data -> true); + if (fileSet == null) return Collections.emptyList(); + return getRootIndex().getOrderEntries(fileSet.getRoot()); + } + + if (fileOrDir instanceof VirtualFileWindow) { + fileOrDir = ((VirtualFileWindow)fileOrDir).getDelegate(); + } + fileOrDir = BackedVirtualFile.getOriginFileIfBacked(fileOrDir); + DirectoryInfo info = getInfoForFile(fileOrDir); + if (!(info instanceof DirectoryInfoImpl)) return Collections.emptyList(); + return getRootIndex().getOrderEntries(((DirectoryInfoImpl)info).getRoot()); } @Override @@ -227,14 +243,6 @@ public final class DirectoryIndexImpl extends DirectoryIndex implements Disposab return getRootIndex().getDependentUnloadedModules(module); } - @TestOnly - public void assertConsistency(DirectoryInfo info) { - List entries = getOrderEntries(info); - for (int i = 1; i < entries.size(); i++) { - assert RootIndex.BY_OWNER_MODULE.compare(entries.get(i - 1), entries.get(i)) <= 0; - } - } - private void checkAvailability() { ApplicationManager.getApplication().assertReadAccessAllowed(); if (myDisposed) { diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleFileIndexImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleFileIndexImpl.java index c398cd5d92e9..abcef4c36e04 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleFileIndexImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ModuleFileIndexImpl.java @@ -99,12 +99,12 @@ public class ModuleFileIndexImpl extends FileIndexBase implements ModuleFileInde @Override @NotNull public List getOrderEntriesForFile(@NotNull VirtualFile fileOrDir) { - return findAllOrderEntriesWithOwnerModule(myModule, myDirectoryIndex.getOrderEntries(getInfoForFileOrDirectory(fileOrDir))); + return findAllOrderEntriesWithOwnerModule(myModule, myDirectoryIndex.getOrderEntries(fileOrDir)); } @Override public OrderEntry getOrderEntryForFile(@NotNull VirtualFile fileOrDir) { - return findOrderEntryWithOwnerModule(myModule, myDirectoryIndex.getOrderEntries(getInfoForFileOrDirectory(fileOrDir))); + return findOrderEntryWithOwnerModule(myModule, myDirectoryIndex.getOrderEntries(fileOrDir)); } @Override diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java index ec9dab783655..ca258bd45a07 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ProjectFileIndexImpl.java @@ -147,7 +147,7 @@ public class ProjectFileIndexImpl extends FileIndexBase implements ProjectFileIn @Override @NotNull public List getOrderEntriesForFile(@NotNull VirtualFile file) { - return myDirectoryIndex.getOrderEntries(getInfoForFileOrDirectory(file)); + return myDirectoryIndex.getOrderEntries(file); } @Override diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java index 6cdcd11df0f0..ad54e5e25e57 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/RootIndex.java @@ -28,7 +28,6 @@ import com.intellij.util.containers.Stack; import com.intellij.util.containers.*; import com.intellij.workspaceModel.ide.VirtualFileUrls; import com.intellij.workspaceModel.ide.WorkspaceModel; -import com.intellij.workspaceModel.ide.impl.UtilsKt; import com.intellij.workspaceModel.ide.impl.legacyBridge.module.ModuleEntityUtils; import com.intellij.workspaceModel.storage.EntityStorage; import com.intellij.workspaceModel.storage.WorkspaceEntity; @@ -1187,9 +1186,8 @@ class RootIndex { } @NotNull - List getOrderEntries(@NotNull DirectoryInfo info) { - if (!(info instanceof DirectoryInfoImpl)) return Collections.emptyList(); - return getOrderEntryGraph().getOrderEntries(((DirectoryInfoImpl)info).getRoot()); + List getOrderEntries(@NotNull VirtualFile root) { + return getOrderEntryGraph().getOrderEntries(root); } @NotNull