mirror of
https://github.com/JetBrains/intellij-sdk-code-samples.git
synced 2025-07-29 09:47:50 +08:00
72 lines
2.3 KiB
Java
72 lines
2.3 KiB
Java
package com.simpleplugin;
|
|
|
|
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.navigation.NavigationItem;
|
|
import com.intellij.psi.PsiElement;
|
|
import com.intellij.psi.PsiNamedElement;
|
|
import com.intellij.psi.util.PsiTreeUtil;
|
|
import com.simpleplugin.psi.SimpleFile;
|
|
import com.simpleplugin.psi.SimpleProperty;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
public class SimpleStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
|
|
private PsiElement element;
|
|
|
|
public SimpleStructureViewElement(PsiElement element) {
|
|
this.element = element;
|
|
}
|
|
|
|
@Override
|
|
public Object getValue() {
|
|
return element;
|
|
}
|
|
|
|
@Override
|
|
public void navigate(boolean requestFocus) {
|
|
if (element instanceof NavigationItem) {
|
|
((NavigationItem) element).navigate(requestFocus);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public boolean canNavigate() {
|
|
return element instanceof NavigationItem &&
|
|
((NavigationItem)element).canNavigate();
|
|
}
|
|
|
|
@Override
|
|
public boolean canNavigateToSource() {
|
|
return element instanceof NavigationItem &&
|
|
((NavigationItem)element).canNavigateToSource();
|
|
}
|
|
|
|
@Override
|
|
public String getAlphaSortKey() {
|
|
return element instanceof PsiNamedElement ? ((PsiNamedElement) element).getName() : null;
|
|
}
|
|
|
|
@Override
|
|
public ItemPresentation getPresentation() {
|
|
return element instanceof NavigationItem ?
|
|
((NavigationItem) element).getPresentation() : null;
|
|
}
|
|
|
|
@Override
|
|
public TreeElement[] getChildren() {
|
|
if (element instanceof SimpleFile) {
|
|
SimpleProperty[] properties = PsiTreeUtil.getChildrenOfType(element, SimpleProperty.class);
|
|
List<TreeElement> treeElements = new ArrayList<TreeElement>(properties.length);
|
|
for (SimpleProperty property : properties) {
|
|
treeElements.add(new SimpleStructureViewElement(property));
|
|
}
|
|
return treeElements.toArray(new TreeElement[treeElements.size()]);
|
|
} else {
|
|
return EMPTY_ARRAY;
|
|
}
|
|
}
|
|
} |