mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[debugger] IDEA-349254 Support arrays
GitOrigin-RevId: 7ee3644cee7d3cbfce768052ad1bc4316d4f10a0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
7d22b2f36b
commit
1051ef13e9
+5
-14
@@ -9,29 +9,20 @@ import kotlinx.coroutines.CoroutineScope
|
||||
import javax.swing.JComponent
|
||||
|
||||
interface CollectionVisualizer {
|
||||
fun applicableFor(collectionClass: String): Boolean
|
||||
|
||||
fun createComponent(
|
||||
project: Project,
|
||||
baseCollectionClass: String,
|
||||
descriptor: ValueDescriptor,
|
||||
evaluationContext: EvaluationContextImpl,
|
||||
scope: CoroutineScope,
|
||||
): JComponent?
|
||||
): JComponent
|
||||
|
||||
companion object {
|
||||
private val EP_NAME = ExtensionPointName.create<CollectionVisualizer>("com.intellij.debugger.collectionVisualizer")
|
||||
|
||||
fun createComponent(
|
||||
project: Project,
|
||||
baseCollectionClass: String,
|
||||
valueDescriptor: ValueDescriptor,
|
||||
evaluationContext: EvaluationContextImpl,
|
||||
scope: CoroutineScope
|
||||
): JComponent? {
|
||||
for (visualizer in EP_NAME.extensionList) {
|
||||
val component = visualizer.createComponent(project, baseCollectionClass, valueDescriptor, evaluationContext, scope) ?: continue
|
||||
return component
|
||||
}
|
||||
return null
|
||||
fun findApplicable(collectionClass: String): CollectionVisualizer? {
|
||||
return EP_NAME.findFirstSafe { it.applicableFor(collectionClass) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+7
-2
@@ -18,7 +18,7 @@ import kotlinx.coroutines.cancel
|
||||
import java.awt.event.MouseEvent
|
||||
import javax.swing.JComponent
|
||||
|
||||
class CollectionVisualizerEvaluator(private val baseCollectionClass: String) : FullValueEvaluatorProvider {
|
||||
class CollectionVisualizerEvaluator(private val visualizer: CollectionVisualizer) : FullValueEvaluatorProvider {
|
||||
override fun getFullValueEvaluator(evaluationContext: EvaluationContextImpl, valueDescriptor: ValueDescriptorImpl): XFullValueEvaluator? {
|
||||
val presenterName = valueDescriptor.type?.name() ?: "<unknown name>"
|
||||
val scope = evaluationContext.managerThread.coroutineScope.childScope("Collection presentation for $presenterName")
|
||||
@@ -29,7 +29,7 @@ class CollectionVisualizerEvaluator(private val baseCollectionClass: String) : F
|
||||
}
|
||||
|
||||
override fun createComponent(fullValue: String?): JComponent? {
|
||||
return CollectionVisualizer.createComponent(evaluationContext.project, baseCollectionClass, valueDescriptor, evaluationContext, scope)
|
||||
return visualizer.createComponent(evaluationContext.project, valueDescriptor, evaluationContext, scope)
|
||||
}
|
||||
|
||||
override fun showValuePopup(event: MouseEvent, project: Project, editor: Editor?, component: JComponent, cancelCallback: Runnable?) {
|
||||
@@ -62,4 +62,9 @@ class CollectionVisualizerEvaluator(private val baseCollectionClass: String) : F
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun createFor(collectionClass: String) = CollectionVisualizer.findApplicable(collectionClass)?.let(::CollectionVisualizerEvaluator)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -575,7 +575,7 @@ public class NodeRendererSettings implements PersistentStateComponent<Element> {
|
||||
createExpressionArrayChildrenRenderer("toArray()", "!isEmpty()", arrayRenderer));
|
||||
setClassName(CommonClassNames.JAVA_UTIL_LIST);
|
||||
setIsApplicableChecker(type -> DebuggerUtilsAsync.instanceOf(type, getClassName()));
|
||||
setFullValueEvaluator(new CollectionVisualizerEvaluator(getClassName()));
|
||||
setFullValueEvaluator(CollectionVisualizerEvaluator.createFor(getClassName()));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,10 +5,8 @@ import com.intellij.debugger.DebuggerContext;
|
||||
import com.intellij.debugger.DebuggerManagerEx;
|
||||
import com.intellij.debugger.JavaDebuggerBundle;
|
||||
import com.intellij.debugger.actions.ArrayAction;
|
||||
import com.intellij.debugger.engine.ContextUtil;
|
||||
import com.intellij.debugger.engine.DebugProcessImpl;
|
||||
import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
|
||||
import com.intellij.debugger.engine.JavaValue;
|
||||
import com.intellij.debugger.collections.visualizer.CollectionVisualizerEvaluator;
|
||||
import com.intellij.debugger.engine.*;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluateException;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContext;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
|
||||
@@ -43,6 +41,7 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.xdebugger.XExpression;
|
||||
import com.intellij.xdebugger.frame.XCompositeNode;
|
||||
import com.intellij.xdebugger.frame.XDebuggerTreeNodeHyperlink;
|
||||
import com.intellij.xdebugger.frame.XFullValueEvaluator;
|
||||
import com.intellij.xdebugger.frame.XValueChildrenList;
|
||||
import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree;
|
||||
import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
|
||||
@@ -50,6 +49,8 @@ import com.sun.jdi.*;
|
||||
import one.util.streamex.StreamEx;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.tree.TreeNode;
|
||||
import javax.swing.tree.TreePath;
|
||||
@@ -60,10 +61,11 @@ import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
public class ArrayRenderer extends NodeRendererImpl {
|
||||
public class ArrayRenderer extends NodeRendererImpl implements FullValueEvaluatorProvider {
|
||||
private static final Logger LOG = Logger.getInstance(ArrayRenderer.class);
|
||||
|
||||
public static final @NonNls String UNIQUE_ID = "ArrayRenderer";
|
||||
public static final @NonNls String VISUALIZER_ID = "%Array%";
|
||||
|
||||
public int START_INDEX = 0;
|
||||
public int END_INDEX = Integer.MAX_VALUE;
|
||||
@@ -95,6 +97,16 @@ public class ArrayRenderer extends NodeRendererImpl {
|
||||
return (ArrayRenderer)super.clone();
|
||||
}
|
||||
|
||||
@Override
|
||||
public @Nullable XFullValueEvaluator getFullValueEvaluator(@NotNull EvaluationContextImpl evaluationContext,
|
||||
@NotNull ValueDescriptorImpl valueDescriptor) {
|
||||
CollectionVisualizerEvaluator evaluator = CollectionVisualizerEvaluator.createFor(VISUALIZER_ID);
|
||||
if (evaluator == null) {
|
||||
return null;
|
||||
}
|
||||
return evaluator.getFullValueEvaluator(evaluationContext, valueDescriptor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String calcLabel(ValueDescriptor descriptor, EvaluationContext evaluationContext, DescriptorLabelListener listener)
|
||||
throws EvaluateException {
|
||||
|
||||
Reference in New Issue
Block a user