blob: c43804bc0b08b0794ef1c1f26914e16f7832af98 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 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 API and implementation
*******************************************************************************/
package org.eclipse.jdi.internal;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import com.sun.jdi.InternalException;
import com.sun.jdi.PrimitiveType;
import com.sun.jdi.PrimitiveValue;
/**
* this class implements the corresponding interfaces declared by the JDI
* specification. See the com.sun.jdi package for more information.
*
*/
public abstract class PrimitiveValueImpl extends ValueImpl implements PrimitiveValue {
/** Primitive value in wrapper. */
Object fValue;
/**
* Creates new ValueImpl.
*/
public PrimitiveValueImpl(String description, VirtualMachineImpl vmImpl,
Object value) {
super(description, vmImpl);
fValue = value;
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public boolean booleanValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue();
else if (fValue instanceof Character)
return ((Character) fValue).charValue() != 0;
else
return ((Number) fValue).doubleValue() != 0;
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public char charValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (char) 1 : (char) 0;
else if (fValue instanceof Character)
return ((Character) fValue).charValue();
else
return (char) ((Number) fValue).intValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public byte byteValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (byte) 1 : (byte) 0;
else if (fValue instanceof Character)
return (byte) ((Character) fValue).charValue();
else
return ((Number) fValue).byteValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public double doubleValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (double) 1 : (double) 0;
else if (fValue instanceof Character)
return ((Character) fValue).charValue();
else
return ((Number) fValue).doubleValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public float floatValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (float) 1 : (float) 0;
else if (fValue instanceof Character)
return ((Character) fValue).charValue();
else
return ((Number) fValue).floatValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public int intValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (int) 1 : (int) 0;
else if (fValue instanceof Character)
return ((Character) fValue).charValue();
else
return ((Number) fValue).intValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public long longValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (long) 1 : (long) 0;
else if (fValue instanceof Character)
return ((Character) fValue).charValue();
else
return ((Number) fValue).longValue();
}
/**
* @return Returns Primitive Value converted to required type.
*/
@Override
public short shortValue() {
if (fValue instanceof Boolean)
return ((Boolean) fValue).booleanValue() ? (short) 1 : (short) 0;
else if (fValue instanceof Character)
return (short) ((Character) fValue).charValue();
else
return ((Number) fValue).shortValue();
}
/**
* @return Returns true if two values are equal.
* @see java.lang.Object#equals(Object)
*/
@Override
public boolean equals(Object object) {
return object != null && object.getClass().equals(this.getClass())
&& fValue.equals(((PrimitiveValueImpl) object).fValue);
}
/**
* @return Returns a has code for this object.
* @see java.lang.Object#hashCode
*/
@Override
public int hashCode() {
return fValue.hashCode();
}
/**
* @return Returns description of Mirror object.
*/
@Override
public String toString() {
return fValue.toString();
}
/**
* Writes value without value tag.
*/
@Override
public abstract void write(MirrorImpl target, DataOutputStream out)
throws IOException;
/**
* @return Reads JDWP representation and returns new instance.
*/
public static PrimitiveValueImpl readWithoutTag(MirrorImpl target,
PrimitiveType type, DataInputStream in) throws IOException {
switch (((PrimitiveTypeImpl) type).tag()) {
case 0:
return null;
case BooleanValueImpl.tag:
return BooleanValueImpl.read(target, in);
case ByteValueImpl.tag:
return ByteValueImpl.read(target, in);
case CharValueImpl.tag:
return CharValueImpl.read(target, in);
case DoubleValueImpl.tag:
return DoubleValueImpl.read(target, in);
case FloatValueImpl.tag:
return FloatValueImpl.read(target, in);
case IntegerValueImpl.tag:
return IntegerValueImpl.read(target, in);
case LongValueImpl.tag:
return LongValueImpl.read(target, in);
case ShortValueImpl.tag:
return ShortValueImpl.read(target, in);
}
throw new InternalException(
JDIMessages.PrimitiveValueImpl_Invalid_Primitive_Value_tag_encountered___2
+ type);
}
}