aboutsummaryrefslogtreecommitdiffstats
path: root/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
diff options
context:
space:
mode:
Diffstat (limited to 'sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java')
-rw-r--r--sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
new file mode 100644
index 00000000000..a5f45e6b26b
--- /dev/null
+++ b/sd-plugin/src/main/java/org/intellij/sdk/language/structure/SdStructureViewElement.java
@@ -0,0 +1,84 @@
+package org.intellij.sdk.language.structure;
+
+import com.intellij.ide.projectView.PresentationData;
+import com.intellij.ide.structureView.StructureViewTreeElement;
+import com.intellij.ide.util.treeView.smartTree.SortableTreeElement;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.psi.NavigatablePsiElement;
+import com.intellij.psi.PsiElement;
+import org.intellij.sdk.language.SdUtil;
+import org.intellij.sdk.language.psi.SdDocumentDefinition;
+import org.intellij.sdk.language.psi.SdDocumentStructDefinition;
+import org.intellij.sdk.language.psi.SdDocumentSummaryDefinition;
+import org.intellij.sdk.language.psi.SdFile;
+import org.intellij.sdk.language.psi.SdRankProfileDefinition;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SdStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
+
+ private final NavigatablePsiElement myElement;
+
+ public SdStructureViewElement(NavigatablePsiElement element) {
+ this.myElement = element;
+ }
+
+ @Override
+ public Object getValue() {
+ return myElement;
+ }
+
+ @Override
+ public void navigate(boolean requestFocus) {
+ myElement.navigate(requestFocus);
+ }
+
+ @Override
+ public boolean canNavigate() {
+ return myElement.canNavigate();
+ }
+
+ @Override
+ public boolean canNavigateToSource() {
+ return myElement.canNavigateToSource();
+ }
+
+ @NotNull
+ @Override
+ public String getAlphaSortKey() {
+ String name = myElement.getName();
+ return name != null ? name : "";
+ }
+
+ @NotNull
+ @Override
+ public ItemPresentation getPresentation() {
+ ItemPresentation presentation = myElement.getPresentation();
+ return presentation != null ? presentation : new PresentationData();
+ }
+
+ @Override
+ public TreeElement @NotNull [] getChildren() {
+ List<PsiElement> children = new ArrayList<>();;
+ if (myElement instanceof SdFile) {
+ children = SdUtil.findSchemaChildren(myElement);
+ } else if (myElement instanceof SdDocumentDefinition) {
+ children = SdUtil.findDocumentChildren(myElement);
+ } else if (myElement instanceof SdDocumentStructDefinition) {
+ children = SdUtil.findDocumentStructChildren(myElement);
+ } else if (myElement instanceof SdRankProfileDefinition) {
+ children = SdUtil.findRankProfileChildren(myElement);
+ } else if (myElement instanceof SdDocumentSummaryDefinition) {
+ children = SdUtil.findDocumentSummaryChildren(myElement);
+ }
+
+ List<TreeElement> treeElements = new ArrayList<>(children.size());
+ for (PsiElement child : children) {
+ treeElements.add(new SdStructureViewElement((NavigatablePsiElement) child));
+ }
+ return treeElements.toArray(new TreeElement[0]);
+ }
+}