package jetbrains.mps.ide.java.actions; /*Generated by MPS */ import com.intellij.ide.structureView.StructureViewModel; import jetbrains.mps.project.MPSProject; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.List; import jetbrains.mps.smodel.behaviour.BHReflection; import jetbrains.mps.core.aspects.behaviour.SMethodTrimmedId; import jetbrains.mps.internal.collections.runtime.ISelector; import org.jetbrains.annotations.NotNull; import com.intellij.ide.util.treeView.smartTree.Grouper; import com.intellij.ide.util.treeView.smartTree.Sorter; import com.intellij.ide.util.treeView.smartTree.Filter; import com.intellij.ide.structureView.StructureViewTreeElement; import com.intellij.ide.util.treeView.smartTree.TreeElement; import com.intellij.ide.structureView.ModelListener; import com.intellij.ide.structureView.FileEditorPositionListener; import org.jetbrains.annotations.Nullable; import org.jetbrains.mps.openapi.model.SNodeReference; import jetbrains.mps.openapi.navigation.EditorNavigator; import jetbrains.mps.workbench.choose.NodePointerNavigationItem; import jetbrains.mps.smodel.SNodePointer; import com.intellij.navigation.ItemPresentation; public class MemberContainerStructureModel implements StructureViewModel { private final MemberContainerStructureModel.Presentation container; private final MemberContainerStructureModel.Presentation[] members; private final MPSProject myProject; public MemberContainerStructureModel(MPSProject project, SNode memberContainer) { container = new MemberContainerStructureModel.Presentation(memberContainer); members = ListSequence.fromList(((List<SNode>) BHReflection.invoke(memberContainer, SMethodTrimmedId.create("getMembers", null, "hEwJjl2")))).select(new ISelector<SNode, MemberContainerStructureModel.Presentation>() { public MemberContainerStructureModel.Presentation select(SNode it) { return new MemberContainerStructureModel.Presentation(it); } }).toGenericArray(MemberContainerStructureModel.Presentation.class); myProject = project; } @NotNull @Override public Grouper[] getGroupers() { return Grouper.EMPTY_ARRAY; } @NotNull @Override public Sorter[] getSorters() { return Sorter.EMPTY_ARRAY; } @NotNull @Override public Filter[] getFilters() { return Filter.EMPTY_ARRAY; } @NotNull @Override public StructureViewTreeElement getRoot() { return new MemberContainerStructureModel.Element(new MemberContainerStructureModel.Presentation()) { @NotNull @Override public TreeElement[] getChildren() { return new TreeElement[]{new MemberContainerStructureModel.Element(container, members)}; } }; } @Override public boolean shouldEnterElement(Object object) { return false; } @Override public void dispose() { } @Override public void removeModelListener(ModelListener listener) { } @Override public void addModelListener(ModelListener listener) { } @Override public void removeEditorPositionListener(FileEditorPositionListener listener) { } @Override public void addEditorPositionListener(FileEditorPositionListener listener) { } @Nullable @Override public Object getCurrentEditorElement() { return null; } /*package*/ void navigate(final SNodeReference nodeRef) { new EditorNavigator(myProject).shallFocus(true).shallSelect(true).open(nodeRef); } /*package*/ static class Presentation extends NodePointerNavigationItem { /*package*/ Presentation() { super(new SNodePointer(null), null, null); // just a fact root element } /*package*/ Presentation(SNode n) { super(n); } @Override public String getLocationString() { return null; } } private class Element implements StructureViewTreeElement { private final NodePointerNavigationItem myNode; private final NodePointerNavigationItem[] myChildren; /*package*/ Element(NodePointerNavigationItem node) { myNode = node; myChildren = null; } /*package*/ Element(NodePointerNavigationItem node, NodePointerNavigationItem[] children) { myNode = node; myChildren = children; } @Override public SNodeReference getValue() { return myNode.getNodePointer(); } @NotNull @Override public ItemPresentation getPresentation() { return myNode; } @NotNull @Override public TreeElement[] getChildren() { if (myChildren == null) { return StructureViewTreeElement.EMPTY_ARRAY; } TreeElement[] rv = new TreeElement[myChildren.length]; for (int i = 0; i < myChildren.length; i++) { rv[i] = new MemberContainerStructureModel.Element(myChildren[i]); } return rv; } @Override public void navigate(boolean b) { MemberContainerStructureModel.this.navigate(myNode.getNodePointer()); } @Override public boolean canNavigate() { return true; } @Override public boolean canNavigateToSource() { return true; } } }