WI-19949 Parent class methods aren't shown after second Command-F12

This commit is contained in:
Konstantin Bulenkov
2013-09-09 17:06:01 +02:00
parent 55a5f4c8f8
commit b57f5e1453
2 changed files with 42 additions and 5 deletions
@@ -347,7 +347,10 @@ public class FileStructurePopup implements Disposable {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
selectPsiElement(myInitialPsiElement);
if (selectPsiElement(myInitialPsiElement) == null) {
TreeUtil.ensureSelection(myAbstractTreeBuilder.getTree());
myAbstractTreeBuilder.revalidateTree();
}
}
});
}
@@ -432,7 +435,7 @@ public class FileStructurePopup implements Disposable {
Set<PsiElement> parents = getAllParents(element);
FilteringTreeStructure.FilteringNode node = (FilteringTreeStructure.FilteringNode)myAbstractTreeBuilder.getRootElement();
if (node != null && myStructureView instanceof StructureViewComposite) {
if (element != null && node != null && myStructureView instanceof StructureViewComposite) {
parents.remove(element.getContainingFile());
final List<FilteringTreeStructure.FilteringNode> fileNodes = node.children();
@@ -445,11 +448,11 @@ public class FileStructurePopup implements Disposable {
} else {
final FilteringTreeStructure.FilteringNode found = findNode(parents, node);
if (found == null) {
TreeUtil.selectFirstNode(myTree);
TreeUtil.ensureSelection(myTree);
}
return found;
}
TreeUtil.selectFirstNode(myTree);
TreeUtil.ensureSelection(myTree);
return null;
}
@@ -15,23 +15,31 @@
*/
package com.intellij.ide.util;
import com.intellij.ide.structureView.StructureViewModel;
import com.intellij.ide.structureView.StructureViewModelBase;
import com.intellij.ide.structureView.StructureViewTreeElement;
import com.intellij.ide.structureView.impl.StructureViewComposite;
import com.intellij.ide.util.treeView.smartTree.Filter;
import com.intellij.ide.util.treeView.smartTree.NodeProvider;
import com.intellij.ide.util.treeView.smartTree.ProvidingTreeModel;
import com.intellij.ide.util.treeView.smartTree.TreeElement;
import com.intellij.navigation.ItemPresentation;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.util.ArrayList;
import java.util.*;
/**
* @author Konstantin Bulenkov
*/
public class StructureViewCompositeModel extends StructureViewModelBase {
private final StructureViewComposite.StructureViewDescriptor[] myViews;
public StructureViewCompositeModel(PsiFile file, StructureViewComposite.StructureViewDescriptor[] views) {
super(file, createRootNode(file, views));
myViews = views;
}
private static StructureViewTreeElement createRootNode(final PsiFile file, final StructureViewComposite.StructureViewDescriptor[] views) {
@@ -72,6 +80,30 @@ public class StructureViewCompositeModel extends StructureViewModelBase {
};
}
@NotNull
@Override
public Collection<NodeProvider> getNodeProviders() {
final Set<NodeProvider> providers = new HashSet<NodeProvider>();
for (StructureViewComposite.StructureViewDescriptor view : myViews) {
final StructureViewModel model = view.structureView.getTreeModel();
if (model instanceof ProvidingTreeModel) {
providers.addAll(((ProvidingTreeModel)model).getNodeProviders());
}
}
return providers;
}
@NotNull
@Override
public Filter[] getFilters() {
final HashSet<Filter> filters = new HashSet<Filter>();
for (StructureViewComposite.StructureViewDescriptor view : myViews) {
final StructureViewModel model = view.structureView.getTreeModel();
filters.addAll(Arrays.asList(model.getFilters()));
}
return filters.toArray(new Filter[filters.size()]);
}
private static TreeElement createTreeElementFromView(final PsiFile file, final StructureViewComposite.StructureViewDescriptor view) {
return new StructureViewTreeElement() {
@Override
@@ -122,5 +154,7 @@ public class StructureViewCompositeModel extends StructureViewModelBase {
return view.structureView.getTreeModel().getRoot().getChildren();
}
};
}
}