sealed abstract class ClassBType extends RefBType
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 (scala/bug#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
- RefBType
- BType
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- Protected
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- def +(other: String): String
- Implicit
- This member is added by an implicit conversion from ClassBType toany2stringadd[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 toArrowAssoc[ClassBType] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def asArrayBType: ArrayBType
- Definition Classes
- BType
- def asClassBType: ClassBType
- Definition Classes
- BType
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- 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
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
- 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 toEnsuring[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 toEnsuring[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 toEnsuring[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 toEnsuring[ClassBType] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable])
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
- def info: Either[NoClassBTypeInfo, ClassInfo]
- 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
- 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: https://xavierleroy.org/publi/bytecode-verification-JAR.pdf http://comments.gmane.org/gmane.comp.java.vm.languages/2293 https://github.com/scala/bug/issues/3872#issuecomment-292386375
- 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
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
- def packageInternalName: String
The prefix of the internal name until the last '/', or the empty string.
- final def size: Int
- returns
0 for void, 2 for long and double, 1 otherwise
- Definition Classes
- BType
- def superClassesChain: Either[NoClassBTypeInfo, List[ClassBType]]
The super class chain of this type, starting with Object, ending with
this
. - final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- val 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
- ClassBType → BType
- def toString(): String
- Definition Classes
- ClassBType → BType → AnyRef → Any
- 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(classOf[java.lang.InterruptedException])
- 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]) @native()
Deprecated Value Members
- def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from ClassBType toStringFormat[ClassBType] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @deprecated @inline()
- Deprecated
(Since version 2.12.16) Use
formatString.format(value)
instead ofvalue.formatted(formatString)
, or use thef""
string interpolator. In Java 15 and later,formatted
resolves to the new method in String which has reversed parameters.
- def →[B](y: B): (ClassBType, B)
- Implicit
- This member is added by an implicit conversion from ClassBType toArrowAssoc[ClassBType] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @deprecated
- Deprecated
(Since version 2.13.0) Use
->
instead. If you still wish to display it as one character, consider using a font with programming ligatures such as Fira Code.
The Scala compiler and reflection APIs.