* @return generated value, <code>null</code> is a valid value
* @throws DebugException
* if there is a problem generating the value
*/
protected Value generateVMValue(String expression) throws DebugException {
VirtualMachine vm = getVM();
if (vm == null) {
requestFailed(
JDIDebugModelMessages.JDIModificationVariable_Unable_to_generate_value___VM_disconnected__1,
null);
}
String signature = getJavaType().getSignature();
Value vmValue = null;
try {
switch (signature.charAt(0)) {
case 'Z':
String flse = Boolean.FALSE.toString();
String tre = Boolean.TRUE.toString();
if (expression.equals(tre) || expression.equals(flse)) {
boolean booleanValue = Boolean.valueOf(expression)
.booleanValue();
vmValue = vm.mirrorOf(booleanValue);
}
break;
case 'B':
byte byteValue = Byte.valueOf(expression).byteValue();
vmValue = vm.mirrorOf(byteValue);
break;
case 'C':
if (expression.length() == 1) {
char charValue = expression.charAt(0);
vmValue = vm.mirrorOf(charValue);
} else if (expression.length() == 2) {
char charValue;
if (!(expression.charAt(0) == '\\')) {
return null;
}
switch (expression.charAt(1)) {
case 'b':
charValue = '\b';
break;
case 'f':
charValue = '\f';
break;
case 'n':
charValue = '\n';
break;
case 'r':
charValue = '\r';
break;
case 't':
charValue = '\t';
break;
case '\'':
charValue = '\'';
break;
case '\"':
charValue = '\"';
break;
case '\\':
charValue = '\\';
break;
default:
return null;
}
vmValue = vm.mirrorOf(charValue);
}
break;
case 'S':
short shortValue = Short.valueOf(expression).shortValue();
vmValue = vm.mirrorOf(shortValue);
break;
case 'I':
int intValue = Integer.valueOf(expression).intValue();
vmValue = vm.mirrorOf(intValue);
break;
case 'J':
long longValue = Long.valueOf(expression).longValue();
vmValue = vm.mirrorOf(longValue);
break;
case 'F':
float floatValue = Float.valueOf(expression).floatValue();
vmValue = vm.mirrorOf(floatValue);
break;
case 'D':
double doubleValue = Double.valueOf(expression).doubleValue();
vmValue = vm.mirrorOf(doubleValue);
break;
case 'L':
if (expression.equals("null")) { //$NON-NLS-1$
vmValue = null;
} else if (expression.equals("\"null\"")) { //$NON-NLS-1$
vmValue = vm.mirrorOf("null"); //$NON-NLS-1$
} else {
vmValue = vm.mirrorOf(expression);
}
break;
}
} catch (NumberFormatException nfe) {