Class Type
- java.lang.Object
-
- org.glassfish.rmic.tools.java.Type
-
- All Implemented Interfaces:
Constants
,RuntimeConstants
- Direct Known Subclasses:
ArrayType
,ClassType
,MethodType
public class Type extends java.lang.Object implements Constants
This class represents an Java Type.It encapsulates an Java type signature and it provides quick access to the components of the type. Note that all types are hashed into a hashtable (typeHash), that means that each distinct type is only allocated once, saving space and making equality checks cheap.
For simple types use the constants defined in this class. (Type.tInt, Type.tShort, ...). To create complex types use the static methods Type.tArray, Type.tMethod or Type.tClass. For classes, arrays and method types a sub class of class type is created which defines the extra type components. WARNING: The contents of this source file are not part of any supported API. Code that depends on them does so at its own risk: they are subject to change or removal without notice.
- See Also:
ArrayType
,ClassType
,MethodType
-
-
Field Summary
Fields Modifier and Type Field Description static Type[]
noArgs
static Type
tBoolean
static Type
tByte
static Type
tChar
static Type
tClassDesc
static Type
tCloneable
static Type
tDouble
static Type
tError
static Type
tFloat
static Type
tInt
static Type
tLong
static Type
tNull
static Type
tObject
static Type
tPackage
static Type
tSerializable
static Type
tShort
static Type
tString
static Type
tVoid
private TypeCode
typeCode
The TypeCode of this type.private static java.util.Hashtable<java.lang.String,Type>
typeHash
This hashtable is used to cache typesprotected java.lang.String
typeSig
The TypeSignature of this type.-
Fields inherited from interface org.glassfish.rmic.tools.java.Constants
ABSTRACT, ACCM_CLASS, ACCM_FIELD, ACCM_INNERCLASS, ACCM_MEMBER, ACCM_METHOD, ADD, AND, ARRAY, ARRAYACCESS, ASGADD, ASGBITAND, ASGBITOR, ASGBITXOR, ASGDIV, ASGLSHIFT, ASGMUL, ASGREM, ASGRSHIFT, ASGSUB, ASGURSHIFT, ASSIGN, ATT_ALL, ATT_ALLCLASSES, ATT_CODE, BITAND, BITNOT, BITOR, BITXOR, BOOLEAN, BOOLEANVAL, BREAK, BYTE, BYTEVAL, CASE, CAST, CATCH, CHAR, CHARVAL, CLASS, COLON, COMMA, COMMENT, COND, CONST, CONTINUE, CONVERT, CS_BINARY, CS_CHECKED, CS_COMPILED, CS_NOTFOUND, CS_PARSED, CS_SOURCE, CS_UNDECIDED, CS_UNDEFINED, CT_BLOCK, CT_BRANCH_FALSE, CT_BRANCH_TRUE, CT_CASE, CT_FIKT_METHOD, CT_FIKT_RET, CT_FIRST_KIND, CT_LAST_KIND, CT_METHOD, CT_SWITH_WO_DEF, DEC, DECLARATION, DEFAULT, DIV, DO, DOUBLE, DOUBLEVAL, ELSE, EQ, ERROR, EXPR, EXPRESSION, EXTENDS, F_COVDATA, F_COVERAGE, F_DEBUG_LINES, F_DEBUG_SOURCE, F_DEBUG_VARS, F_DEPENDENCIES, F_DEPRECATION, F_DUMP, F_ERRORSREPORTED, F_OPT, F_OPT_INTERCLASS, F_PRINT_DEPENDENCIES, F_STRICTDEFAULT, F_VERBOSE, F_VERSION12, F_WARNINGS, FALSE, FIELD, FINAL, FINALLY, FLOAT, FLOATVAL, FOR, GE, GOTO, GT, idAppend, idClass, idClassInit, idClone, idCode, idConstantValue, idCoverageTable, idDeprecated, idDocumentation, IDENT, idExceptions, idFinallyReturnValue, idGetClass, idInit, idInnerClasses, idJavaIoSerializable, idJavaLang, idJavaLangClass, idJavaLangCloneable, idJavaLangError, idJavaLangException, idJavaLangObject, idJavaLangRuntimeException, idJavaLangString, idJavaLangStringBuffer, idJavaLangThrowable, idLength, idLineNumberTable, idLocalVariableTable, idNew, idNull, idSourceFile, idStar, idSuper, idSynthetic, idThis, idToString, idTYPE, idValueOf, IF, IMPLEMENTS, IMPORT, INC, INLINEMETHOD, INLINENEWINSTANCE, INLINERETURN, INSTANCEOF, INT, INTERFACE, INTVAL, LBRACE, LE, LENGTH, LONG, LONGVAL, LPAREN, LSHIFT, LSQBRACKET, LT, M_ABSTRACT, M_ANONYMOUS, M_DEPRECATED, M_FINAL, M_INLINEABLE, M_INTERFACE, M_LOCAL, M_NATIVE, M_PRIVATE, M_PROTECTED, M_PUBLIC, M_STATIC, M_STRICTFP, M_SYNCHRONIZED, M_SYNTHETIC, M_TRANSIENT, M_VOLATILE, MAXFILESIZE, MAXLINENUMBER, METHOD, MM_CLASS, MM_FIELD, MM_MEMBER, MM_METHOD, MUL, NATIVE, NE, NEG, NEW, NEWARRAY, NEWFROMNAME, NEWINSTANCE, NOT, NULL, opNames, opPrecedence, OR, PACKAGE, paraDeprecated, POS, POSTDEC, POSTINC, PREDEC, prefixAccess, prefixArray, prefixClass, prefixLoc, prefixThis, prefixVal, PREINC, PRIVATE, PROTECTED, PUBLIC, QUESTIONMARK, RBRACE, REM, RETURN, RPAREN, RSHIFT, RSQBRACKET, SEMICOLON, SHORT, SHORTVAL, SIG_INNERCLASS, SIGC_INNERCLASS, STAT, STATIC, STRICTFP, STRINGVAL, SUB, SUPER, SWITCH, SYNCHRONIZED, TC_ARRAY, TC_BOOLEAN, TC_BYTE, TC_CHAR, TC_CLASS, TC_DOUBLE, TC_ERROR, TC_FLOAT, TC_INT, TC_LONG, TC_METHOD, TC_NULL, TC_SHORT, TC_VOID, THIS, THROW, THROWS, TM_ARRAY, TM_BOOLEAN, TM_BYTE, TM_CHAR, TM_CLASS, TM_DOUBLE, TM_ERROR, TM_FLOAT, TM_INT, TM_INT32, TM_INTEGER, TM_LONG, TM_METHOD, TM_NULL, TM_NUM32, TM_NUM64, TM_NUMBER, TM_REAL, TM_REFERENCE, TM_SHORT, TM_VOID, tracing, TRANSIENT, TRUE, TRY, TYPE, URSHIFT, VARDECLARATION, VOID, VOLATILE, WHEREOFFSETBITS, WHILE
-
Fields inherited from interface org.glassfish.rmic.tools.java.RuntimeConstants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, CONSTANT_CLASS, CONSTANT_DOUBLE, CONSTANT_FIELD, CONSTANT_FLOAT, CONSTANT_INTEGER, CONSTANT_INTERFACEMETHOD, CONSTANT_INVOKEDYNAMIC, CONSTANT_LONG, CONSTANT_METHOD, CONSTANT_METHODHANDLE, CONSTANT_METHODTYPE, CONSTANT_NAMEANDTYPE, CONSTANT_STRING, CONSTANT_UNICODE, CONSTANT_UTF8, JAVA_DEFAULT_MINOR_VERSION, JAVA_DEFAULT_VERSION, JAVA_MAGIC, JAVA_MAX_SUPPORTED_MINOR_VERSION, JAVA_MAX_SUPPORTED_VERSION, JAVA_MIN_SUPPORTED_VERSION, 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_breakpoint, 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_dead, 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_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_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_invokedynamic, 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_label, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_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_try, opc_wide, opcLengths, opcNames, SIG_ARRAY, SIG_BOOLEAN, SIG_BYTE, SIG_CHAR, SIG_CLASS, SIG_DOUBLE, SIG_ENDCLASS, SIG_ENDMETHOD, SIG_FLOAT, SIG_INT, SIG_LONG, SIG_METHOD, SIG_PACKAGE, SIG_SHORT, SIG_VOID, SIGC_ARRAY, SIGC_BOOLEAN, SIGC_BYTE, SIGC_CHAR, SIGC_CLASS, SIGC_DOUBLE, SIGC_ENDCLASS, SIGC_ENDMETHOD, SIGC_FLOAT, SIGC_INT, SIGC_LONG, SIGC_METHOD, SIGC_PACKAGE, SIGC_SHORT, SIGC_VOID, T_BOOLEAN, T_BYTE, T_CHAR, T_CLASS, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static void
changeClassName(Identifier oldName, Identifier newName)
We have learned that a signature means something other that what we thought it meant.boolean
equalArguments(Type t)
Check if the type arguments are the same.Type[]
getArgumentTypes()
Return the argument types.int
getArrayDimension()
Return the array dimension.Identifier
getClassName()
Return the ClassName.Type
getElementType()
Return the element type of an array type.Type
getReturnType()
Return the return type.int
getTypeCode()
Return the type code.int
getTypeCodeOffset()
Return the type code offset.int
getTypeMask()
Return the type mask.java.lang.String
getTypeSignature()
Return the Java type signature.boolean
inMask(int tm)
Check for a certain set of types.boolean
isType(int tc)
Check for a certain type.boolean
isVoidArray()
Check to see if this is the bogus type "array of void" Although this highly degenerate "type" is not constructable from the grammar, the Parser accepts it.static Identifier
mangleInnerType(Identifier className)
Given an inner identifier, return the non-inner, mangled representation used to manage signatures.int
stackSize()
Return the amount of space this type takes up on the Java operand stack.static Type
tArray(Type elem)
Create an array type.static Type
tClass(Identifier className)
Create a class type.static Type
tMethod(Type ret)
Create a method type with no arguments.static Type
tMethod(Type returnType, Type[] argTypes)
Create a method type with arguments.java.lang.String
toString()
Convert to a Stringjava.lang.String
toStringValue(java.lang.Object value)
static Type
tType(java.lang.String sig)
Create a Type from an Java type signature.java.lang.String
typeString(java.lang.String id)
Create a type string, given an identifier.java.lang.String
typeString(java.lang.String id, boolean abbrev, boolean ret)
Convert a Type to a string, if abbrev is true class names are not fully qualified, if ret is true the return type is included.
-
-
-
Field Detail
-
typeHash
private static final java.util.Hashtable<java.lang.String,Type> typeHash
This hashtable is used to cache types
-
typeCode
private TypeCode typeCode
The TypeCode of this type.
-
typeSig
protected java.lang.String typeSig
The TypeSignature of this type. This type signature is equivalent to the runtime type signatures used by the interpreter.
-
noArgs
public static final Type[] noArgs
-
tError
public static final Type tError
-
tPackage
public static final Type tPackage
-
tNull
public static final Type tNull
-
tVoid
public static final Type tVoid
-
tBoolean
public static final Type tBoolean
-
tByte
public static final Type tByte
-
tChar
public static final Type tChar
-
tShort
public static final Type tShort
-
tInt
public static final Type tInt
-
tFloat
public static final Type tFloat
-
tLong
public static final Type tLong
-
tDouble
public static final Type tDouble
-
tObject
public static final Type tObject
-
tClassDesc
public static final Type tClassDesc
-
tString
public static final Type tString
-
tCloneable
public static final Type tCloneable
-
tSerializable
public static final Type tSerializable
-
-
Constructor Detail
-
Type
protected Type(TypeCode tc, java.lang.String typeSig)
Create a type given a typecode and a type signature.
-
-
Method Detail
-
getTypeSignature
public final java.lang.String getTypeSignature()
Return the Java type signature.
-
getTypeCode
public final int getTypeCode()
Return the type code.
-
getTypeMask
public final int getTypeMask()
Return the type mask. The bits in this mask correspond to the TM_* constants defined in Constants. Only one bit is set at a type.- See Also:
Constants
-
isType
public final boolean isType(int tc)
Check for a certain type.
-
isVoidArray
public boolean isVoidArray()
Check to see if this is the bogus type "array of void" Although this highly degenerate "type" is not constructable from the grammar, the Parser accepts it. Rather than monkey with the Parser, we check for the bogus type at specific points and give a nice error.
-
inMask
public final boolean inMask(int tm)
Check for a certain set of types.
-
getElementType
public Type getElementType()
Return the element type of an array type. Only works for array types.
-
getArrayDimension
public int getArrayDimension()
Return the array dimension. Only works for array types.
-
tClass
public static Type tClass(Identifier className)
Create a class type.
-
getClassName
public Identifier getClassName()
Return the ClassName. Only works on class types.
-
mangleInnerType
public static Identifier mangleInnerType(Identifier className)
Given an inner identifier, return the non-inner, mangled representation used to manage signatures. Note: It is changed to 'public' for Jcov file generation. (see Assembler.java)
-
changeClassName
private static void changeClassName(Identifier oldName, Identifier newName)
We have learned that a signature means something other that what we thought it meant. Live with it: Change all affected data structures to reflect the new name of the old type.(This is necessary because of an ambiguity between the low-level signatures of inner types and their manglings. Note that the latter are also valid class names.)
-
tMethod
public static Type tMethod(Type returnType, Type[] argTypes)
Create a method type with arguments.
-
getReturnType
public Type getReturnType()
Return the return type. Only works for method types.
-
getArgumentTypes
public Type[] getArgumentTypes()
Return the argument types. Only works for method types.
-
tType
public static Type tType(java.lang.String sig)
Create a Type from an Java type signature.- Throws:
CompilerError
- invalid type signature.
-
equalArguments
public boolean equalArguments(Type t)
Check if the type arguments are the same.- Returns:
- true if both types are method types and the argument types are identical.
-
stackSize
public int stackSize()
Return the amount of space this type takes up on the Java operand stack. For a method this is equal to the total space taken up by the arguments.
-
getTypeCodeOffset
public int getTypeCodeOffset()
Return the type code offset. This offset can be added to an opcode to get the right opcode type. Most opcodes are ordered: int, long, float, double, array. For example: iload, lload fload, dload, aload. So the appropriate opcode is iadd + type.getTypeCodeOffset().
-
typeString
public java.lang.String typeString(java.lang.String id, boolean abbrev, boolean ret)
Convert a Type to a string, if abbrev is true class names are not fully qualified, if ret is true the return type is included.
-
typeString
public java.lang.String typeString(java.lang.String id)
Create a type string, given an identifier.
-
toString
public java.lang.String toString()
Convert to a String- Overrides:
toString
in classjava.lang.Object
-
toStringValue
public java.lang.String toStringValue(java.lang.Object value)
-
-