From ede2358e8a739a26f2c3ac3f5d4bf43fd16031c9 Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Thu, 2 Nov 2017 17:38:37 +0300 Subject: [PATCH] IDEA-177216 Add count of items for intermediate states --- .../streams/ui/impl/CollectionTree.java | 6 ++++++ .../streams/ui/impl/CollectionView.java | 19 +++++++++++++++++-- .../ui/impl/EvaluationAwareTraceWindow.java | 2 +- .../debugger/streams/ui/impl/ExceptionView.kt | 3 ++- .../debugger/streams/ui/impl/FlatView.kt | 6 +++--- .../debugger/streams/ui/impl/MappingPane.kt | 1 + .../ui/impl/PositionsAwareCollectionView.kt | 8 ++------ 7 files changed, 32 insertions(+), 13 deletions(-) diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java index 8322a297b404..d7e0c384be78 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionTree.java @@ -51,6 +51,7 @@ public class CollectionTree extends XDebuggerTree implements TraceContainer { private final Project myProject; private final Map myValue2Path = new HashMap<>(); private final Map myPath2Value = new HashMap<>(); + private final int myItemsCount; private Set myHighlighted = Collections.emptySet(); private final EventDispatcher mySelectionDispatcher = EventDispatcher.create(ValuesSelectionListener.class); private final EventDispatcher myPaintingDispatcher = EventDispatcher.create(PaintingListener.class); @@ -65,6 +66,7 @@ public class CollectionTree extends XDebuggerTree implements TraceContainer { myProject = evaluationContext.getProject(); myNodeManager = new MyNodeManager(myProject); + myItemsCount = values.size(); final XValueNodeImpl root = new XValueNodeImpl(this, null, "root", new MyRootValue(values, evaluationContext)); setRoot(root, false); root.setLeaf(false); @@ -196,6 +198,10 @@ public class CollectionTree extends XDebuggerTree implements TraceContainer { return !isSelectionEmpty() || !myHighlighted.isEmpty(); } + public int getItemsCount() { + return myItemsCount; + } + public void addPaintingListener(@NotNull PaintingListener listener) { myPaintingDispatcher.addListener(listener); } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionView.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionView.java index f30132099758..3e2192c08c12 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionView.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/CollectionView.java @@ -5,8 +5,10 @@ import com.intellij.debugger.streams.trace.TraceElement; import com.intellij.debugger.streams.ui.TraceContainer; import com.intellij.debugger.streams.ui.ValuesSelectionListener; import com.intellij.openapi.util.Disposer; +import com.intellij.ui.JBColor; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBScrollPane; +import com.intellij.util.ui.JBUI; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -19,10 +21,10 @@ import java.util.List; public class CollectionView extends JPanel implements TraceContainer { private final CollectionTree myInstancesTree; - CollectionView(@NotNull String header, + CollectionView(@NotNull JLabel header, @NotNull CollectionTree collectionTree) { super(new BorderLayout()); - add(new JBLabel(header), BorderLayout.NORTH); + add(header, BorderLayout.NORTH); myInstancesTree = collectionTree; @@ -32,6 +34,19 @@ public class CollectionView extends JPanel implements TraceContainer { Disposer.register(this, myInstancesTree); } + CollectionView(@NotNull CollectionTree tree) { + this(createDefaultLabel(tree), tree); + } + + private static JLabel createDefaultLabel(@NotNull CollectionTree tree) { + final JLabel label = new JBLabel(String.valueOf(tree.getItemsCount()), SwingConstants.CENTER); + label.setForeground(JBColor.GRAY); + final Font oldFont = label.getFont(); + label.setFont(oldFont.deriveFont(oldFont.getSize() - JBUI.scale(1.f))); + label.setBorder(JBUI.Borders.empty(3, 0)); + return label; + } + @Override public void dispose() { } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/EvaluationAwareTraceWindow.java b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/EvaluationAwareTraceWindow.java index ff4ce146b025..52a0e72aefc5 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/EvaluationAwareTraceWindow.java +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/EvaluationAwareTraceWindow.java @@ -103,7 +103,7 @@ public class EvaluationAwareTraceWindow extends DialogWrapper { if (controllers.isEmpty()) return; final List trace = controllers.get(0).getTrace(); final CollectionTree tree = new CollectionTree(trace, context); - final CollectionView sourceView = new SourceView(tree); + final CollectionView sourceView = new CollectionView(tree); controllers.get(0).register(sourceView); myTabContents.get(0).setContent(sourceView, BorderLayout.CENTER); diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/ExceptionView.kt b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/ExceptionView.kt index a345afa95bfe..df2f4d7efa3c 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/ExceptionView.kt +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/ExceptionView.kt @@ -4,13 +4,14 @@ package com.intellij.debugger.streams.ui.impl import com.intellij.debugger.engine.evaluation.EvaluationContextImpl import com.intellij.debugger.streams.trace.TraceElement import com.intellij.icons.AllIcons +import com.intellij.ui.components.JBLabel import javax.swing.JTree /** * @author Vitaliy.Bibaev */ class ExceptionView(context: EvaluationContextImpl, ex: TraceElement) - : CollectionView("Cause", SingleElementTree(ex.value!!, listOf(ex), context)) { + : CollectionView(JBLabel("Cause"), SingleElementTree(ex.value!!, listOf(ex), context)) { init { instancesTree.cellRenderer = object : TraceTreeCellRenderer() { override fun customizeCellRenderer(tree: JTree, diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/FlatView.kt b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/FlatView.kt index 69722bbd4c65..f20c7e2d013d 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/FlatView.kt +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/FlatView.kt @@ -30,7 +30,7 @@ open class FlatView(controllers: List, evaluationContext: Evalu val mappingPane = MappingPane(nextCall.name, TraceUtil.formatWithArguments(nextCall), valuesBefore, mapping, controller) val tree = CollectionTree(controller.values, valuesBefore.map { it.traceElement }, evaluationContext) - val view = PositionsAwareCollectionView(" ", tree, valuesBefore) + val view = PositionsAwareCollectionView(tree, valuesBefore) controller.register(view) view.addValuesPositionsListener(object : ValuesPositionsListener { override fun valuesPositionsChanged() { @@ -70,7 +70,7 @@ open class FlatView(controllers: List, evaluationContext: Evalu else { CollectionTree(lastController.values, it.map { it.traceElement }, evaluationContext) } - val view = PositionsAwareCollectionView(" ", tree, it) + val view = PositionsAwareCollectionView(tree, it) lastController.register(view) view.addValuesPositionsListener(object : ValuesPositionsListener { override fun valuesPositionsChanged() { @@ -86,7 +86,7 @@ open class FlatView(controllers: List, evaluationContext: Evalu if (controllers.size == 1) { val controller = controllers[0] val tree = CollectionTree(controller.values, controller.trace, evaluationContext) - val view = CollectionView("", tree) + val view = CollectionView(tree) add(view) controller.register(view) } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/MappingPane.kt b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/MappingPane.kt index 19ee3ea27c70..c11cd05c4343 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/MappingPane.kt +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/MappingPane.kt @@ -36,6 +36,7 @@ class MappingPane(name: String, init { val label = JBLabel(name, SwingConstants.CENTER) label.toolTipText = fullCallExpression + label.border = JBUI.Borders.empty(2, 0, 3, 0) add(label, BorderLayout.NORTH) add(MyDrawPane(), BorderLayout.CENTER) } diff --git a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/PositionsAwareCollectionView.kt b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/PositionsAwareCollectionView.kt index 31b990c654d3..f0fbe31d2b74 100644 --- a/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/PositionsAwareCollectionView.kt +++ b/plugins/stream-debugger/src/com/intellij/debugger/streams/ui/impl/PositionsAwareCollectionView.kt @@ -10,10 +10,9 @@ import com.intellij.util.EventDispatcher /** * @author Vitaliy.Bibaev */ -open class PositionsAwareCollectionView(header: String, - tree: CollectionTree, +open class PositionsAwareCollectionView(tree: CollectionTree, private val values: List) - : CollectionView(header, tree) { + : CollectionView(tree) { private val myDispatcher: EventDispatcher = EventDispatcher.create(ValuesPositionsListener::class.java) init { @@ -66,6 +65,3 @@ open class PositionsAwareCollectionView(header: String, } } } - -class SourceView(tree: CollectionTree) - : CollectionView("Source", tree)