Skip to content
Snippets Groups Projects
Commit fbee8d61 authored by Johannes Mey's avatar Johannes Mey
Browse files

add structure view

parent a9b111df
No related branches found
No related tags found
No related merge requests found
package org.jastadd.tooling;
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.util.PsiTreeUtil;
import org.jastadd.tooling.psi.RelAstGrammarFile;
import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
import org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImpl;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
public class RelAstGrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
private final NavigatablePsiElement myElement;
public RelAstGrammarStructureViewElement(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();
}
@NotNull
@Override
public TreeElement @NotNull [] getChildren() {
if (myElement instanceof RelAstGrammarFile) {
List<RelAstGrammarTypeDecl> properties = PsiTreeUtil.getChildrenOfTypeAsList(myElement, RelAstGrammarTypeDecl.class);
List<TreeElement> treeElements = new ArrayList<>(properties.size());
for (RelAstGrammarTypeDecl property : properties) {
treeElements.add(new RelAstGrammarStructureViewElement((RelAstGrammarTypeDeclImpl) property));
}
return treeElements.toArray(new TreeElement[0]);
}
return EMPTY_ARRAY;
}
}
package org.jastadd.tooling;
import com.intellij.ide.structureView.StructureViewBuilder;
import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
import com.intellij.lang.PsiStructureViewFactory;
import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactory {
@Nullable
@Override
public StructureViewBuilder getStructureViewBuilder(@NotNull final PsiFile psiFile) {
return new TreeBasedStructureViewBuilder() {
@NotNull
@Override
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
return new RelAstGrammarStructureViewModel(psiFile);
}
};
}
}
package org.jastadd.tooling;
import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.ide.structureView.StructureViewModelBase;
import com.intellij.ide.structureView.StructureViewTreeElement;
import com.intellij.ide.util.treeView.smartTree.Sorter;
import com.intellij.psi.PsiFile;
import org.jastadd.tooling.psi.RelAstGrammarFile;
import org.jetbrains.annotations.NotNull;
public class RelAstGrammarStructureViewModel extends StructureViewModelBase implements
StructureViewModel.ElementInfoProvider {
public RelAstGrammarStructureViewModel(PsiFile psiFile) {
super(psiFile, new RelAstGrammarStructureViewElement(psiFile));
}
@NotNull
public Sorter[] getSorters() {
return new Sorter[]{Sorter.ALPHA_SORTER};
}
@Override
public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
return false;
}
@Override
public boolean isAlwaysLeaf(StructureViewTreeElement element) {
return element instanceof RelAstGrammarFile;
}
}
...@@ -41,8 +41,10 @@ ...@@ -41,8 +41,10 @@
<lang.findUsagesProvider language="JastAddGrammar" <lang.findUsagesProvider language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/> implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/>
<gotoSymbolContributor <gotoSymbolContributor implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/>
implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/>
<lang.psiStructureViewFactory language="JastAddGrammar"
implementationClass="org.jastadd.tooling.RelAstGrammarStructureViewFactory"/>
</extensions> </extensions>
<actions> <actions>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment