35d0b5dadc50c852f3af9d8a40b49bca705ce1a3
[idea/community.git] / platform / editor-ui-api / src / com / intellij / ide / structureView / TreeBasedStructureViewBuilder.java
1 /*
2  * Copyright 2000-2015 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.ide.structureView;
17
18 import com.intellij.openapi.Disposable;
19 import com.intellij.openapi.editor.Editor;
20 import com.intellij.openapi.fileEditor.FileEditor;
21 import com.intellij.openapi.fileEditor.TextEditor;
22 import com.intellij.openapi.project.Project;
23 import com.intellij.openapi.util.Disposer;
24 import org.jetbrains.annotations.NotNull;
25 import org.jetbrains.annotations.Nullable;
26
27 /**
28  * Default implementation of the {@link StructureViewBuilder} interface which uses the
29  * standard IDEA implementation of the {@link StructureView} component and allows to
30  * customize the data displayed in the structure view.
31  *
32  * @see StructureViewModel
33  * @see TextEditorBasedStructureViewModel
34  * @see com.intellij.lang.LanguageStructureViewBuilder#getStructureViewBuilder(com.intellij.psi.PsiFile)
35  */
36 public abstract class TreeBasedStructureViewBuilder implements StructureViewBuilder {
37   /**
38    * Returns the structure view model defining the data displayed in the structure view
39    * for a specific file.
40    *
41    * @return the structure view model instance.
42    * @see TextEditorBasedStructureViewModel
43    */
44   @NotNull
45   public abstract StructureViewModel createStructureViewModel(@Nullable Editor editor);
46
47   @Override
48   @NotNull
49   public StructureView createStructureView(FileEditor fileEditor, @NotNull Project project) {
50     final StructureViewModel model = createStructureViewModel(fileEditor instanceof TextEditor ? ((TextEditor)fileEditor).getEditor() : null);
51     StructureView view = StructureViewFactory.getInstance(project).createStructureView(fileEditor, model, project, isRootNodeShown());
52     Disposer.register(view, new Disposable() {
53       @Override
54       public void dispose() {
55         model.dispose();
56       }
57     });
58     return view;
59   }
60
61   /**
62    * Override returning <code>false</code> if root node created by {@link #createStructureViewModel(Editor editor)} shall not be visible
63    * @return <code>false</code> if root node shall not be visible in structure tree.
64    */
65   public boolean isRootNodeShown() {
66     return true;
67   }
68 }