bsh
Class Primitive

java.lang.Object
  extended bybsh.Primitive
All Implemented Interfaces:
ParserConstants, java.io.Serializable

public final class Primitive
extends java.lang.Object
implements ParserConstants, java.io.Serializable

Wrapper for primitive types in Bsh. This is package public because it is used in the implementation of some bsh commands. See the note in LHS.java about wrapping objects.

See Also:
Serialized Form

Field Summary
static Primitive NULL
           
(package private) static java.util.Hashtable primitiveToWrapper
           
static Primitive VOID
          VOID means "no type".
(package private) static java.util.Hashtable wrapperToPrimitive
           
 
Fields inherited from interface bsh.ParserConstants
_DEFAULT, ABSTRACT, ANDASSIGN, ANDASSIGNX, ASSIGN, BANG, BIT_AND, BIT_ANDX, BIT_OR, BIT_ORX, BOOL_AND, BOOL_ANDX, BOOL_OR, BOOL_ORX, BOOLEAN, BREAK, BYTE, CASE, CATCH, CHAR, CHARACTER_LITERAL, CLASS, COLON, COMMA, CONST, CONTINUE, DECIMAL_LITERAL, DECR, DEFAULT, DIGIT, DO, DOT, DOUBLE, ELSE, ENUM, EOF, EQ, EXPONENT, EXTENDS, FALSE, FINAL, FINALLY, FLOAT, FLOATING_POINT_LITERAL, FOR, FORMAL_COMMENT, GE, GEX, GOTO, GT, GTX, HASH_BANG_COMMENT, HEX_LITERAL, HOOK, IDENTIFIER, IF, IMPLEMENTS, IMPORT, INCR, INSTANCEOF, INT, INTEGER_LITERAL, INTERFACE, LBRACE, LBRACKET, LE, LETTER, LEX, LONG, LPAREN, LSHIFT, LSHIFTASSIGN, LSHIFTASSIGNX, LSHIFTX, LT, LTX, MINUS, MINUSASSIGN, MOD, MODASSIGN, MULTI_LINE_COMMENT, NATIVE, NE, NEW, NONPRINTABLE, OCTAL_LITERAL, ORASSIGN, ORASSIGNX, PACKAGE, PLUS, PLUSASSIGN, PRIVATE, PROTECTED, PUBLIC, RBRACE, RBRACKET, RETURN, RPAREN, RSIGNEDSHIFT, RSIGNEDSHIFTASSIGN, RSIGNEDSHIFTASSIGNX, RSIGNEDSHIFTX, RUNSIGNEDSHIFT, RUNSIGNEDSHIFTASSIGN, RUNSIGNEDSHIFTASSIGNX, RUNSIGNEDSHIFTX, SEMICOLON, SHORT, SINGLE_LINE_COMMENT, SLASH, SLASHASSIGN, STAR, STARASSIGN, STATIC, STRICTFP, STRING_LITERAL, SWITCH, SYNCHRONIZED, THROW, THROWS, TILDE, tokenImage, TRANSIENT, TRUE, TRY, VOLATILE, WHILE, XOR, XORASSIGN
 
Constructor Summary
Primitive(boolean value)
           
Primitive(byte value)
           
Primitive(char value)
           
Primitive(double value)
           
Primitive(float value)
           
Primitive(int value)
           
Primitive(long value)
           
Primitive(java.lang.Object value)
           
Primitive(short value)
           
 
Method Summary
static java.lang.Object binaryOperation(java.lang.Object obj1, java.lang.Object obj2, int kind)
          Perform a binary operation on two Primitives or wrapper types.
(package private) static java.lang.Object binaryOperationImpl(java.lang.Object lhs, java.lang.Object rhs, int kind)
           
(package private) static java.lang.Boolean booleanBinaryOperation(java.lang.Boolean B1, java.lang.Boolean B2, int kind)
           
(package private) static boolean booleanUnaryOperation(java.lang.Boolean B, int kind)
           
 boolean booleanValue()
           
static java.lang.Class boxType(java.lang.Class primitiveType)
          Get the corresponding java.lang wrapper class for the primitive TYPE class.
(package private) static Primitive castPrimitive(java.lang.Class toType, java.lang.Class fromType, Primitive fromValue, boolean checkOnly, int operation)
           
 Primitive castToType(java.lang.Class toType, int operation)
          Cast this bsh.Primitive value to a new bsh.Primitive value This is usually a numeric type cast.
(package private) static java.lang.Object castWrapper(java.lang.Class toType, java.lang.Object value)
          Cast a primitive value represented by its java.lang wrapper type to the specified java.lang wrapper type.
(package private) static java.lang.Object doubleBinaryOperation(java.lang.Double D1, java.lang.Double D2, int kind)
           
(package private) static double doubleUnaryOperation(java.lang.Double D, int kind)
           
 boolean equals(java.lang.Object obj)
          Primitives compare equal with other Primitives containing an equal wrapped value.
(package private) static java.lang.Object floatBinaryOperation(java.lang.Float F1, java.lang.Float F2, int kind)
           
(package private) static float floatUnaryOperation(java.lang.Float F, int kind)
           
static Primitive getDefaultValue(java.lang.Class type)
          Get the appropriate default value per JLS 4.5.4
 java.lang.Class getType()
          Get the corresponding Java primitive TYPE class for this Primitive.
 java.lang.Object getValue()
          Return the primitive value stored in its java.lang wrapper class
 int hashCode()
          The hash of the Primitive is tied to the hash of the wrapped value but shifted so that they are not the same.
(package private) static java.lang.Object intBinaryOperation(java.lang.Integer I1, java.lang.Integer I2, int kind)
           
(package private) static int intUnaryOperation(java.lang.Integer I, int kind)
           
 int intValue()
           
 boolean isNumber()
          Determine if this primitive is a numeric type.
static boolean isWrapperType(java.lang.Class type)
           
(package private) static java.lang.Object longBinaryOperation(java.lang.Long L1, java.lang.Long L2, int kind)
           
(package private) static long longUnaryOperation(java.lang.Long L, int kind)
           
 java.lang.Number numberValue()
           
(package private) static java.lang.Object[] promotePrimitives(java.lang.Object lhs, java.lang.Object rhs)
          Promote the pair of primitives to the maximum type of the two.
(package private) static java.lang.Object promoteToInteger(java.lang.Object wrapper)
          Promote primitive wrapper type to to Integer wrapper type
 java.lang.String toString()
           
static Primitive unaryOperation(Primitive val, int kind)
           
static java.lang.Class unboxType(java.lang.Class wrapperType)
          Get the corresponding primitive TYPE class for the java.lang wrapper class type.
static java.lang.Object unwrap(java.lang.Object obj)
          Unwrap primitive values and map voids to nulls.
static java.lang.Object[] unwrap(java.lang.Object[] args)
           
static java.lang.Object[] wrap(java.lang.Object[] args, java.lang.Class[] paramTypes)
           
static java.lang.Object wrap(java.lang.Object value, java.lang.Class type)
          Wrap primitive values (as indicated by type param) and nulls in the Primitive class.
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

primitiveToWrapper

static java.util.Hashtable primitiveToWrapper

wrapperToPrimitive

static java.util.Hashtable wrapperToPrimitive

NULL

public static final Primitive NULL

VOID

public static final Primitive VOID
VOID means "no type". Strictly speaking, this makes no sense here. But for practical reasons we'll consider the lack of a type to be a special value.

Constructor Detail

Primitive

public Primitive(java.lang.Object value)

Primitive

public Primitive(boolean value)

Primitive

public Primitive(byte value)

Primitive

public Primitive(short value)

Primitive

public Primitive(char value)

Primitive

public Primitive(int value)

Primitive

public Primitive(long value)

Primitive

public Primitive(float value)

Primitive

public Primitive(double value)
Method Detail

getValue

public java.lang.Object getValue()
Return the primitive value stored in its java.lang wrapper class


toString

public java.lang.String toString()

getType

public java.lang.Class getType()
Get the corresponding Java primitive TYPE class for this Primitive.

Returns:
the primitive TYPE class type of the value or Void.TYPE for Primitive.VOID or null value for type of Primitive.NULL

binaryOperation

public static java.lang.Object binaryOperation(java.lang.Object obj1,
                                               java.lang.Object obj2,
                                               int kind)
                                        throws UtilEvalError
Perform a binary operation on two Primitives or wrapper types. If both original args were Primitives return a Primitive result else it was mixed (wrapper/primitive) return the wrapper type. The exception is for boolean operations where we will return the primitive type eithe way.

Throws:
UtilEvalError

binaryOperationImpl

static java.lang.Object binaryOperationImpl(java.lang.Object lhs,
                                            java.lang.Object rhs,
                                            int kind)
                                     throws UtilEvalError
Throws:
UtilEvalError

booleanBinaryOperation

static java.lang.Boolean booleanBinaryOperation(java.lang.Boolean B1,
                                                java.lang.Boolean B2,
                                                int kind)
                                         throws UtilEvalError
Throws:
UtilEvalError

longBinaryOperation

static java.lang.Object longBinaryOperation(java.lang.Long L1,
                                            java.lang.Long L2,
                                            int kind)

intBinaryOperation

static java.lang.Object intBinaryOperation(java.lang.Integer I1,
                                           java.lang.Integer I2,
                                           int kind)

doubleBinaryOperation

static java.lang.Object doubleBinaryOperation(java.lang.Double D1,
                                              java.lang.Double D2,
                                              int kind)
                                       throws UtilEvalError
Throws:
UtilEvalError

floatBinaryOperation

static java.lang.Object floatBinaryOperation(java.lang.Float F1,
                                             java.lang.Float F2,
                                             int kind)
                                      throws UtilEvalError
Throws:
UtilEvalError

promoteToInteger

static java.lang.Object promoteToInteger(java.lang.Object wrapper)
Promote primitive wrapper type to to Integer wrapper type


promotePrimitives

static java.lang.Object[] promotePrimitives(java.lang.Object lhs,
                                            java.lang.Object rhs)
Promote the pair of primitives to the maximum type of the two. e.g. [int,long]->[long,long]


unaryOperation

public static Primitive unaryOperation(Primitive val,
                                       int kind)
                                throws UtilEvalError
Throws:
UtilEvalError

booleanUnaryOperation

static boolean booleanUnaryOperation(java.lang.Boolean B,
                                     int kind)
                              throws UtilEvalError
Throws:
UtilEvalError

intUnaryOperation

static int intUnaryOperation(java.lang.Integer I,
                             int kind)

longUnaryOperation

static long longUnaryOperation(java.lang.Long L,
                               int kind)

floatUnaryOperation

static float floatUnaryOperation(java.lang.Float F,
                                 int kind)

doubleUnaryOperation

static double doubleUnaryOperation(java.lang.Double D,
                                   int kind)

intValue

public int intValue()
             throws UtilEvalError
Throws:
UtilEvalError

booleanValue

public boolean booleanValue()
                     throws UtilEvalError
Throws:
UtilEvalError

isNumber

public boolean isNumber()
Determine if this primitive is a numeric type. i.e. not boolean, null, or void (but including char)


numberValue

public java.lang.Number numberValue()
                             throws UtilEvalError
Throws:
UtilEvalError

equals

public boolean equals(java.lang.Object obj)
Primitives compare equal with other Primitives containing an equal wrapped value.


hashCode

public int hashCode()
The hash of the Primitive is tied to the hash of the wrapped value but shifted so that they are not the same.


unwrap

public static java.lang.Object unwrap(java.lang.Object obj)
Unwrap primitive values and map voids to nulls. Non Primitive types remain unchanged.

Parameters:
obj - object type which may be bsh.Primitive
Returns:
corresponding "normal" Java type, "unwrapping" any bsh.Primitive types to their wrapper types.

unwrap

public static java.lang.Object[] unwrap(java.lang.Object[] args)

wrap

public static java.lang.Object[] wrap(java.lang.Object[] args,
                                      java.lang.Class[] paramTypes)

wrap

public static java.lang.Object wrap(java.lang.Object value,
                                    java.lang.Class type)
Wrap primitive values (as indicated by type param) and nulls in the Primitive class. Values not primitive or null are left unchanged. Primitive values are represented by their wrapped values in param value.

The value null is mapped to Primitive.NULL. Any value specified with type Void.TYPE is mapped to Primitive.VOID.


getDefaultValue

public static Primitive getDefaultValue(java.lang.Class type)
Get the appropriate default value per JLS 4.5.4


boxType

public static java.lang.Class boxType(java.lang.Class primitiveType)
Get the corresponding java.lang wrapper class for the primitive TYPE class. e.g. Integer.TYPE -> Integer.class


unboxType

public static java.lang.Class unboxType(java.lang.Class wrapperType)
Get the corresponding primitive TYPE class for the java.lang wrapper class type. e.g. Integer.class -> Integer.TYPE


castToType

public Primitive castToType(java.lang.Class toType,
                            int operation)
                     throws UtilEvalError
Cast this bsh.Primitive value to a new bsh.Primitive value This is usually a numeric type cast. Other cases include: A boolean can be cast to boolen null can be cast to any object type and remains null Attempting to cast a void causes an exception

Parameters:
toType - is the java object or primitive TYPE class
Throws:
UtilEvalError

castPrimitive

static Primitive castPrimitive(java.lang.Class toType,
                               java.lang.Class fromType,
                               Primitive fromValue,
                               boolean checkOnly,
                               int operation)
                        throws UtilEvalError
Parameters:
toType - is the java primitive TYPE type of the primitive to be cast to.
fromType - is the java primitive TYPE type of the primitive to be cast. fromType should be null to indicate that the fromValue was null or void.
fromValue - is, optionally, the value to be converted. If checkOnly is true fromValue must be null. If checkOnly is false, fromValue must be non-null (Primitive.NULL is of course valid).
Throws:
UtilEvalError

isWrapperType

public static boolean isWrapperType(java.lang.Class type)

castWrapper

static java.lang.Object castWrapper(java.lang.Class toType,
                                    java.lang.Object value)
Cast a primitive value represented by its java.lang wrapper type to the specified java.lang wrapper type. e.g. Byte(5) to Integer(5) or Integer(5) to Byte(5)

Parameters:
toType - is the java TYPE type
value - is the value in java.lang wrapper. value may not be null.