mjc

org.multijava.mjc
Class CArrayType

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CType
          extended byorg.multijava.mjc.CClassType
              extended byorg.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

Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.CType
CType.MethodSignature, CType.MethodSignatureParser, CType.StringBuffers, CType.TupleCollection
 
Field Summary
private  int arrayBound
           
private  CType baseType
           
private  CClassType result_type
          The result type with the correct universe modifier.
 
Fields inherited from class org.multijava.mjc.CClassType
arguments, EMPTY, EMPTY_ARG, index, universe
 
Fields inherited from class org.multijava.mjc.CType
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
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
 
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
 

Field Detail

baseType

private CType baseType

arrayBound

private int arrayBound

result_type

private CClassType result_type
The result type with the correct universe modifier. By WMD.

Constructor Detail

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 type
arrayBound - the dimension of the array type
array_univ - the universe for the whole array
Method Detail

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

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.