IDEA-140562 In the Debug Variables & Watches views, indicate whether a variable is...
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 21 May 2015 18:01:31 +0000 (21:01 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 21 May 2015 18:02:15 +0000 (21:02 +0300)
java/debugger/impl/src/com/intellij/debugger/ui/impl/DebuggerTreeRenderer.java
java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ArgumentValueDescriptorImpl.java

index 5ec8f8b57192e1a81d7c4e6518e0765f353eaeed..6542b131ae5b5173b4ba04022dfc8784ea853ec0 100644 (file)
@@ -101,6 +101,9 @@ public class DebuggerTreeRenderer extends ColoredTreeCellRenderer {
         nodeIcon = new LayeredIcon(nodeIcon, AllIcons.Nodes.StaticMark);
       }
     }
+    else if (isParameter(valueDescriptor)) {
+      nodeIcon = PlatformIcons.PARAMETER_ICON;
+    }
     else if (valueDescriptor.isEnumConstant()) {
       nodeIcon = PlatformIcons.ENUM_ICON;
     }
@@ -128,6 +131,20 @@ public class DebuggerTreeRenderer extends ColoredTreeCellRenderer {
     return nodeIcon;
   }
 
+  private static boolean isParameter(ValueDescriptorImpl valueDescriptor) {
+    if (valueDescriptor instanceof LocalVariableDescriptorImpl) {
+      try {
+        return ((LocalVariableDescriptorImpl)valueDescriptor).getLocalVariable().getVariable().isArgument();
+      }
+      catch (EvaluateException ignored) {
+      }
+    }
+    else if (valueDescriptor instanceof ArgumentValueDescriptorImpl) {
+      return ((ArgumentValueDescriptorImpl)valueDescriptor).isParameter();
+    }
+    return false;
+  }
+
   public static SimpleColoredText getDescriptorText(DebuggerContextImpl debuggerContext,
                                                     NodeDescriptorImpl descriptor,
                                                     EditorColorsScheme colorsScheme,
index 545517903000d7431d9e107919045619a7117574..07ed73f803d11134c87666f21d1e9338db36335a 100644 (file)
@@ -41,11 +41,13 @@ public class ArgumentValueDescriptorImpl extends ValueDescriptorImpl{
   private String myName;
   private boolean myParameterNameCalcutated;
   private final String myDefaultName;
+  private final boolean myIsParam;
 
   public ArgumentValueDescriptorImpl(Project project, int index, Value value, String name) {
     super(project);
     myIndex = index;
     myValue = value;
+    myIsParam = name == null;
     myDefaultName = name != null ? name : "arg" + String.valueOf(index);
     myName = myDefaultName;
     setLvalue(true);
@@ -127,6 +129,10 @@ public class ArgumentValueDescriptorImpl extends ValueDescriptorImpl{
     return myName;
   }
 
+  public boolean isParameter() {
+    return myIsParam;
+  }
+
   public PsiExpression getDescriptorEvaluation(DebuggerContext context) throws EvaluateException {
     if (!myParameterNameCalcutated) {
       return null;