JML

org.multijava.mjc
Class CCaptureType

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CType
          extended byorg.multijava.mjc.CClassType
              extended byorg.multijava.mjc.CTypeVariable
                  extended byorg.multijava.mjc.CCaptureType
All Implemented Interfaces:
Cloneable, Comparable, Constants, Constants, CTypeSignatureAppender

public class CCaptureType
extends CTypeVariable

Type resulting from applying capture conversion (JLS3 5.1.10) to a wildcard. This type is basically a normal CTypeVariable whose upper bounds are a combination of the wildcard's optional bound and the bounds of the formal type variable for which the wildcard is a type argument. Additionally, a type variable resulting from capture conversion may have a lower bound associated to it which is used for checking subtype relationships.


Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.CType
CType.MethodSignature, CType.MethodSignatureParser, CType.StringBuffers, CType.TupleCollection
 
Field Summary
private  CClassType lowerBound
          The lower bound of this capture type variable or null if the lower bound is of type CNullType.
 
Fields inherited from class org.multijava.mjc.CTypeVariable
EMPTY
 
Fields inherited from class org.multijava.mjc.CClassType
arguments, 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
private CCaptureType(String name, CClassType[] upperBounds, CClassType lowerBound)
          Private constructor.
 
Method Summary
static CCaptureType create(CWildcardType wildcard)
          Creates a capture type for the given wildcard which must have been type checked.
 CClassType getLowerBound()
          Returns the lower bound of this type variable or null if the type variable has no lower bound.
 boolean isCapture()
          Returns whether this is a wildcard capture type as resulting from capture conversion (JLS3 5.1.10).
 boolean isClassTypeVariable()
          Returns whether this type is a type variable introduced by a generic class declaration (JLS3 8.1.2) or a generic interface declaration (JLS3 9.1.2) as opposed to a method type variable.
 boolean isMethodTypeVariable()
           
 boolean isTypeVariable()
          Check if a type is a type variable
 String toString()
          Transforms this type to a string also assignable loadedClassInfo, thisClassInfo; ensures \not_modified(loadedClassInfo);
 
Methods inherited from class org.multijava.mjc.CTypeVariable
appendDefinitionSignature, appendGenericSignature, appendSignature, changesByErasure, checkType, equals, equals, getBounds, getIdent, getIndex, hashCode, hasSameBound, isAlwaysAssignableTo, isAlwaysAssignableTo, isAlwaysAssignableTo, isReifiableType, needsUncheckedConversion, setIndex, setMethodTypeVariable
 
Methods inherited from class org.multijava.mjc.CClassType
capture, clone, contains, createSubstitutedType, directlyVisibleTypes, equals, equals, getAllArguments, getArguments, getCClass, getCUniverse, getCUniverseJMLString, getCUniverseMJString, getCUniverseString, getErasure, getSize, getUniverseByteConstant, getVisibleTypesFrom, hasUnboundedWildcardTypeArgumentsOnly, hasWildcardTypeArgument, ident, implicitlyCastTo, isAlwaysAssignableToNoUniverses, isAssignableTo, isCastableTo, isChecked, isCheckedException, isClassType, isConcrete, isInterface, isLocalTo, isNestedType, isParameterizedType, isRawTypeInvocationOf, isReference, isValidTypeArgumentFor, needsUncheckedConversion, originalQualifiedName, plantDispatchTest, printArgs, qualifiedName, resolveValueType, setAllArguments, setClass, setCUniverse, toVerboseString
 
Methods inherited from class org.multijava.mjc.CType
checked, compareTo, genGenericMethodSignature, genGenericMethodSignature, genGenericMethodSignatureHelper, genMethodSignature, genMultimethodSignature, getCapture, getErasure, getGenericSignature, getLoadOpcode, getReturnOpcode, getSignature, getStoreOpcode, getTypeID, getValue, isArrayType, isBoolean, isCodedAsInt, isFloatingPoint, isGenericType, isNumeric, isOrdinal, isPrimitive, isRawType, isValueType, isVoid, isWildcard, parseGenericTypeSignature, parseGenericTypeSignature, parseMethodSignature, parseMethodSignature, parseSignature, parseSignature, 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

lowerBound

private CClassType lowerBound
The lower bound of this capture type variable or null if the lower bound is of type CNullType.

See JLS3 5.1.10 for details on what the lower bound of a wildcard capture type is.

Constructor Detail

CCaptureType

private CCaptureType(String name,
                     CClassType[] upperBounds,
                     CClassType lowerBound)
Private constructor. Initializes this wildcard capture type by giving it a name and a set of upper bounds.

Parameters:
name - The name of the wildcard capture type.
upperBounds - The upper bounds of the wildcard capture type.
lowerBound - The lower bound of the wildcard capture type or null if it has no lower bound.
Method Detail

create

public static CCaptureType create(CWildcardType wildcard)
Creates a capture type for the given wildcard which must have been type checked.

The returned wildcard capture type is guaranteed to be type checked.

Parameters:
wildcard - The actual wildcard.
Returns:
The type resulting from applying capture conversion on the given wildcard. Is guaranteed to be type checked. Is never null.

getLowerBound

public CClassType getLowerBound()
Returns the lower bound of this type variable or null if the type variable has no lower bound.

Returns:
The lower bound of this type variable or null if the type variable has no lower bound.

isTypeVariable

public boolean isTypeVariable()
Description copied from class: CType
Check if a type is a type variable

Overrides:
isTypeVariable in class CType

isClassTypeVariable

public boolean isClassTypeVariable()
Description copied from class: CType
Returns whether this type is a type variable introduced by a generic class declaration (JLS3 8.1.2) or a generic interface declaration (JLS3 9.1.2) as opposed to a method type variable.

Overrides:
isClassTypeVariable in class CTypeVariable

isMethodTypeVariable

public boolean isMethodTypeVariable()
Overrides:
isMethodTypeVariable in class CTypeVariable

isCapture

public boolean isCapture()
Description copied from class: CType
Returns whether this is a wildcard capture type as resulting from capture conversion (JLS3 5.1.10).

Overrides:
isCapture in class CType

toString

public String toString()
Description copied from class: CClassType
Transforms this type to a string

 also
 assignable loadedClassInfo, thisClassInfo;
 ensures \not_modified(loadedClassInfo);
 

Overrides:
toString in class CTypeVariable

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.