aboutsummaryrefslogtreecommitdiffstats
path: root/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
diff options
context:
space:
mode:
Diffstat (limited to 'sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java')
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java61
1 files changed, 61 insertions, 0 deletions
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java b/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
new file mode 100644
index 00000000000..45e26f401d4
--- /dev/null
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/SdChooseByNameContributor.java
@@ -0,0 +1,61 @@
+package org.intellij.sdk.language;
+
+import com.intellij.navigation.ChooseByNameContributor;
+import com.intellij.navigation.NavigationItem;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.search.FileTypeIndex;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.util.indexing.FileBasedIndex;
+import org.intellij.sdk.language.psi.SdDeclaration;
+import org.intellij.sdk.language.psi.SdFile;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class SdChooseByNameContributor implements ChooseByNameContributor {
+
+ @Override
+ public String @NotNull [] getNames(Project project, boolean includeNonProjectItems) {
+ Collection<VirtualFile> virtualFiles = FileBasedIndex.getInstance().getContainingFiles(
+ FileTypeIndex.NAME,
+ SdFileType.INSTANCE,
+ GlobalSearchScope.allScope(project)
+ );
+
+ List<SdDeclaration> declarations = new ArrayList<>();
+
+ for (VirtualFile file : virtualFiles) {
+ SdFile sdFile = (SdFile) PsiManager.getInstance(project).findFile(file);
+ declarations.addAll(SdUtil.findDeclarations(sdFile));
+ }
+
+ List<String> names = new ArrayList<>(declarations.size());
+ for (SdDeclaration declaration : declarations) {
+ names.add(declaration.getName());
+ }
+ return names.toArray(new String[names.size()]);
+ }
+
+ @Override
+ public NavigationItem @NotNull [] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) {
+ Collection<VirtualFile> virtualFiles = FileBasedIndex.getInstance().getContainingFiles(
+ FileTypeIndex.NAME,
+ SdFileType.INSTANCE,
+ GlobalSearchScope.allScope(project)
+ );
+
+ List<SdDeclaration> declarations = new ArrayList<>();
+
+ for (VirtualFile file : virtualFiles) {
+ SdFile sdFile = (SdFile) PsiManager.getInstance(project).findFile(file);
+ declarations.addAll(SdUtil.findDeclarationsByName(sdFile, name));
+ }
+
+ return declarations.toArray(new NavigationItem[declarations.size()]);
+ }
+
+}