diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java index d64c783f5c07..315e01f49a1d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java @@ -43,6 +43,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.*; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -107,11 +108,17 @@ public class NodeRendererSettings implements PersistentStateComponent { public static NodeRendererSettings getInstance() { return ServiceManager.getService(NodeRendererSettings.class); } - + + /** + * use {@link com.intellij.debugger.ui.tree.render.NodeRenderer} extension + * @param renderer + */ + @Deprecated public void addPluginRenderer(NodeRenderer renderer) { myPluginRenderers.add(renderer); } + @Deprecated public void removePluginRenderer(NodeRenderer renderer) { myPluginRenderers.remove(renderer); } @@ -253,15 +260,14 @@ public class NodeRendererSettings implements PersistentStateComponent { allRenderers.add(myHexRenderer); allRenderers.add(myPrimitiveRenderer); allRenderers.addAll(myPluginRenderers); + Collections.addAll(allRenderers, NodeRenderer.EP_NAME.getExtensions()); myCustomRenderers.iterateRenderers(new InternalIterator() { public boolean visit(final NodeRenderer renderer) { allRenderers.add(renderer); return true; } }); - for (NodeRenderer myAlternateCollectionRenderer : myAlternateCollectionRenderers) { - allRenderers.add(myAlternateCollectionRenderer); - } + Collections.addAll(allRenderers, myAlternateCollectionRenderers); allRenderers.add(myColorRenderer); allRenderers.add(myToStringRenderer); allRenderers.add(myArrayRenderer); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java index 098c42c0be7f..79499e8a68e5 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java @@ -29,9 +29,7 @@ import com.intellij.debugger.jdi.VirtualMachineProxyImpl; import com.intellij.debugger.settings.NodeRendererSettings; import com.intellij.debugger.ui.tree.NodeDescriptor; import com.intellij.debugger.ui.tree.ValueDescriptor; -import com.intellij.debugger.ui.tree.render.ClassRenderer; -import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; -import com.intellij.debugger.ui.tree.render.NodeRenderer; +import com.intellij.debugger.ui.tree.render.*; import com.intellij.debugger.ui.tree.render.Renderer; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; @@ -148,9 +146,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements public final void setContext(EvaluationContextImpl evaluationContext) { DebuggerManagerThreadImpl.assertIsManagerThread(); - if (Patches.IBM_JDK_DISABLE_COLLECTION_BUG) { - myStoredEvaluationContext = evaluationContext; - } + myStoredEvaluationContext = evaluationContext; Value value; try { value = calcValue(evaluationContext); @@ -271,9 +267,12 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements final StringBuilder buf = StringBuilderSpinAllocator.alloc(); try { final Value value = getValue(); - if(isShowIdLabel() && value instanceof ObjectReference) { - final String idLabel = getIdLabel((ObjectReference)value); - if(!label.startsWith(idLabel)) { + if(isShowIdLabel()) { + Renderer lastRenderer = getLastRenderer(); + final String idLabel = myStoredEvaluationContext != null && lastRenderer != null ? + ((NodeRendererImpl)lastRenderer).getIdLabel(value, myStoredEvaluationContext.getDebugProcess()) : + null; + if(idLabel != null && !label.startsWith(idLabel)) { buf.append(idLabel); } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRenderer.java index aa7f8d9daf59..9dcb133174fb 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRenderer.java @@ -15,7 +15,11 @@ */ package com.intellij.debugger.ui.tree.render; +import com.intellij.openapi.extensions.ExtensionPointName; + public interface NodeRenderer extends ChildrenRenderer, ValueLabelRenderer { + ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.debugger.nodeRenderer"); + String getName(); void setName(String text); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRendererImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRendererImpl.java index 9062fa47c497..e9b2a806d399 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRendererImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/NodeRendererImpl.java @@ -15,13 +15,18 @@ */ package com.intellij.debugger.ui.tree.render; +import com.intellij.debugger.engine.DebugProcess; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContext; +import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.debugger.ui.tree.ValueDescriptor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; +import com.sun.jdi.ObjectReference; +import com.sun.jdi.Value; import org.jdom.Element; +import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -81,4 +86,9 @@ public abstract class NodeRendererImpl implements NodeRenderer{ public String toString() { return getName(); } + + @Nullable + public String getIdLabel(Value value, DebugProcess process) { + return value instanceof ObjectReference ? ValueDescriptorImpl.getIdLabel((ObjectReference)value) : null; + } } diff --git a/plugins/groovy/src/META-INF/plugin.xml b/plugins/groovy/src/META-INF/plugin.xml index bc60ac50d75f..12ecbda88d22 100644 --- a/plugins/groovy/src/META-INF/plugin.xml +++ b/plugins/groovy/src/META-INF/plugin.xml @@ -1442,6 +1442,7 @@ implementation="org.jetbrains.plugins.groovy.debugger.GroovyPositionManagerFactory"/> + + +