From fbe4d9289b85ebe55c1fed41dcbbb4a1eaee6823 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Thu, 15 Dec 2011 18:40:33 +0100 Subject: [PATCH] IDEA-50910 Add an option for debugger variables view to show a short name instead of FQN (actual class name) --- .../settings/DebuggerDataViewsConfigurable.java | 8 +++++++- .../debugger/ui/impl/watch/FieldDescriptorImpl.java | 2 +- .../ui/impl/watch/LocalVariableDescriptorImpl.java | 2 +- .../debugger/ui/impl/watch/StaticDescriptorImpl.java | 5 ++++- .../ui/impl/watch/UserExpressionDescriptorImpl.java | 8 ++++++-- .../debugger/ui/impl/watch/ValueDescriptorImpl.java | 2 +- .../debugger/ui/tree/render/ClassRenderer.java | 12 ++++++++++++ resources-en/src/messages/DebuggerBundle.properties | 1 + 8 files changed, 33 insertions(+), 7 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java index 891d2b3c9135..0cb9987c79e7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java @@ -48,6 +48,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { private JCheckBox myCbHideNullArrayElements; private JCheckBox myCbShowStatic; private JCheckBox myCbShowDeclaredType; + private JCheckBox myCbShowFQNames; private JCheckBox myCbShowObjectId; private StateRestoringCheckBox myCbShowStaticFinalFields; @@ -102,6 +103,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { } }); myCbShowDeclaredType = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.declared.type")); + myCbShowFQNames = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.fq.names")); myCbShowObjectId = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.show.object.id")); myCbEnableToString = new JCheckBox(DebuggerBundle.message("label.base.renderer.configurable.enable.tostring")); @@ -149,7 +151,8 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { showPanel.add(myCbShowObjectId, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 0, 0, 0), 0, 0)); showPanel.add(myCbShowSyntheticFields, new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0)); showPanel.add(myCbShowStatic, new GridBagConstraints(1, GridBagConstraints.RELATIVE, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 10, 0, 0), 0, 0)); - showPanel.add(myCbShowStaticFinalFields, new GridBagConstraints(2, 1, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 10, 0, 0), 0, 0)); + showPanel.add(myCbShowStaticFinalFields, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(4, 10, 0, 0), 0, 0)); + showPanel.add(myCbShowFQNames, new GridBagConstraints(3, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 0, 0), 0, 0)); panel.add(showPanel, new GridBagConstraints(0, GridBagConstraints.RELATIVE, 3, 1, 1.0, 0.0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(4, 0, 0, 0), 0, 0)); @@ -193,6 +196,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { classRenderer.SHOW_STATIC_FINAL = myCbShowStaticFinalFields.isSelectedWhenSelectable(); classRenderer.SHOW_SYNTHETICS = myCbShowSyntheticFields.isSelected(); classRenderer.SHOW_DECLARED_TYPE = myCbShowDeclaredType.isSelected(); + classRenderer.SHOW_FQ_TYPE_NAMES = myCbShowFQNames.isSelected(); classRenderer.SHOW_OBJECT_ID = myCbShowObjectId.isSelected(); final ToStringRenderer toStringRenderer = rendererSettings.getToStringRenderer(); @@ -226,6 +230,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { myCbShowStaticFinalFields.makeUnselectable(false); } myCbShowDeclaredType.setSelected(classRenderer.SHOW_DECLARED_TYPE); + myCbShowFQNames.setSelected(classRenderer.SHOW_FQ_TYPE_NAMES); myCbShowObjectId.setSelected(classRenderer.SHOW_OBJECT_ID); final ToStringRenderer toStringRenderer = rendererSettings.getToStringRenderer(); @@ -275,6 +280,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable { (classRenderer.SHOW_STATIC_FINAL != myCbShowStaticFinalFields.isSelectedWhenSelectable()) || (classRenderer.SHOW_SYNTHETICS != myCbShowSyntheticFields.isSelected()) || (classRenderer.SHOW_DECLARED_TYPE != myCbShowDeclaredType.isSelected()) || + (classRenderer.SHOW_FQ_TYPE_NAMES != myCbShowFQNames.isSelected()) || (classRenderer.SHOW_OBJECT_ID != myCbShowObjectId.isSelected()); if (isClassRendererModified) { return true; diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/FieldDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/FieldDescriptorImpl.java index 12911d980dbb..ea8fabf23e1d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/FieldDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/FieldDescriptorImpl.java @@ -158,7 +158,7 @@ public class FieldDescriptorImpl extends ValueDescriptorImpl implements FieldDes buf.append(getName()); if (classRenderer.SHOW_DECLARED_TYPE) { buf.append(": "); - buf.append(myField.typeName()); + buf.append(classRenderer.renderTypeName(myField.typeName())); } return buf.toString(); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/LocalVariableDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/LocalVariableDescriptorImpl.java index 582c15e00181..96f0dc6ff61f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/LocalVariableDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/LocalVariableDescriptorImpl.java @@ -121,7 +121,7 @@ public class LocalVariableDescriptorImpl extends ValueDescriptorImpl implements buf.append(getName()); if (classRenderer.SHOW_DECLARED_TYPE) { buf.append(": "); - buf.append(myTypeName); + buf.append(classRenderer.renderTypeName(myTypeName)); } return buf.toString(); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/StaticDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/StaticDescriptorImpl.java index 910c5dd1e7e1..6284de46b724 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/StaticDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/StaticDescriptorImpl.java @@ -23,7 +23,9 @@ package com.intellij.debugger.ui.impl.watch; import com.intellij.debugger.engine.DebuggerManagerThreadImpl; import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; +import com.intellij.debugger.settings.NodeRendererSettings; import com.intellij.debugger.ui.tree.StaticDescriptor; +import com.intellij.debugger.ui.tree.render.ClassRenderer; import com.intellij.debugger.ui.tree.render.DescriptorLabelListener; import com.sun.jdi.Field; import com.sun.jdi.ReferenceType; @@ -64,6 +66,7 @@ public class StaticDescriptorImpl extends NodeDescriptorImpl implements StaticDe protected String calcRepresentation(EvaluationContextImpl context, DescriptorLabelListener descriptorLabelListener) throws EvaluateException { DebuggerManagerThreadImpl.assertIsManagerThread(); - return getName() + " = " + myType.name(); + final ClassRenderer classRenderer = NodeRendererSettings.getInstance().getClassRenderer(); + return getName() + " = " + classRenderer.renderTypeName(myType.name()); } } \ No newline at end of file diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/UserExpressionDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/UserExpressionDescriptorImpl.java index 7f844f067aa6..c3dbed6c7fbb 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/UserExpressionDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/UserExpressionDescriptorImpl.java @@ -27,7 +27,9 @@ import com.intellij.debugger.engine.evaluation.EvaluateExceptionUtil; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.engine.evaluation.TextWithImports; import com.intellij.debugger.impl.DebuggerUtilsEx; +import com.intellij.debugger.settings.NodeRendererSettings; import com.intellij.debugger.ui.tree.UserExpressionDescriptor; +import com.intellij.debugger.ui.tree.render.ClassRenderer; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiCodeFragment; @@ -57,8 +59,10 @@ public class UserExpressionDescriptorImpl extends EvaluationDescriptor implement try { buffer.append(getName()); buffer.append(": "); - if(getValue() != null) { - buffer.append(getValue().type().name()); + final Value value = getValue(); + if(value != null) { + final ClassRenderer classRenderer = NodeRendererSettings.getInstance().getClassRenderer(); + buffer.append(classRenderer.renderTypeName(value.type().name())); } return buffer.toString(); 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 78fea931e6c9..3694dbb7cde7 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 @@ -378,7 +378,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements if (showConcreteType || classRenderer.SHOW_OBJECT_ID) { buf.append('{'); if (showConcreteType) { - buf.append(objRef.type().name()); + buf.append(classRenderer.renderTypeName(objRef.type().name())); } if (classRenderer.SHOW_OBJECT_ID) { buf.append('@'); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java index fcbbbc32b3dd..aecc129a7ac1 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ClassRenderer.java @@ -63,6 +63,7 @@ public class ClassRenderer extends NodeRendererImpl{ public boolean SHOW_STATIC = false; public boolean SHOW_STATIC_FINAL = false; + public boolean SHOW_FQ_TYPE_NAMES = true; public boolean SHOW_DECLARED_TYPE = false; public boolean SHOW_OBJECT_ID = true; @@ -70,6 +71,17 @@ public class ClassRenderer extends NodeRendererImpl{ myProperties.setEnabled(true); } + public final String renderTypeName(final String typeName) { + if (SHOW_FQ_TYPE_NAMES) { + return typeName; + } + final int dotIndex = typeName.lastIndexOf('.'); + if (dotIndex > 0) { + return typeName.substring(dotIndex + 1); + } + return typeName; + } + public String getUniqueId() { return UNIQUE_ID; } diff --git a/resources-en/src/messages/DebuggerBundle.properties b/resources-en/src/messages/DebuggerBundle.properties index d820b639d363..1e872a490d1e 100644 --- a/resources-en/src/messages/DebuggerBundle.properties +++ b/resources-en/src/messages/DebuggerBundle.properties @@ -181,6 +181,7 @@ label.base.renderer.configurable.hide.null.array.elements=Hide &null array eleme label.base.renderer.configurable.show.static.fields=&Static fields label.base.renderer.configurable.show.static.final.fields=Static &final fields label.base.renderer.configurable.show.declared.type=Declared &type +label.base.renderer.configurable.show.fq.names=Fully &qualified names label.base.renderer.configurable.show.object.id=Object &id label.base.renderer.configurable.alternate.view=Enable alternative view for Coll&ections classes label.base.renderer.configurable.enable.tostring=Enable 't&oString()' object view: