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
VoidType0is returned. - 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 asClassType: ClassType
- Annotations
- @throws("if this type is not a class 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 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
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 isClassType: Boolean
- 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 isReferenceType: Boolean
Returns
trueif this type is a reference type; that is, an array type or a class type (class/interface).Returns
trueif this type is a reference type; that is, an array type or a class type (class/interface).- 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() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- 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. Returns the same name as produced by
Class.getName. - 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
- Deprecated