mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
[coverage] IDEA-341385 Fix 'always select opened element' option in coverage view
GitOrigin-RevId: 32f6225076539bad47ebb2e833575646fdecbc9c
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a4b036a398
commit
9cb153fd56
@@ -26,7 +26,6 @@ import javax.swing.tree.DefaultMutableTreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
class CoverageTableModel extends AbstractTreeModel implements TreeTableModel, SortableColumnModel, TreeModelListener, TreeVisitor.Acceptor {
|
||||
private final ColumnInfo[] COLUMN_INFOS;
|
||||
@@ -54,10 +53,6 @@ class CoverageTableModel extends AbstractTreeModel implements TreeTableModel, So
|
||||
}
|
||||
}
|
||||
|
||||
public void makeVisible(AbstractTreeNode<?> node, Consumer<? super TreePath> onSuccess) {
|
||||
myStructureModel.makeVisible(node, myTree, onSuccess);
|
||||
}
|
||||
|
||||
public void setComparator(Comparator<? super NodeDescriptor<?>> comparator) {
|
||||
runActionWithPathsRestore(() -> myStructureModel.setComparator(comparator));
|
||||
}
|
||||
|
||||
@@ -20,7 +20,6 @@ import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.actionSystem.impl.ActionButton;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.fileEditor.FileEditor;
|
||||
import com.intellij.openapi.fileEditor.TextEditor;
|
||||
@@ -43,6 +42,7 @@ import com.intellij.psi.PsiManager;
|
||||
import com.intellij.ui.*;
|
||||
import com.intellij.ui.components.JBTreeTable;
|
||||
import com.intellij.ui.scale.JBUIScale;
|
||||
import com.intellij.ui.tree.TreeVisitor;
|
||||
import com.intellij.util.concurrency.AppExecutorUtil;
|
||||
import com.intellij.util.ui.StatusText;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
@@ -555,35 +555,25 @@ public class CoverageView extends BorderLayoutPanel implements DataProvider, Dis
|
||||
ReadAction.nonBlocking(() -> {
|
||||
final PsiElement element = myViewExtension.getElementToSelect(object);
|
||||
final VirtualFile file = myViewExtension.getVirtualFile(object);
|
||||
return getNode(element, file);
|
||||
myModel.accept(new TreeVisitor() {
|
||||
@Override
|
||||
public @NotNull Action visit(@NotNull TreePath path) {
|
||||
var node = getLast(path);
|
||||
if (Comparing.equal(node.getValue(), element)) return Action.INTERRUPT;
|
||||
if (node instanceof CoverageListNode coverageNode && coverageNode.contains(file)) {
|
||||
return Action.CONTINUE;
|
||||
}
|
||||
return Action.SKIP_CHILDREN;
|
||||
}
|
||||
}).onSuccess((path -> {
|
||||
if (path != null) {
|
||||
TreeUtil.promiseSelect(myTable.getTree(), path);
|
||||
}
|
||||
}));
|
||||
})
|
||||
.finishOnUiThread(ModalityState.nonModal(), (node) -> myModel.makeVisible(node, this::selectPath))
|
||||
.submit(AppExecutorUtil.getAppExecutorService());
|
||||
}
|
||||
|
||||
private void selectPath(TreePath path) {
|
||||
if (path == null) return;
|
||||
myTable.getTree().addSelectionPath(path);
|
||||
ScrollingUtil.ensureSelectionExists(myTable.getTable());
|
||||
}
|
||||
|
||||
private AbstractTreeNode<?> getNode(PsiElement element, VirtualFile file) {
|
||||
AbstractTreeNode<?> node = (AbstractTreeNode<?>)myTreeStructure.getRootElement();
|
||||
down:
|
||||
while (true) {
|
||||
if (Comparing.equal(node.getValue(), element)) break;
|
||||
for (Object child : myTreeStructure.getChildElements(node)) {
|
||||
final CoverageListNode childNode = (CoverageListNode)child;
|
||||
if (childNode.contains(file)) {
|
||||
node = childNode;
|
||||
continue down;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
return node;
|
||||
}
|
||||
|
||||
private class MyAutoScrollFromSourceHandler extends AutoScrollFromSourceHandler {
|
||||
MyAutoScrollFromSourceHandler() {
|
||||
super(CoverageView.this.myProject, CoverageView.this, CoverageView.this);
|
||||
|
||||
Reference in New Issue
Block a user