mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ability to provide custom structure view wrapper (editor action "Select in -> File Structure")
structure view model must use Editor from passed FileEditor, but not current focused Editor if document virtual file is not in local file system
This commit is contained in:
+5
-2
@@ -27,6 +27,7 @@ import com.intellij.ide.structureView.impl.java.JavaFileTreeModel;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LanguageStructureViewBuilder;
|
||||
import com.intellij.lang.PsiStructureViewFactory;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileTypes.ContentBasedFileSubstitutor;
|
||||
import com.intellij.openapi.fileTypes.FileType;
|
||||
@@ -39,6 +40,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class JavaClsStructureViewBuilderProvider implements StructureViewBuilderProvider {
|
||||
@Override
|
||||
@Nullable
|
||||
public StructureViewBuilder getStructureViewBuilder(@NotNull final FileType fileType, @NotNull final VirtualFile file, @NotNull final Project project) {
|
||||
|
||||
@@ -58,9 +60,10 @@ public class JavaClsStructureViewBuilderProvider implements StructureViewBuilder
|
||||
final PsiJavaFile javaFile = (PsiJavaFile)psiFile;
|
||||
if (javaFile == null) return null;
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new JavaFileTreeModel(javaFile);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new JavaFileTreeModel(javaFile, editor);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@@ -23,9 +23,11 @@ import com.intellij.ide.util.treeView.smartTree.Filter;
|
||||
import com.intellij.ide.util.treeView.smartTree.Grouper;
|
||||
import com.intellij.ide.util.treeView.smartTree.NodeProvider;
|
||||
import com.intellij.ide.util.treeView.smartTree.Sorter;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.ui.PlaceHolder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -36,11 +38,12 @@ public class JavaFileTreeModel extends TextEditorBasedStructureViewModel impleme
|
||||
private final PsiClassOwner myFile;
|
||||
private String myPlace;
|
||||
|
||||
public JavaFileTreeModel(@NotNull PsiClassOwner file) {
|
||||
super(file);
|
||||
public JavaFileTreeModel(@NotNull PsiClassOwner file, @Nullable Editor editor) {
|
||||
super(editor, file);
|
||||
myFile = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Filter[] getFilters() {
|
||||
return new Filter[]{new FieldsFilter(),
|
||||
@@ -53,20 +56,24 @@ public class JavaFileTreeModel extends TextEditorBasedStructureViewModel impleme
|
||||
return NODE_PROVIDERS;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Grouper[] getGroupers() {
|
||||
return new Grouper[]{new SuperTypesGrouper(), new PropertiesGrouper()};
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewTreeElement getRoot() {
|
||||
return new JavaFileTreeElement(myFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldEnterElement(final Object element) {
|
||||
return element instanceof PsiClass;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Sorter[] getSorters() {
|
||||
return new Sorter[] {
|
||||
@@ -76,15 +83,18 @@ public class JavaFileTreeModel extends TextEditorBasedStructureViewModel impleme
|
||||
Sorter.ALPHA_SORTER};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PsiFile getPsiFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
|
||||
Object value = element.getValue();
|
||||
return value instanceof PsiClass || value instanceof PsiFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAlwaysLeaf(StructureViewTreeElement element) {
|
||||
Object value = element.getValue();
|
||||
return value instanceof PsiMethod || value instanceof PsiField;
|
||||
@@ -113,6 +123,7 @@ public class JavaFileTreeModel extends TextEditorBasedStructureViewModel impleme
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected Class[] getSuitableClasses() {
|
||||
return new Class[]{PsiClass.class, PsiMethod.class, PsiField.class, PsiJavaFile.class};
|
||||
|
||||
@@ -24,6 +24,7 @@ import com.intellij.ide.structureView.StructureViewModel;
|
||||
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
|
||||
import com.intellij.ide.structureView.impl.java.JavaFileTreeModel;
|
||||
import com.intellij.lang.PsiStructureViewFactory;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiJavaFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -37,8 +38,8 @@ public class JavaStructureViewBuilderFactory implements PsiStructureViewFactory
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new JavaFileTreeModel((PsiJavaFile)psiFile);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new JavaFileTreeModel((PsiJavaFile)psiFile, editor);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -17,8 +17,10 @@
|
||||
package com.intellij.ide.structureView;
|
||||
|
||||
import com.intellij.ide.util.treeView.smartTree.Sorter;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
@@ -28,8 +30,8 @@ public class StructureViewModelBase extends TextEditorBasedStructureViewModel {
|
||||
private Sorter[] mySorters = Sorter.EMPTY_ARRAY;
|
||||
private Class[] mySuitableClasses = null;
|
||||
|
||||
public StructureViewModelBase(@NotNull PsiFile psiFile, @NotNull StructureViewTreeElement root) {
|
||||
super(psiFile);
|
||||
public StructureViewModelBase(@NotNull PsiFile psiFile, @Nullable Editor editor, @NotNull StructureViewTreeElement root) {
|
||||
super(editor, psiFile);
|
||||
myRoot = root;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -66,7 +66,7 @@ public abstract class TextEditorBasedStructureViewModel implements StructureView
|
||||
this(editor, null);
|
||||
}
|
||||
|
||||
private TextEditorBasedStructureViewModel(Editor editor, PsiFile file) {
|
||||
protected TextEditorBasedStructureViewModel(Editor editor, PsiFile file) {
|
||||
myEditor = editor;
|
||||
myPsiFile = file;
|
||||
|
||||
|
||||
+21
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -16,11 +16,13 @@
|
||||
package com.intellij.ide.structureView;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.TextEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* Default implementation of the {@link StructureViewBuilder} interface which uses the
|
||||
@@ -32,20 +34,33 @@ import org.jetbrains.annotations.NotNull;
|
||||
* @see com.intellij.lang.LanguageStructureViewBuilder#getStructureViewBuilder(com.intellij.psi.PsiFile)
|
||||
*/
|
||||
public abstract class TreeBasedStructureViewBuilder implements StructureViewBuilder {
|
||||
/**
|
||||
* @deprecated Use createStructureViewModel(Editor editor)
|
||||
*/
|
||||
@NotNull
|
||||
@Deprecated
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
throw new AbstractMethodError();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the structure view model defining the data displayed in the structure view
|
||||
* for a specific file.
|
||||
*
|
||||
* todo This method must be abstract, but due to compatibility reasons we wait IDEA 13 release
|
||||
*
|
||||
* @return the structure view model instance.
|
||||
* @see TextEditorBasedStructureViewModel
|
||||
*/
|
||||
@NotNull
|
||||
public abstract StructureViewModel createStructureViewModel();
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return createStructureViewModel();
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureView createStructureView(FileEditor fileEditor, Project project) {
|
||||
final StructureViewModel model = createStructureViewModel();
|
||||
final StructureViewModel model = createStructureViewModel(fileEditor instanceof TextEditor ? ((TextEditor)fileEditor).getEditor() : null);
|
||||
StructureView view = StructureViewFactory.getInstance(project).createStructureView(fileEditor, model, project, isRootNodeShown());
|
||||
Disposer.register(view, new Disposable() {
|
||||
@Override
|
||||
@@ -57,10 +72,10 @@ public abstract class TreeBasedStructureViewBuilder implements StructureViewBuil
|
||||
}
|
||||
|
||||
/**
|
||||
* Override returning <code>false</code> if root node created by {@link #createStructureViewModel()} shall not be visible
|
||||
* Override returning <code>false</code> if root node created by {@link #createStructureViewModel(Editor editor)} shall not be visible
|
||||
* @return <code>false</code> if root node shall not be visible in structure tree.
|
||||
*/
|
||||
public boolean isRootNodeShown() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -112,16 +112,23 @@ public abstract class SelectInContextImpl implements SelectInContext {
|
||||
private static SelectInContext createEditorContext(DataContext dataContext) {
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(dataContext);
|
||||
final FileEditor editor = PlatformDataKeys.FILE_EDITOR.getData(dataContext);
|
||||
return createEditorContext(project, editor);
|
||||
return doCreateEditorContext(project, editor, dataContext);
|
||||
}
|
||||
|
||||
public static SelectInContext createEditorContext(Project project, FileEditor editor) {
|
||||
return doCreateEditorContext(project, editor, null);
|
||||
}
|
||||
|
||||
private static SelectInContext doCreateEditorContext(Project project, FileEditor editor, @Nullable DataContext dataContext) {
|
||||
if (project == null || editor == null) {
|
||||
return null;
|
||||
}
|
||||
VirtualFile file = FileEditorManagerEx.getInstanceEx(project).getFile(editor);
|
||||
if (file == null) {
|
||||
return null;
|
||||
file = dataContext == null ? null : PlatformDataKeys.VIRTUAL_FILE.getData(dataContext);
|
||||
if (file == null) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
final PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
|
||||
if (psiFile == null) {
|
||||
|
||||
+4
-9
@@ -16,7 +16,6 @@
|
||||
package com.intellij.ide.favoritesTreeView;
|
||||
|
||||
import com.intellij.ide.SelectInContext;
|
||||
import com.intellij.ide.SelectInTarget;
|
||||
import com.intellij.ide.actions.SelectInContextImpl;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.ex.FileEditorManagerEx;
|
||||
@@ -53,15 +52,11 @@ public class FavoritesAutoscrollFromSourceHandler extends AutoScrollFromSourceHa
|
||||
if (file != null) {
|
||||
final PsiFile psiFile = PsiManager.getInstance(myProject).findFile(file);
|
||||
if (psiFile != null) {
|
||||
final SelectInTarget target = mySelectInTarget;
|
||||
if (target != null) {
|
||||
final SelectInContext selectInContext = SelectInContextImpl.createEditorContext(myProject, editor);
|
||||
|
||||
if (target.canSelect(selectInContext)) {
|
||||
target.selectIn(selectInContext, false);
|
||||
}
|
||||
final SelectInContext selectInContext = SelectInContextImpl.createEditorContext(myProject, editor);
|
||||
if (mySelectInTarget.canSelect(selectInContext)) {
|
||||
mySelectInTarget.selectIn(selectInContext, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2013 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -24,17 +24,19 @@ import com.intellij.ide.structureView.StructureViewFactoryEx;
|
||||
import com.intellij.ide.structureView.StructureViewWrapper;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.wm.ToolWindowId;
|
||||
import com.intellij.openapi.wm.ToolWindowManager;
|
||||
|
||||
public class StructureViewSelectInTarget implements SelectInTarget {
|
||||
public static final Key<StructureViewWrapper> CUSTOM_STRUCTURE_VIEW_KEY = Key.create("customStructureView");
|
||||
|
||||
private final Project myProject;
|
||||
|
||||
public StructureViewSelectInTarget(Project project) {
|
||||
myProject = project;
|
||||
}
|
||||
|
||||
|
||||
public String toString() {
|
||||
return IdeBundle.message("select.in.file.structure");
|
||||
}
|
||||
@@ -48,15 +50,20 @@ public class StructureViewSelectInTarget implements SelectInTarget {
|
||||
public void selectIn(final SelectInContext context, final boolean requestFocus) {
|
||||
final FileEditor fileEditor = context.getFileEditorProvider().openFileEditor();
|
||||
|
||||
ToolWindowManager windowManager=ToolWindowManager.getInstance(context.getProject());
|
||||
StructureViewWrapper customStructureView = CUSTOM_STRUCTURE_VIEW_KEY.get(context.getVirtualFile());
|
||||
if (customStructureView != null) {
|
||||
customStructureView.selectCurrentElement(fileEditor, context.getVirtualFile(), requestFocus);
|
||||
return;
|
||||
}
|
||||
|
||||
ToolWindowManager windowManager = ToolWindowManager.getInstance(context.getProject());
|
||||
final Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
StructureViewFactoryEx.getInstanceEx(myProject).runWhenInitialized(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
final StructureViewWrapper structureView = getStructureViewWrapper();
|
||||
structureView.selectCurrentElement(fileEditor, context.getVirtualFile(), requestFocus);
|
||||
getStructureViewWrapper().selectCurrentElement(fileEditor, context.getVirtualFile(), requestFocus);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -67,7 +74,6 @@ public class StructureViewSelectInTarget implements SelectInTarget {
|
||||
else {
|
||||
runnable.run();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private StructureViewWrapper getStructureViewWrapper() {
|
||||
@@ -88,5 +94,4 @@ public class StructureViewSelectInTarget implements SelectInTarget {
|
||||
public float getWeight() {
|
||||
return StandardTargetWeights.STRUCTURE_WEIGHT;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
+6
-2
@@ -27,20 +27,24 @@ import com.intellij.ide.structureView.impl.java.JavaFileTreeModel;
|
||||
import com.intellij.ide.structureView.impl.java.JavaInheritedMembersNodeProvider;
|
||||
import com.intellij.ide.util.treeView.smartTree.NodeProvider;
|
||||
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;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyFileBase;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
public class GroovyStructureViewFactory implements PsiStructureViewFactory {
|
||||
@Override
|
||||
public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) {
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new JavaFileTreeModel((GroovyFileBase)psiFile) {
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new JavaFileTreeModel((GroovyFileBase)psiFile, editor) {
|
||||
@NotNull
|
||||
@Override
|
||||
public Collection<NodeProvider> getNodeProviders() {
|
||||
|
||||
@@ -21,18 +21,21 @@ import com.intellij.ide.structureView.StructureViewModel;
|
||||
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
|
||||
import com.intellij.ide.structureView.newStructureView.StructureViewComponent;
|
||||
import com.intellij.ide.util.treeView.AbstractTreeNode;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.TextEditor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.AsyncResult;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.xml.XmlElement;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.psi.xml.XmlTag;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.xml.DomElement;
|
||||
import com.intellij.util.xml.DomManager;
|
||||
import com.intellij.util.xml.DomService;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DomStructureViewBuilder extends TreeBasedStructureViewBuilder {
|
||||
private final Function<DomElement, DomService.StructureViewMode> myDescriptor;
|
||||
@@ -43,18 +46,22 @@ public class DomStructureViewBuilder extends TreeBasedStructureViewBuilder {
|
||||
myDescriptor = descriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new DomStructureViewTreeModel(myFile, myDescriptor);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new DomStructureViewTreeModel(myFile, myDescriptor, editor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isRootNodeShown() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureView createStructureView(final FileEditor fileEditor, final Project project) {
|
||||
return new StructureViewComponent(fileEditor, createStructureViewModel(), project) {
|
||||
return new StructureViewComponent(fileEditor, createStructureViewModel(fileEditor instanceof TextEditor ? ((TextEditor)fileEditor).getEditor() : null), project) {
|
||||
@Override
|
||||
public AsyncResult<AbstractTreeNode> expandPathToElement(final Object element) {
|
||||
if (element instanceof XmlElement) {
|
||||
final XmlElement xmlElement = (XmlElement)element;
|
||||
|
||||
@@ -21,11 +21,13 @@ import com.intellij.ide.structureView.impl.xml.XmlFileTreeElement;
|
||||
import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel;
|
||||
import com.intellij.ide.util.treeView.smartTree.Sorter;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.xml.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author Gregory.Shrago
|
||||
@@ -35,17 +37,21 @@ public class DomStructureViewTreeModel extends XmlStructureViewTreeModel impleme
|
||||
private final DomElementNavigationProvider myNavigationProvider;
|
||||
private final Function<DomElement, DomService.StructureViewMode> myDescriptor;
|
||||
|
||||
public DomStructureViewTreeModel(final XmlFile file, final Function<DomElement, DomService.StructureViewMode> descriptor) {
|
||||
this(file, DomElementsNavigationManager.getManager(file.getProject()).getDomElementsNavigateProvider(DomElementsNavigationManager.DEFAULT_PROVIDER_NAME), descriptor);
|
||||
public DomStructureViewTreeModel(final XmlFile file, final Function<DomElement, DomService.StructureViewMode> descriptor, @Nullable Editor editor) {
|
||||
this(file, DomElementsNavigationManager.getManager(file.getProject()).getDomElementsNavigateProvider(DomElementsNavigationManager.DEFAULT_PROVIDER_NAME), descriptor, editor);
|
||||
}
|
||||
|
||||
public DomStructureViewTreeModel(final XmlFile file, final DomElementNavigationProvider navigationProvider, final Function<DomElement, DomService.StructureViewMode> descriptor) {
|
||||
super(file);
|
||||
public DomStructureViewTreeModel(final XmlFile file,
|
||||
final DomElementNavigationProvider navigationProvider,
|
||||
final Function<DomElement, DomService.StructureViewMode> descriptor,
|
||||
@Nullable Editor editor) {
|
||||
super(file, editor);
|
||||
myFile = file;
|
||||
myNavigationProvider = navigationProvider;
|
||||
myDescriptor = descriptor;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewTreeElement getRoot() {
|
||||
final DomFileElement<DomElement> fileElement = DomManager.getDomManager(myFile.getProject()).getFileElement(myFile, DomElement.class);
|
||||
@@ -58,11 +64,13 @@ public class DomStructureViewTreeModel extends XmlStructureViewTreeModel impleme
|
||||
return myNavigationProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Sorter[] getSorters() {
|
||||
return new Sorter[]{Sorter.ALPHA_SORTER};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PsiFile getPsiFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
+11
-3
@@ -21,10 +21,12 @@ import com.intellij.ide.structureView.StructureViewTreeElement;
|
||||
import com.intellij.ide.structureView.TextEditorBasedStructureViewModel;
|
||||
import com.intellij.ide.util.treeView.smartTree.Sorter;
|
||||
import com.intellij.lang.dtd.DTDLanguage;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@@ -33,30 +35,35 @@ public class XmlStructureViewTreeModel extends TextEditorBasedStructureViewModel
|
||||
private static final Class[] myClasses = new Class[]{XmlTag.class, XmlFile.class, XmlEntityDecl.class, XmlElementDecl.class, XmlAttlistDecl.class, XmlConditionalSection.class};
|
||||
private static final Sorter[] mySorters = {Sorter.ALPHA_SORTER};
|
||||
|
||||
public XmlStructureViewTreeModel(XmlFile file) {
|
||||
super(file);
|
||||
public XmlStructureViewTreeModel(XmlFile file, @Nullable Editor editor) {
|
||||
super(editor, file);
|
||||
myFile = file;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewTreeElement getRoot() {
|
||||
if (myFile.getLanguage() == DTDLanguage.INSTANCE) return new DtdFileTreeElement(myFile);
|
||||
return new XmlFileTreeElement(myFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldEnterElement(final Object element) {
|
||||
return element instanceof XmlTag && ((XmlTag)element).getSubTags().length > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected PsiFile getPsiFile() {
|
||||
return myFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
protected Class[] getSuitableClasses() {
|
||||
return myClasses;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getCurrentEditorElement() {
|
||||
final Object editorElement = super.getCurrentEditorElement();
|
||||
if (editorElement instanceof XmlTag) {
|
||||
@@ -70,8 +77,9 @@ public class XmlStructureViewTreeModel extends TextEditorBasedStructureViewModel
|
||||
return editorElement;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Sorter[] getSorters() {
|
||||
return mySorters;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -24,17 +24,21 @@ import com.intellij.ide.structureView.StructureViewModel;
|
||||
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
|
||||
import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel;
|
||||
import com.intellij.lang.PsiStructureViewFactory;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class DtdStructureViewBuilderFactory implements PsiStructureViewFactory {
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) {
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new XmlStructureViewTreeModel((XmlFile)psiFile);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new XmlStructureViewTreeModel((XmlFile)psiFile, editor);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
+7
-3
@@ -20,24 +20,28 @@ import com.intellij.ide.structureView.StructureViewBuilder;
|
||||
import com.intellij.ide.structureView.StructureViewModel;
|
||||
import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
|
||||
import com.intellij.ide.structureView.xml.XmlStructureViewBuilderProvider;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class HtmlStructureViewBuilderProvider implements XmlStructureViewBuilderProvider {
|
||||
@Override
|
||||
@Nullable
|
||||
public StructureViewBuilder createStructureViewBuilder(@NotNull final XmlFile file) {
|
||||
if (file.getViewProvider().getVirtualFile().getFileType() != HtmlFileType.INSTANCE) return null;
|
||||
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
@Override
|
||||
public boolean isRootNodeShown() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new HtmlStructureViewTreeModel(file);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new HtmlStructureViewTreeModel(file, editor);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -20,9 +20,11 @@ import com.intellij.ide.structureView.StructureViewTreeElement;
|
||||
import com.intellij.ide.structureView.impl.xml.XmlStructureViewTreeModel;
|
||||
import com.intellij.ide.util.treeView.smartTree.NodeProvider;
|
||||
import com.intellij.ide.util.treeView.smartTree.Sorter;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.ui.PlaceHolder;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
@@ -33,29 +35,35 @@ class HtmlStructureViewTreeModel extends XmlStructureViewTreeModel implements Pl
|
||||
|
||||
private String myStructureViewPlace;
|
||||
|
||||
public HtmlStructureViewTreeModel(final XmlFile file) {
|
||||
super(file);
|
||||
public HtmlStructureViewTreeModel(final XmlFile file, @Nullable Editor editor) {
|
||||
super(file, editor);
|
||||
|
||||
myNodeProviders = Arrays.<NodeProvider>asList(new Html5SectionsNodeProvider());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlace(final String place) {
|
||||
myStructureViewPlace = place;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getPlace() {
|
||||
return myStructureViewPlace;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Sorter[] getSorters() {
|
||||
return Sorter.EMPTY_ARRAY;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public Collection<NodeProvider> getNodeProviders() {
|
||||
return myNodeProviders;
|
||||
}
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewTreeElement getRoot() {
|
||||
return new HtmlFileTreeElement(ViewStructureAction.isInStructureViewPopup(this), (XmlFile)getPsiFile());
|
||||
|
||||
@@ -27,6 +27,7 @@ import com.intellij.ide.structureView.xml.XmlStructureViewBuilderProvider;
|
||||
import com.intellij.lang.Language;
|
||||
import com.intellij.lang.LanguageStructureViewBuilder;
|
||||
import com.intellij.lang.PsiStructureViewFactory;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
@@ -34,6 +35,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class XmlStructureViewBuilderFactory implements PsiStructureViewFactory {
|
||||
@Override
|
||||
@Nullable
|
||||
public StructureViewBuilder getStructureViewBuilder(final PsiFile psiFile) {
|
||||
if (!(psiFile instanceof XmlFile)) {
|
||||
@@ -52,9 +54,10 @@ public class XmlStructureViewBuilderFactory implements PsiStructureViewFactory {
|
||||
}
|
||||
|
||||
return new TreeBasedStructureViewBuilder() {
|
||||
@Override
|
||||
@NotNull
|
||||
public StructureViewModel createStructureViewModel() {
|
||||
return new XmlStructureViewTreeModel((XmlFile)psiFile);
|
||||
public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
|
||||
return new XmlStructureViewTreeModel((XmlFile)psiFile, editor);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user