JML

org.multijava.mjc
Class CValueType

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CType
          extended byorg.multijava.mjc.CValueType
All Implemented Interfaces:
Cloneable, Comparable, Constants, Constants, CTypeSignatureAppender
Direct Known Subclasses:
CBooleanValueType, COrdinalValueType, CRealValueType, CStringValueType

public abstract class CValueType
extends CType

This class represents a value specializer "type." It is the base class for a hierarchy representing different kinds of value specializers, e.g. String literals, integer constants, etc.


Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.CType
CType.MethodSignature, CType.MethodSignatureParser, CType.StringBuffers, CType.TupleCollection
 
Field Summary
protected  JExpression dispatchExpr
           
protected  JExpression dispatchValue
           
protected  CType staticType
           
 
Fields inherited from class org.multijava.mjc.CType
EMPTY, instance, isMethodTypeVariable, isTypeVariable, type
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc2_w, opc_ldc_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
CValueType(CType staticType, JExpression dispatchExpr)
          Constructor
 
Method Summary
 void appendSignature(FastStringBuffer buff)
          Transforms this type to a string for bytecode attributes
 CType checkType(CContextType context)
          Register this type as visible, so it can be checked during ITC on the compilation unit
 boolean equals(Object o)
          Compares two objects for equality.
 int getSize()
          Returns the size used in stack by value of this type
 JExpression getValue()
           
 int hashCode()
           
protected abstract  int intValue()
          Returns an integer representation of the specializer's value, for use in computing its hashCode.
 boolean isAlwaysAssignableTo(CType dest)
          Is this type assignable to the given type.
 boolean isBoolean()
          Check if a type is the boolean type
 boolean isCastableTo(CType dest)
          Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
 boolean isCodedAsInt()
           
 boolean isFloatingPoint()
          Check if a type is an integer type
 boolean isNumeric()
          Check if a type is a numeric type
 boolean isOrdinal()
          Check if a type is an integer type
 boolean isPrimitive()
          Check if a type is a class type
 boolean isReference()
          Check if a type is a class type
protected  boolean isResolvedAndValid()
           
protected abstract  boolean isValid()
           
 boolean isValueType()
           
 void resolveValueType(CExpressionContextType context)
          Compute the value of a specializer expression used to dispatch on a compile-time constant.
 String signatureStringValue()
          Transforms this type's value to a string for use in bytecode attributes for this value specializer.
 String specializerSymbol()
          Returns the specializer symbol to use when this type is the specializer.
 String toString()
          Transforms this type to a string
protected abstract  boolean valueEquals(CValueType t)
          Is the value of this specializer equal to the value of the given value specializer?
 
Methods inherited from class org.multijava.mjc.CType
appendGenericSignature, changesByErasure, checked, compareTo, equals, equals, equals, genGenericMethodSignature, genGenericMethodSignature, genGenericMethodSignatureHelper, genMethodSignature, genMultimethodSignature, getAllArguments, getArguments, getCapture, getCClass, getErasure, getErasure, getGenericSignature, getIdent, getLoadOpcode, getReturnOpcode, getSignature, getStoreOpcode, getTypeID, implicitlyCastTo, isAlwaysAssignableTo, isAlwaysAssignableTo, isArrayType, isAssignableTo, isCapture, isCheckedException, isClassType, isClassTypeVariable, isConcrete, isGenericType, isInterface, isLocalTo, isMethodTypeVariable, isNestedType, isRawType, isReifiableType, isTypeVariable, isVoid, isWildcard, needsUncheckedConversion, needsUncheckedConversion, parseGenericTypeSignature, parseGenericTypeSignature, parseMethodSignature, parseMethodSignature, parseSignature, parseSignature, plantDispatchTest, setMethodTypeVariable, setTypeVariable, toVerboseString, tupleToString, tupleToString
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

dispatchExpr

protected JExpression dispatchExpr

dispatchValue

protected JExpression dispatchValue

staticType

protected CType staticType
Constructor Detail

CValueType

public CValueType(CType staticType,
                  JExpression dispatchExpr)
Constructor

Parameters:
staticType - the associated static type of the formal
dispatchExpr - the AST of the specializer expression
Method Detail

equals

public boolean equals(Object o)
Description copied from class: CType
Compares two objects for equality.

Overrides:
equals in class CType

hashCode

public int hashCode()
Overrides:
hashCode in class Object

isAlwaysAssignableTo

public boolean isAlwaysAssignableTo(CType dest)
Is this type assignable to the given type. The original dispatch expression must have the right type. Also, if both types are CValueTypes, then their values must be the same.

Parameters:
dest - the destination type
Returns:
true iff assignment is valid
See Also:
JExpression.isAssignableTo(CType)

toString

public String toString()
Transforms this type to a string

Specified by:
toString in class CType

signatureStringValue

public String signatureStringValue()
Transforms this type's value to a string for use in bytecode attributes for this value specializer.


appendSignature

public void appendSignature(FastStringBuffer buff)
Transforms this type to a string for bytecode attributes


getSize

public int getSize()
Returns the size used in stack by value of this type


isNumeric

public boolean isNumeric()
Check if a type is a numeric type

Overrides:
isNumeric in class CType
Returns:
is it a numeric type?

isCodedAsInt

public boolean isCodedAsInt()
Overrides:
isCodedAsInt in class CType

isOrdinal

public boolean isOrdinal()
Check if a type is an integer type

Overrides:
isOrdinal in class CType
Returns:
is it a integer type ?

isFloatingPoint

public boolean isFloatingPoint()
Check if a type is an integer type

Overrides:
isFloatingPoint in class CType
Returns:
is it a real number type ?

isBoolean

public boolean isBoolean()
Check if a type is the boolean type

Overrides:
isBoolean in class CType
Returns:
is it the boolean type ?

isPrimitive

public boolean isPrimitive()
Check if a type is a class type

Overrides:
isPrimitive in class CType
Returns:
is it a subtype of ClassType ?

isReference

public boolean isReference()
Check if a type is a class type

Overrides:
isReference in class CType
Returns:
is it a subtype of ClassType ?

isValueType

public boolean isValueType()
Overrides:
isValueType in class CType
Returns:
is this type representing a value specializer ?

specializerSymbol

public String specializerSymbol()
Returns the specializer symbol to use when this type is the specializer.

Overrides:
specializerSymbol in class CType

getValue

public JExpression getValue()
Overrides:
getValue in class CType
Returns:
the value expression of this type

valueEquals

protected abstract boolean valueEquals(CValueType t)
Is the value of this specializer equal to the value of the given value specializer? Subclasses provide this method, which is used in equals and isAlwaysAssignableTo above.

Parameters:
t - the type to compare against
Returns:
true iff the values are equal

intValue

protected abstract int intValue()
Returns an integer representation of the specializer's value, for use in computing its hashCode.


isResolvedAndValid

protected boolean isResolvedAndValid()

isValid

protected abstract boolean isValid()

checkType

public CType checkType(CContextType context)
                throws UnpositionedError
Register this type as visible, so it can be checked during ITC on the compilation unit

Parameters:
context - the context in which this type was declared, may be null
Throws:
UnpositionedError - this unpositioned error should be positioned by the calling node of the AST, typically by calling the addPosition method of UnpositionedError

resolveValueType

public void resolveValueType(CExpressionContextType context)
                      throws PositionedError
Compute the value of a specializer expression used to dispatch on a compile-time constant.

Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if the check fails

isCastableTo

public boolean isCastableTo(CType dest)
Can this type be converted to the specified type by casting conversion (JLS 5.5) ?

Parameters:
dest - the destination type
Returns:
true iff the casting conversion is valid

JML

JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.