diff options
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.java | 61 |
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()]); + } + +} |