final case class ClassBType(internalName: InternalName) extends RefBType with Product with Serializable
A ClassBType represents a class or interface type. The necessary information to build a ClassBType is extracted from compiler symbols and types, see BTypesFromSymbols.
The info
field contains either the class information on an error message why the info could
not be computed. There are two reasons for an erroneous info:
- The ClassBType was built from a class symbol that stems from a java source file, and the symbol's type could not be completed successfully (SI-9111) 2. The ClassBType should be built from a classfile, but the class could not be found on the compilation classpath.
Note that all ClassBTypes required in a non-optimized run are built during code generation from
the class symbols referenced by the ASTs, so they have a valid info. Therefore the backend
often invokes info.get
(which asserts the info to exist) when reading data from the ClassBType.
The inliner on the other hand uses ClassBTypes that are built from classfiles, which may have
a missing info. In order not to crash the compiler unnecessarily, the inliner does not force
infos using get
, but it reports inliner warnings for missing infos that prevent inlining.
- Source
- BTypes.scala
- Alphabetic
- By Inheritance
- ClassBType
- Serializable
- Serializable
- Product
- Equals
- RefBType
- BType
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- new ClassBType(internalName: InternalName)
Value Members
-
final
def
!=(arg0: Any): Boolean
Test two objects for inequality.
Test two objects for inequality.
- returns
true
if !(this == that), false otherwise.
- Definition Classes
- AnyRef → Any
-
final
def
##(): Int
Equivalent to
x.hashCode
except for boxed numeric types andnull
.Equivalent to
x.hashCode
except for boxed numeric types andnull
. For numerics, it returns a hash value which is consistent with value equality: if two value type instances compare as true, then ## will produce the same hash value for each of them. Fornull
returns a hashcode wherenull.hashCode
throws aNullPointerException
.- returns
a hash value consistent with ==
- Definition Classes
- AnyRef → Any
-
def
+(other: String): String
- Implicit
- This member is added by an implicit conversion from ClassBType to any2stringadd[ClassBType] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
-
def
->[B](y: B): (ClassBType, B)
- Implicit
- This member is added by an implicit conversion from ClassBType to ArrowAssoc[ClassBType] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
The expression
x == that
is equivalent toif (x eq null) that eq null else x.equals(that)
.The expression
x == that
is equivalent toif (x eq null) that eq null else x.equals(that)
.- returns
true
if the receiver object is equivalent to the argument;false
otherwise.
- Definition Classes
- AnyRef → Any
-
def
asArrayBType: ArrayBType
- Definition Classes
- BType
-
def
asClassBType: ClassBType
- Definition Classes
- BType
-
final
def
asInstanceOf[T0]: T0
Cast the receiver object to be of type
T0
.Cast the receiver object to be of type
T0
.Note that the success of a cast at runtime is modulo Scala's erasure semantics. Therefore the expression
1.asInstanceOf[String]
will throw aClassCastException
at runtime, while the expressionList(1).asInstanceOf[List[String]]
will not. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested type.- returns
the receiver object.
- Definition Classes
- Any
- Exceptions thrown
ClassCastException
if the receiver object is not an instance of the erasure of typeT0
.
-
def
asPrimitiveBType: PrimitiveBType
- Definition Classes
- BType
-
def
asRefBType: RefBType
- Definition Classes
- BType
-
def
classOrArrayType: String
The class or array type of this reference type.
The class or array type of this reference type. Used for ANEWARRAY, MULTIANEWARRAY, INSTANCEOF and CHECKCAST instructions. Also used for emitting invokevirtual calls to (a: Array[T]).clone() for any T, see genApply.
In contrast to the descriptor, this string does not contain the surrounding 'L' and ';' for class types, for example "java/lang/String". However, for array types, the full descriptor is used, for example "[Ljava/lang/String;".
This can be verified for example using javap or ASMifier.
- Definition Classes
- RefBType
-
def
clone(): AnyRef
Create a copy of the receiver object.
Create a copy of the receiver object.
The default implementation of the
clone
method is platform dependent.- returns
a copy of the receiver object.
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
- Note
not specified by SLS as a member of AnyRef
-
final
def
conformsTo(other: BType): Either[NoClassBTypeInfo, Boolean]
- Definition Classes
- BType
-
final
def
descriptor: String
- returns
The Java descriptor of this type. Examples:
- int: I
- java.lang.String: Ljava/lang/String;
- int[]: [I
- Object m(String s, double d): (Ljava/lang/String;D)Ljava/lang/Object;
- Definition Classes
- BType
- def enclosingNestedClassesChain: Either[NoClassBTypeInfo, List[ClassBType]]
-
def
ensuring(cond: (ClassBType) ⇒ Boolean, msg: ⇒ Any): ClassBType
- Implicit
- This member is added by an implicit conversion from ClassBType to Ensuring[ClassBType] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: (ClassBType) ⇒ Boolean): ClassBType
- Implicit
- This member is added by an implicit conversion from ClassBType to Ensuring[ClassBType] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean, msg: ⇒ Any): ClassBType
- Implicit
- This member is added by an implicit conversion from ClassBType to Ensuring[ClassBType] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean): ClassBType
- Implicit
- This member is added by an implicit conversion from ClassBType to Ensuring[ClassBType] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
eq(arg0: AnyRef): Boolean
Tests whether the argument (
that
) is a reference to the receiver object (this
).Tests whether the argument (
that
) is a reference to the receiver object (this
).The
eq
method implements an equivalence relation on non-null instances ofAnyRef
, and has three additional properties:- It is consistent: for any non-null instances
x
andy
of typeAnyRef
, multiple invocations ofx.eq(y)
consistently returnstrue
or consistently returnsfalse
. - For any non-null instance
x
of typeAnyRef
,x.eq(null)
andnull.eq(x)
returnsfalse
. null.eq(null)
returnstrue
.
When overriding the
equals
orhashCode
methods, it is important to ensure that their behavior is consistent with reference equality. Therefore, if two objects are references to each other (o1 eq o2
), they should be equal to each other (o1 == o2
) and they should hash to the same value (o1.hashCode == o2.hashCode
).- returns
true
if the argument is a reference to the receiver object;false
otherwise.
- Definition Classes
- AnyRef
- It is consistent: for any non-null instances
-
def
finalize(): Unit
Called by the garbage collector on the receiver object when there are no more references to the object.
Called by the garbage collector on the receiver object when there are no more references to the object.
The details of when and if the
finalize
method is invoked, as well as the interaction betweenfinalize
and non-local returns and exceptions, are all platform dependent.- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- Note
not specified by SLS as a member of AnyRef
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from ClassBType to StringFormat[ClassBType] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
getClass(): Class[_]
Returns the runtime class representation of the object.
Returns the runtime class representation of the object.
- returns
a class object corresponding to the runtime type of the receiver.
- Definition Classes
- AnyRef → Any
- def info: Either[NoClassBTypeInfo, ClassInfo]
- def info_=(i: Either[NoClassBTypeInfo, ClassInfo]): Unit
- def inlineInfoAttribute: Either[NoClassBTypeInfo, InlineInfoAttribute]
- def innerClassAttributeEntry: Either[NoClassBTypeInfo, Option[InnerClassEntry]]
- val internalName: InternalName
-
final
def
isArray: Boolean
- Definition Classes
- BType
-
final
def
isBoxed: Boolean
- Definition Classes
- BType
-
final
def
isClass: Boolean
- Definition Classes
- BType
-
final
def
isInstanceOf[T0]: Boolean
Test whether the dynamic type of the receiver object is
T0
.Test whether the dynamic type of the receiver object is
T0
.Note that the result of the test is modulo Scala's erasure semantics. Therefore the expression
1.isInstanceOf[String]
will returnfalse
, while the expressionList(1).isInstanceOf[List[String]]
will returntrue
. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the specified type.- returns
true
if the receiver object is an instance of erasure of typeT0
;false
otherwise.
- Definition Classes
- Any
-
final
def
isIntSizedType: Boolean
- Definition Classes
- BType
-
final
def
isIntegralType: Boolean
- Definition Classes
- BType
- def isInterface: Either[NoClassBTypeInfo, Boolean]
-
final
def
isMethod: Boolean
- Definition Classes
- BType
- def isNestedClass: Either[NoClassBTypeInfo, Boolean]
-
final
def
isNonVoidPrimitiveType: Boolean
- Definition Classes
- BType
-
final
def
isNothingType: Boolean
- Definition Classes
- BType
-
final
def
isNullType: Boolean
- Definition Classes
- BType
-
final
def
isNumericType: Boolean
- Definition Classes
- BType
-
final
def
isPrimitive: Boolean
- Definition Classes
- BType
- def isPublic: Either[NoClassBTypeInfo, Boolean]
-
final
def
isRealType: Boolean
- Definition Classes
- BType
-
final
def
isRef: Boolean
- Definition Classes
- BType
- def isSubtypeOf(other: ClassBType): Either[NoClassBTypeInfo, Boolean]
-
final
def
isWideType: Boolean
- Definition Classes
- BType
-
def
jvmWiseLUB(other: ClassBType): Either[NoClassBTypeInfo, ClassBType]
Finding the least upper bound in agreement with the bytecode verifier Background: http://gallium.inria.fr/~xleroy/publi/bytecode-verification-JAR.pdf http://comments.gmane.org/gmane.comp.java.vm.languages/2293 https://issues.scala-lang.org/browse/SI-3872
-
final
def
maxType(other: BType): BType
Compute the upper bound of two types.
Compute the upper bound of two types. Takes promotions of numeric primitives into account.
- Definition Classes
- BType
-
final
def
ne(arg0: AnyRef): Boolean
Equivalent to
!(this eq that)
.Equivalent to
!(this eq that)
.- returns
true
if the argument is not a reference to the receiver object;false
otherwise.
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
Wakes up a single thread that is waiting on the receiver object's monitor.
Wakes up a single thread that is waiting on the receiver object's monitor.
- Definition Classes
- AnyRef
- Note
not specified by SLS as a member of AnyRef
-
final
def
notifyAll(): Unit
Wakes up all threads that are waiting on the receiver object's monitor.
Wakes up all threads that are waiting on the receiver object's monitor.
- Definition Classes
- AnyRef
- Note
not specified by SLS as a member of AnyRef
-
def
packageInternalName: String
The prefix of the internal name until the last '/', or the empty string.
-
def
simpleName: String
- returns
The class name without the package prefix
-
final
def
size: Int
- returns
0 for void, 2 for long and double, 1 otherwise
- Definition Classes
- BType
- def superClassesTransitive: Either[NoClassBTypeInfo, List[ClassBType]]
-
final
def
synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
-
def
toASMType: Type
The asm.Type corresponding to this BType.
The asm.Type corresponding to this BType.
Note about asm.Type.getObjectType (*): For class types, the method expects the internal name, i.e. without the surrounding 'L' and ';'. For array types on the other hand, the method expects a full descriptor, for example "[Ljava/lang/String;".
See method asm.Type.getType that creates a asm.Type from a type descriptor
- for an OBJECT type, the 'L' and ';' are not part of the range of the created Type
- for an ARRAY type, the full descriptor is part of the range
- Definition Classes
- BType
-
final
def
toString(): String
Creates a String representation of this object.
-
final
def
typedOpcode(opcode: Int): Int
Some JVM opcodes have typed variants.
Some JVM opcodes have typed variants. This method returns the correct opcode according to the type.
- opcode
A JVM instruction opcode. This opcode must be one of ILOAD, ISTORE, IALOAD, IASTORE, IADD, ISUB, IMUL, IDIV, IREM, INEG, ISHL, ISHR, IUSHR, IAND, IOR IXOR and IRETURN.
- returns
The opcode adapted to this java type. For example, if this type is
float
andopcode
isIRETURN
, this method returnsFRETURN
.
- Definition Classes
- BType
-
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
- @throws( ... )
-
def
→[B](y: B): (ClassBType, B)
- Implicit
- This member is added by an implicit conversion from ClassBType to ArrowAssoc[ClassBType] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
The Scala compiler API.
The following resources are useful for Scala plugin/compiler development: