blob: 4869a86b1734a13a62e3d6bb99ffdfc54dcf9047 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.actions;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.debug.ui.actions.IVariableValueEditor;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.debug.core.IJavaVariable;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.JDIModelPresentation;
import org.eclipse.swt.widgets.Shell;
/**
* Variable editor that prompts the user to edit Java variables
*/
public class JavaVariableValueEditor implements IVariableValueEditor {
/* (non-Javadoc)
* @see org.eclipse.debug.ui.actions.IVariableValueEditor#editVariable(org.eclipse.debug.core.model.IVariable, org.eclipse.swt.widgets.Shell)
*/
@Override
public boolean editVariable(IVariable variable, Shell shell) {
String signature= null;
try {
signature= getSignature(variable);
} catch (DebugException e) {
JDIDebugUIPlugin.errorDialog(shell, ActionMessages.JavaVariableValueEditor_0, ActionMessages.JavaVariableValueEditor_1, e); //
}
if (signature == null) {
return false;
}
IVariableValueEditor editor;
if (JDIModelPresentation.isObjectValue(signature)) {
editor= new JavaObjectValueEditor();
} else {
// Primitive variable
editor= new JavaPrimitiveValueEditor(signature);
}
return editor.editVariable(variable, shell);
}
/* (non-Javadoc)
* @see org.eclipse.debug.ui.actions.IVariableValueEditor#saveVariable(org.eclipse.debug.core.model.IVariable, java.lang.String, org.eclipse.swt.widgets.Shell)
*/
@Override
public boolean saveVariable(IVariable variable, String expression, Shell shell) {
// set the value of chars directly if expression is a single character (not an expression to evaluate)
if (expression.length() == 1 && variable instanceof IJavaVariable){
IJavaVariable javaVariable = (IJavaVariable)variable;
try {
if (javaVariable.getJavaType() != null && javaVariable.getJavaType().getSignature() == Signature.SIG_CHAR){
javaVariable.setValue(expression);
return true;
}
} catch (DebugException e) {
JDIDebugUIPlugin.statusDialog(e.getStatus());
}
}
// support expressions for primitives as well as literals
IVariableValueEditor editor= new JavaObjectValueEditor();
return editor.saveVariable(variable, expression, shell);
}
public static String getSignature(IVariable variable) throws DebugException {
String signature= null;
IJavaVariable javaVariable = variable.getAdapter(IJavaVariable.class);
if (javaVariable != null) {
signature = javaVariable.getSignature();
}
return signature;
}
}