mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[workspace model index] API: provide ProjectFileIndex.findContainingSdks method (IJPL-161203)
GitOrigin-RevId: f5e08c2b5f3b7d6f584ee5b59b825ddde4fe6087
This commit is contained in:
committed by
intellij-monorepo-bot
parent
32248216d8
commit
cd899d9e2d
+7
@@ -8,8 +8,10 @@ import com.intellij.openapi.roots.ProjectFileIndex;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import com.intellij.platform.workspace.jps.entities.LibraryEntity;
|
||||
import com.intellij.platform.workspace.jps.entities.SdkEntity;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -103,6 +105,11 @@ final class LightEditProjectFileIndex implements ProjectFileIndex {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull @Unmodifiable Collection<@NotNull SdkEntity> findContainingSdks(@NotNull VirtualFile fileOrDir) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExcluded(@NotNull VirtualFile file) {
|
||||
return false;
|
||||
|
||||
+22
@@ -16,6 +16,8 @@ import com.intellij.openapi.roots.impl.ProjectFileIndexScopes.NOT_IN_PROJECT
|
||||
import com.intellij.openapi.roots.impl.ProjectFileIndexScopes.assertScope
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.platform.testFramework.assertion.collectionAssertion.CollectionAssertions.assertEmpty
|
||||
import com.intellij.platform.testFramework.assertion.collectionAssertion.CollectionAssertions.assertEqualsUnordered
|
||||
import com.intellij.testFramework.junit5.RunInEdt
|
||||
import com.intellij.testFramework.junit5.TestApplication
|
||||
import com.intellij.testFramework.rules.ProjectModelExtension
|
||||
@@ -23,6 +25,7 @@ import com.intellij.testFramework.rules.TempDirectoryExtension
|
||||
import org.junit.jupiter.api.BeforeEach
|
||||
import org.junit.jupiter.api.Test
|
||||
import org.junit.jupiter.api.extension.RegisterExtension
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@TestApplication
|
||||
@RunInEdt(writeIntent = true)
|
||||
@@ -60,11 +63,30 @@ class SdkInProjectFileIndexTest {
|
||||
it.addRoot(sdkSourcesRoot, OrderRootType.SOURCES)
|
||||
it.addRoot(sdkDocRoot, OrderRootType.DOCUMENTATION)
|
||||
}
|
||||
assertEmpty(fileIndex.findContainingSdks(sdkRoot))
|
||||
ModuleRootModificationUtil.setModuleSdk(module, sdk)
|
||||
|
||||
fileIndex.assertScope(sdkRoot, IN_LIBRARY)
|
||||
fileIndex.assertScope(sdkSourcesRoot, IN_LIBRARY or IN_SOURCE)
|
||||
fileIndex.assertScope(sdkDocRoot, NOT_IN_PROJECT)
|
||||
assertEquals(sdk.name, fileIndex.findContainingSdks(sdkRoot).single().name)
|
||||
assertEquals(sdk.name, fileIndex.findContainingSdks(sdkSourcesRoot).single().name)
|
||||
assertEmpty(fileIndex.findContainingSdks(sdkDocRoot))
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `two sdk with same root`() {
|
||||
val sdk1 = projectModel.addSdk("sdk1") {
|
||||
it.addRoot(sdkRoot, OrderRootType.CLASSES)
|
||||
}
|
||||
val sdk2 = projectModel.addSdk("sdk2") {
|
||||
it.addRoot(sdkRoot, OrderRootType.CLASSES)
|
||||
}
|
||||
val module2 = projectModel.createModule("module2")
|
||||
ModuleRootModificationUtil.setModuleSdk(module, sdk1)
|
||||
assertEquals("sdk1", fileIndex.findContainingSdks(sdkRoot).single().name)
|
||||
ModuleRootModificationUtil.setModuleSdk(module2, sdk2)
|
||||
assertEqualsUnordered(listOf("sdk1", "sdk2"), fileIndex.findContainingSdks(sdkRoot).map { it.name })
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -47,6 +47,7 @@ com.intellij.openapi.roots.OrderRootsEnumerator
|
||||
com.intellij.openapi.roots.ProjectFileIndex
|
||||
- com.intellij.openapi.roots.FileIndex
|
||||
- *a:findContainingLibraries(com.intellij.openapi.vfs.VirtualFile):java.util.Collection
|
||||
- *a:findContainingSdks(com.intellij.openapi.vfs.VirtualFile):java.util.Collection
|
||||
- *a:getModulesForFile(com.intellij.openapi.vfs.VirtualFile,Z):java.util.Set
|
||||
*:com.intellij.openapi.roots.ProjectModelElement
|
||||
- *a:getExternalSource():com.intellij.openapi.roots.ProjectModelExternalSource
|
||||
|
||||
@@ -6,6 +6,7 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.platform.workspace.jps.entities.LibraryEntity;
|
||||
import com.intellij.platform.workspace.jps.entities.SdkEntity;
|
||||
import com.intellij.util.concurrency.annotations.RequiresReadLock;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -188,6 +189,12 @@ public interface ProjectFileIndex extends FileIndex {
|
||||
@ApiStatus.Experimental
|
||||
@NotNull @Unmodifiable Collection<@NotNull LibraryEntity> findContainingLibraries(@NotNull VirtualFile fileOrDir);
|
||||
|
||||
/**
|
||||
* Returns SDKs used in the project which have {@code fileOrDir} under their classes or source roots.
|
||||
*/
|
||||
@ApiStatus.Experimental
|
||||
@NotNull @Unmodifiable Collection<@NotNull SdkEntity> findContainingSdks(@NotNull VirtualFile fileOrDir);
|
||||
|
||||
/**
|
||||
* Checks if the specified file or directory is located under project roots but the file itself or one of its parent directories is ignored
|
||||
* by {@link FileTypeRegistry#isFileIgnored(VirtualFile)}).
|
||||
|
||||
+7
@@ -11,6 +11,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileFilter;
|
||||
import com.intellij.platform.backend.workspace.WorkspaceModel;
|
||||
import com.intellij.platform.workspace.jps.entities.LibraryEntity;
|
||||
import com.intellij.platform.workspace.jps.entities.SdkEntity;
|
||||
import com.intellij.platform.workspace.storage.ImmutableEntityStorage;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
@@ -23,6 +24,7 @@ import kotlin.Pair;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.annotations.Unmodifiable;
|
||||
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
|
||||
|
||||
import java.util.*;
|
||||
@@ -78,6 +80,11 @@ public class ProjectFileIndexImpl extends FileIndexBase implements ProjectFileIn
|
||||
return myWorkspaceFileIndex.findContainingEntities(fileOrDir, LibraryEntity.class, true, false, false, true, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public @NotNull @Unmodifiable Collection<@NotNull SdkEntity> findContainingSdks(@NotNull VirtualFile fileOrDir) {
|
||||
return myWorkspaceFileIndex.findContainingEntities(fileOrDir, SdkEntity.class, true, false, false, true, true, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isUnderIgnored(@NotNull VirtualFile file) {
|
||||
WorkspaceFileInternalInfo info = myWorkspaceFileIndex.getFileInfo(file, true, true, true, true, true, true);
|
||||
|
||||
Reference in New Issue
Block a user