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;
}
}
}