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