org.multijava.mjc
Class CArrayType
java.lang.Object
org.multijava.util.Utils
org.multijava.mjc.CType
org.multijava.mjc.CClassType
org.multijava.mjc.CArrayType
- All Implemented Interfaces:
- Cloneable, Comparable, Constants, Constants, CTypeSignatureAppender
- public class CArrayType
- extends CClassType
This class represents the array type in the type structure.
- See Also:
CType
| 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 |
CArrayType(CType baseType,
int arrayBound,
CUniverse array_univ)
Constructs an array type with universe modifier for the whole array. |
|
Method Summary |
void |
appendGenericSignature(FastStringBuffer buff)
|
void |
appendSignature(FastStringBuffer buff)
Transforms this type to a string |
boolean |
changesByErasure()
Returns whether this type differs from its type erasure (JLS3 4.6). |
boolean |
checked()
|
CType |
checkType(CContextType context)
Checks that this type is valid, throwing an exception if it is
not. |
Collection |
directlyVisibleTypes()
Returns the set of types (excluding non-reference types) that
are directly visible from this type. |
boolean |
equals(Object other)
Compares two objects for equality. |
boolean |
equals(Object other,
boolean enableUniv)
Compares two objects for equality. |
boolean |
equals(CType other,
CClassType[] substitution)
|
boolean |
equals(CType other,
CClassType[] substitution,
boolean enableUniv)
|
int |
getArrayBound()
|
CType |
getBaseType()
Determine and return the base type of the array. |
CClass |
getCClass()
Returns the class object associated with this type. |
String |
getCUniverseJMLString()
Return the universe modifier as string, for output in JML
specifications. |
String |
getCUniverseMJString()
Returns the universe modifier as String, for output in source
code parsed by MultiJava, i.e. the modifiers are written as is. |
String |
getCUniverseString()
Return the universe modifiers as string. |
CType |
getDeclaredBaseType()
Return the declared base type of the array. |
CType |
getErasure()
|
CType |
getIndexedType()
|
int |
getSize()
Returns the size used in stack by value of this type |
byte |
getUniverseByteConstant()
Return the Universe bytecode constant of this class type. |
int |
hashCode()
Calculates the hash code for this |
boolean |
implicitlyCastTo(CType dest)
implicitlyCastTo |
boolean |
isAlwaysAssignableTo(CType dest)
Is this type assignable to the given type by assignment type
conversion [JLS2 5.2] [JLS2 5.1.4] |
boolean |
isAlwaysAssignableTo(CType dest,
boolean inst)
Is this type assignable to the given type by assignment type
conversion [JLS2 5.2] [JLS2 5.1.4] |
boolean |
isAlwaysAssignableTo(CType dest,
CClassType[] subst)
|
boolean |
isAlwaysAssignableToNoUniverses(CType dest,
CClassType[] substitution)
A version of the Assignable check without considering the Universe types. |
boolean |
isArrayType()
|
boolean |
isCastableTo(CType dest)
Can this type be converted to the specified type by casting conversion (JLS 5.5) ? |
boolean |
isConcrete()
Indicates whether this type is concrete. |
boolean |
isReifiableType()
Returns whether this is a reifiable type (JLS3 4.7). |
boolean |
needsUncheckedConversion(CType dest)
Returns whether unchecked conversion (JLS3 5.1.9) is required in order
to convert from this type to the given type dest. |
String |
qualifiedName()
|
String |
toString()
Transforms this type to a string |
| Methods inherited from class org.multijava.mjc.CClassType |
capture, clone, contains, createSubstitutedType, getAllArguments, getArguments, getCUniverse, getIndex, getVisibleTypesFrom, hasUnboundedWildcardTypeArgumentsOnly, hasWildcardTypeArgument, ident, isAssignableTo, isChecked, isCheckedException, isClassType, isInterface, isLocalTo, isNestedType, isParameterizedType, isRawTypeInvocationOf, isReference, isValidTypeArgumentFor, needsUncheckedConversion, originalQualifiedName, plantDispatchTest, printArgs, resolveValueType, setAllArguments, setClass, setCUniverse, setIndex, toVerboseString |
| Methods inherited from class org.multijava.mjc.CType |
compareTo, genGenericMethodSignature, genGenericMethodSignature, genGenericMethodSignatureHelper, genMethodSignature, genMultimethodSignature, getCapture, getErasure, getGenericSignature, getIdent, getLoadOpcode, getReturnOpcode, getSignature, getStoreOpcode, getTypeID, getValue, isBoolean, isCapture, isClassTypeVariable, isCodedAsInt, isFloatingPoint, isGenericType, isMethodTypeVariable, isNumeric, isOrdinal, isPrimitive, isRawType, isTypeVariable, isValueType, isVoid, isWildcard, parseGenericTypeSignature, parseGenericTypeSignature, parseMethodSignature, parseMethodSignature, parseSignature, parseSignature, setMethodTypeVariable, setTypeVariable, specializerSymbol, 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 |
baseType
private CType baseType
arrayBound
private int arrayBound
result_type
private CClassType result_type
- The result type with the correct universe modifier. By WMD.
CArrayType
public CArrayType(CType baseType,
int arrayBound,
CUniverse array_univ)
- Constructs an array type with universe modifier for the whole array. WMD
- Parameters:
baseType - the base type of the array typearrayBound - the dimension of the array typearray_univ - the universe for the whole array
toString
public String toString()
- Transforms this type to a string
- Overrides:
toString in class CClassType
- Returns:
- the ksm form of this type
getCUniverseString
public String getCUniverseString()
- Return the universe modifiers as string.
Always returns a Universe string, even if the Universe checks
are turned of!
By WMD.
- Overrides:
getCUniverseString in class CClassType
getCUniverseJMLString
public String getCUniverseJMLString()
- Return the universe modifier as string, for output in JML
specifications. The only difference is that implicit annotations
are escaped with a backslash.
By AHS, WMD.
- Overrides:
getCUniverseJMLString in class CClassType
getCUniverseMJString
public String getCUniverseMJString()
- Returns the universe modifier as String, for output in source
code parsed by MultiJava, i.e. the modifiers are written as is.
By RZU, WMD.
- Overrides:
getCUniverseMJString in class CClassType
qualifiedName
public String qualifiedName()
- Overrides:
qualifiedName in class CClassType
appendSignature
public void appendSignature(FastStringBuffer buff)
- Transforms this type to a string
- Specified by:
appendSignature in interface CTypeSignatureAppender- Overrides:
appendSignature in class CClassType
- Returns:
- the class file form of thid type
appendGenericSignature
public void appendGenericSignature(FastStringBuffer buff)
- Specified by:
appendGenericSignature in interface CTypeSignatureAppender- Overrides:
appendGenericSignature in class CType
getSize
public int getSize()
- Description copied from class:
CClassType
- Returns the size used in stack by value of this type
- Overrides:
getSize in class CClassType
- Returns:
- the size used in stack by value of this type
isArrayType
public boolean isArrayType()
- Overrides:
isArrayType in class CType
- Returns:
- is this type an array ?
isReifiableType
public boolean isReifiableType()
- Description copied from class:
CType
- Returns whether this is a reifiable type (JLS3 4.7).
- Overrides:
isReifiableType in class CType
getBaseType
public CType getBaseType()
- Determine and return the base type of the array.
- Returns:
- the base class of this type
WMD: we have to combine the universe modifier of the array with
the modifier of the element to get the correct modifier
for the elements.
getIndexedType
public CType getIndexedType()
- Returns:
- the base class of this type
WMD: this is either the same as the result of getBaseType
or a new CArrayType with the same basetype and universe
but one fewer dimension.
getDeclaredBaseType
public CType getDeclaredBaseType()
- Return the declared base type of the array.
No combination of the universe specifications is performed.
- Returns:
- the declared base class of this type
By WMD.
getUniverseByteConstant
public byte getUniverseByteConstant()
- Return the Universe bytecode constant of this class type.
By AHS.
- Overrides:
getUniverseByteConstant in class CClassType
getArrayBound
public int getArrayBound()
- Returns:
- the number of array bracket of this type
checked
public boolean checked()
- Overrides:
checked in class CType
- Returns:
- true if this type is valid
equals
public boolean equals(Object other)
- Compares two objects for equality.
- Overrides:
equals in class CClassType
- Parameters:
other - the object to compare with
- Returns:
- true iff
other is a CType object
representing the same Java type as this represents
WMD: also compare the universe modifiers.
equals
public boolean equals(Object other,
boolean enableUniv)
- Description copied from class:
CClassType
- Compares two objects for equality.
- Overrides:
equals in class CClassType
equals
public boolean equals(CType other,
CClassType[] substitution)
- Overrides:
equals in class CClassType
equals
public boolean equals(CType other,
CClassType[] substitution,
boolean enableUniv)
- Overrides:
equals in class CClassType
hashCode
public int hashCode()
- Calculates the hash code for this
- Overrides:
hashCode in class CClassType
- Returns:
- the hash code for this, which is the same as the hash code for
the corresponding CClass singleton * 31 + array bound
directlyVisibleTypes
public Collection directlyVisibleTypes()
- Returns the set of types (excluding non-reference types) that
are directly visible from this type.
- Overrides:
directlyVisibleTypes in class CClassType
isConcrete
public boolean isConcrete()
- Indicates whether this type is concrete. All types are
concrete except abstract class types and interface types.
- Overrides:
isConcrete in class CClassType
- Returns:
- whether this type is concrete
getCClass
public CClass getCClass()
- Returns the class object associated with this type.
also
requires isChecked();
- Overrides:
getCClass in class CClassType
- Returns:
- the class object associated with this type
checkType
public CType checkType(CContextType context)
throws UnpositionedError
- Checks that this type is valid, throwing an exception if it is
not. For class types this check resolves type names into their
fully qualified versions and sets the class parameter so that
getCClass returns the appropriate singleton.
- Overrides:
checkType in class CClassType
- 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
changesByErasure
public boolean changesByErasure()
- Description copied from class:
CType
- Returns whether this type differs from its type erasure (JLS3 4.6).
- Overrides:
changesByErasure in class CType
getErasure
public CType getErasure()
- Overrides:
getErasure in class CClassType
isAlwaysAssignableTo
public boolean isAlwaysAssignableTo(CType dest,
boolean inst)
- Description copied from class:
CClassType
- Is this type assignable to the given type by assignment type
conversion [JLS2 5.2] [JLS2 5.1.4]
- Overrides:
isAlwaysAssignableTo in class CClassType
isAlwaysAssignableTo
public boolean isAlwaysAssignableTo(CType dest,
CClassType[] subst)
- Overrides:
isAlwaysAssignableTo in class CClassType
isAlwaysAssignableTo
public boolean isAlwaysAssignableTo(CType dest)
- Is this type assignable to the given type by assignment type
conversion [JLS2 5.2] [JLS2 5.1.4]
- Overrides:
isAlwaysAssignableTo in class CClassType
- Parameters:
dest - the destination type
- Returns:
- true iff assignment is valid
WMD: make sure that the universe modifiers are also assignable.
isAlwaysAssignableToNoUniverses
public boolean isAlwaysAssignableToNoUniverses(CType dest,
CClassType[] substitution)
- A version of the Assignable check without considering the Universe types.
This is needed to determine e.g. the correct method to invoke, where we
do not look at the Universe types.
There were already many versions of "isAlwaysAssignableTo" and also with
boolean flags; therefore I decided to change the name.
By WMD.
- Overrides:
isAlwaysAssignableToNoUniverses in class CClassType
isCastableTo
public boolean isCastableTo(CType dest)
- Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
- Overrides:
isCastableTo in class CClassType
- Parameters:
dest - the destination type
- Returns:
- true iff the casting conversion is valid
WMD: make sure the universe modifiers are also castable.
implicitlyCastTo
public boolean implicitlyCastTo(CType dest)
- implicitlyCastTo
- Overrides:
implicitlyCastTo in class CClassType
- Parameters:
dest - the expression type to cast to
- Returns:
- cast is valid ?
needsUncheckedConversion
public boolean needsUncheckedConversion(CType dest)
- Description copied from class:
CType
- Returns whether unchecked conversion (JLS3 5.1.9) is required in order
to convert from this type to the given type
dest.
- Overrides:
needsUncheckedConversion in class CClassType
mjc is Copyright (C) 2000-2004 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. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.