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
- Source
- Type.scala
- Alphabetic
- By Inheritance
- Type
- Ordered
- Comparable
- UIDValue
- UID
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
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("if this type has no associated computational type(i.e., if this type represents void)")
- abstract def id: Int
The unique id of this type.
- abstract 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
VoidType
0
is returned. - 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("if this type has not binary name(i.e., if this type represents void)")
- 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
String
that is created by a specificStringBuffer
it is possible to implement the API of StringBuffer as part of your analysis or (probably more efficient) to just create an instance of aStringBuffer
object 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("if this type is not an object type")
- def asReferenceType: ReferenceType
- Annotations
- @throws("if this type is not a reference type")
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- 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
Two objects with a unique id are considered equal if they have the same unique id; all other properties will be ignored!
Two objects with a unique id are considered equal if they have the same unique id; all other properties will be ignored!
- Definition Classes
- UIDValue → AnyRef → Any
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def hashCode(): Int
The unique id.
The unique id.
- Definition Classes
- UIDValue → AnyRef → Any
- def isArrayType: Boolean
- def isBaseType: Boolean
Returns
true
if this type is a base type (also called primitive type). - def isBooleanType: Boolean
Returns
true
if this type is the primitive typeboolean
. - def isByteType: Boolean
Returns
true
if this type is the primitive typebyte
. - def isCharType: Boolean
Returns
true
if this type is the primitive typechar
(Range: [0..65535]). - def isDoubleType: Boolean
Returns
true
if this type is the primitive typedouble
. - def isFieldType: Boolean
Returns
true
if this type can be used by fields.Returns
true
if this type can be used by fields. Returnstrue
unless this type representsvoid
. - def isFloatType: Boolean
Returns
true
if this type is the primitive typefloat
. - final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def isIntLikeType: Boolean
- def isIntegerType: Boolean
Returns
true
if this type is the primitive typeint
. - def isLongType: Boolean
Returns
true
if this type is the primitive typelong
. - def isNumericType: Boolean
- def isObjectType: Boolean
- def isReferenceType: Boolean
Returns
true
if this type is a reference type; that is, an array type or an object type (class/interface type).Returns
true
if 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
true
if this type is the primitive typeshort
. - def isVoidType: Boolean
Returns
true
if this type representsvoid
;false
otherwise. - final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated