Bug 578450 - Do not show 'set object label' for nulls and primitive values

Change-Id: If3664198151687dcf71a602c5035b0bfc9ee4c81
Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.debug/+/190176
Tested-by: Sarika Sinha <sarika.sinha@in.ibm.com>
Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml
index 6b6594a..dcd097f 100644
--- a/org.eclipse.jdt.debug.ui/plugin.xml
+++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -935,6 +935,16 @@
                </objectState>
             </not>
          </visibility>
+      </objectContribution>
+      <objectContribution
+            objectClass="org.eclipse.jdt.debug.core.IJavaVariable"
+            id="org.eclipse.jdt.debug.ui.JavaVariableActions">
+         <visibility>
+           <objectState
+                 name="JavaVariableFilter"
+                 value="isNonNullObjectValue">
+           </objectState>
+         </visibility>
          <action
                class="org.eclipse.jdt.internal.debug.ui.actions.SetObjectLabelAction"
                enablesFor="1"
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
index fbf7705..35f1fda 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JavaVarActionFilter.java
@@ -196,6 +196,10 @@
 					if (value.equals("isObjectValue")) { //$NON-NLS-1$
 						return varValue != null && JDIObjectValue.class.isAssignableFrom(varValue.getClass());
 					}
+					if (value.equals("isNonNullObjectValue")) { //$NON-NLS-1$
+						return varValue != null && JDIObjectValue.class.isAssignableFrom(varValue.getClass())
+								&& !((JDIObjectValue) varValue).isNull();
+					}
 					if (value.equals("isFieldVariable")) { //$NON-NLS-1$
 						return var instanceof IJavaFieldVariable;
 					}
@@ -259,4 +263,4 @@
 	protected boolean isInstanceRetrievalAvailable(IJavaVariable var) {
 		return ((IJavaDebugTarget)var.getDebugTarget()).supportsInstanceRetrieval() && !(var instanceof JDIReferenceListVariable);
 	}
-}
\ No newline at end of file
+}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/SetObjectLabelAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/SetObjectLabelAction.java
index 1936251..80d8cee 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/SetObjectLabelAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/SetObjectLabelAction.java
@@ -58,7 +58,9 @@
 			}
 			if (value instanceof IJavaObject) {
 				final IJavaObject javaValue = (IJavaObject) value;
-				askForLabel(javaValue, name);
+				if (!javaValue.isNull()) {
+					askForLabel(javaValue, name);
+				}
 			}
 		} catch (DebugException e) {
 			return;