sealed trait Type extends UIDValue with Ordered[Type]
Represents a JVM type.
Programmatically, we distinguish three major kinds of types:
- base types/primitive types,
- reference types,
- the type void.
General Information
From the JVM specification
There are three kinds of reference types: class types, array types, and interface types. Their values are references to dynamically created class instances, arrays, or class instances or arrays that implement interfaces, respectively.
A reference value may also be the special null reference, a reference to no object, which will be denoted here by null. The null reference initially has no runtime type, but may be cast to any type. The default value of a reference type is null. The Java virtual machine specification does not mandate a concrete value encoding null.
Comparing Types/Performance
Given that the comparison of types is a standard operation in static analysis that
is usually done over and over again great care was taken to enable an efficient
comparison of types. It is - without exception - always possible to compare
types using reference equality (i.e., the eq/ne operators). For each type there
will always be at most one object that represents that specific type.
Additionally, a stable order is defined between types that is based on a type's kind and the unique id of the types in case of reference types. The order is: void type < primitive types < array types < class/interface types
- Alphabetic
- By Inheritance
- Type
- Ordered
- Comparable
- UIDValue
- UID
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Abstract Value Members
-
abstract
def
computationalType: ComputationalType
The computational type of values of this type.
The computational type of values of this type.
- Annotations
- @throws( ... )
-
abstract
def
id: Int
The unique id of this type.
The unique id of this type. Types are associated with globally unique ids to make it easy to define a global order. The id Int.MinValue is used for Void; Int.MinValue + 1 is used for CTIntType.
- Definition Classes
- Type → UID
-
abstract
def
toBinaryJavaName: String
Returns the binary name of this type as used by the Java runtime.
Returns the binary name of this type as used by the Java runtime. Basically returns the same name as produced by
Class.getName.- Annotations
- @throws( ... )
-
abstract
def
toJVMTypeName: String
Returns the representation of this type as used by the JVM in, for example, method descriptors or signatures.
-
abstract
def
toJava: String
A String representation of this type as it would be used in Java source code.
-
abstract
def
toJavaClass: Class[_]
Returns the Java class object representing this type.
Returns the Java class object representing this type.
This is generally only useful in very special cases and – to be meaningful at all – it is necessary that the class path used for running the static analysis also contains the classes that are analyzed. This is (often) only the case for the JDK.
However, one example where this is useful is the creation of a real object of a specific type and to use that object when a method is called on that object. This avoids the reimplementation of the respective logic as part of the analysis. For example, if you want to get the
Stringthat is created by a specificStringBufferit is possible to implement the API of StringBuffer as part of your analysis or (probably more efficient) to just create an instance of aStringBufferobject and to redirect every call to the real object. In this case only some general logic is required to redirect calls and to convert the values between the representation used by the analysis and the representation required by the called method.
Concrete Value Members
-
final
def
!=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
- Definition Classes
- AnyRef → Any
-
def
<(other: Type): Boolean
- Definition Classes
- Type → Ordered
-
def
<=(other: Type): Boolean
- Definition Classes
- Type → Ordered
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
>(other: Type): Boolean
- Definition Classes
- Type → Ordered
-
def
>=(other: Type): Boolean
- Definition Classes
- Type → Ordered
-
def
asArrayType: ArrayType
- Annotations
- @throws( "if this type is not an array type" )
-
def
asBaseType: BaseType
- Annotations
- @throws( "if this type is not a base type" )
-
def
asBooleanType: BooleanType
- Annotations
- @throws( "if this is not a boolean type" )
-
def
asFieldType: FieldType
- Annotations
- @throws( "if this type is not a field type" )
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
-
def
asIntLikeType: IntLikeType
- Annotations
- @throws( "if this is not an int like type" )
-
def
asNumericType: NumericType
- Annotations
- @throws( "if this is not a numeric type" )
-
def
asObjectType: ObjectType
- Annotations
- @throws( ... )
-
def
asReferenceType: ReferenceType
- Annotations
- @throws( ... )
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
-
def
compare(that: Type): Int
Compares this type with the given type.
Compares this type with the given type.
Comparison of types is implemented by comparing the associated ids. I.e., the result of the comparison of two types is not stable across multiple runs of OPAL.
- Definition Classes
- Type → Ordered
-
def
compareTo(that: Type): Int
- Definition Classes
- Ordered → Comparable
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
equals(that: UID): Boolean
- Definition Classes
- UIDValue
-
final
def
equals(other: Any): Boolean
- Definition Classes
- UIDValue → AnyRef → Any
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
-
final
def
hashCode(): Int
- Definition Classes
- UIDValue → AnyRef → Any
- def isArrayType: Boolean
-
def
isBaseType: Boolean
Returns
trueif this type is a base type (also called primitive type). -
def
isBooleanType: Boolean
Returns
trueif this type is the primitive typeboolean. -
def
isByteType: Boolean
Returns
trueif this type is the primitive typebyte. -
def
isCharType: Boolean
Returns
trueif this type is the primitive typechar(Range: [0..65535]). -
def
isDoubleType: Boolean
Returns
trueif this type is the primitive typedouble. -
def
isFieldType: Boolean
Returns
trueif this type can be used by fields.Returns
trueif this type can be used by fields. Returnstrueunless this type representsvoid. -
def
isFloatType: Boolean
Returns
trueif this type is the primitive typefloat. -
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isIntLikeType: Boolean
-
def
isIntegerType: Boolean
Returns
trueif this type is the primitive typeint. -
def
isLongType: Boolean
Returns
trueif this type is the primitive typelong. - def isNumericType: Boolean
- def isObjectType: Boolean
-
def
isReferenceType: Boolean
Returns
trueif this type is a reference type; that is, an array type or an object type (class/interface type).Returns
trueif this type is a reference type; that is, an array type or an object type (class/interface type).- Note
In general, we can distinguish the following three categories of types:
- base types,
- reference types,
- the type void.
-
def
isShortType: Boolean
Returns
trueif this type is the primitive typeshort. -
def
isVoidType: Boolean
Returns
trueif this type representsvoid;falseotherwise. -
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
-
def
operandSize: Int
The number of operand stack slots/registers required to store a single value of this type.
The number of operand stack slots/registers required to store a single value of this type. In case of
VoidType0is returned. -
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toString(): String
- Definition Classes
- AnyRef → Any
-
final
def
wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
final
def
wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )