class ByteCodeRepository[BT <: BTypes] extends AnyRef
The ByteCodeRepository provides utilities to read the bytecode of classfiles from the compilation
classpath. Parsed classes are cached in the classes
map.
- Source
- ByteCodeRepository.scala
- Alphabetic
- By Inheritance
- ByteCodeRepository
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
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 ByteCodeRepository[BT] to any2stringadd[ByteCodeRepository[BT]] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
-
def
->[B](y: B): (ByteCodeRepository[BT], B)
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to ArrowAssoc[ByteCodeRepository[BT]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
-
final
def
==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- def add(classNode: ClassNode, sourceFilePath: Option[String]): Unit
-
final
def
asInstanceOf[T0]: T0
- Definition Classes
- Any
- val btypes: BT
-
def
classNode(internalName: InternalName): Either[ClassNotFound, ClassNode]
The class node for an internal name.
The class node for an internal name. If the class node is not yet available, it is parsed from the classfile on the compile classpath.
-
def
classNodeAndSourceFilePath(internalName: InternalName): Either[ClassNotFound, (ClassNode, Option[String])]
The class node and source file path (if the class is being compiled) for an internal name.
The class node and source file path (if the class is being compiled) for an internal name. If the class node is not yet available, it is parsed from the classfile on the compile classpath.
- val classPath: ClassPath
-
def
clone(): AnyRef
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
-
val
compilingClasses: Map[InternalName, (ClassNode, String)]
Contains ClassNodes and the canonical path of the source file path of classes being compiled in the current compilation run.
-
def
ensuring(cond: (ByteCodeRepository[BT]) ⇒ Boolean, msg: ⇒ Any): ByteCodeRepository[BT]
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: (ByteCodeRepository[BT]) ⇒ Boolean): ByteCodeRepository[BT]
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean, msg: ⇒ Any): ByteCodeRepository[BT]
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
def
ensuring(cond: Boolean): ByteCodeRepository[BT]
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to Ensuring[ByteCodeRepository[BT]] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
-
final
def
eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
def
equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
-
def
fieldNode(classInternalName: InternalName, name: String, descriptor: String): Either[FieldNotFound, (FieldNode, InternalName)]
The field node for a field matching
name
anddescriptor
, accessed in classclassInternalName
.The field node for a field matching
name
anddescriptor
, accessed in classclassInternalName
. The declaration of the field may be in one of the superclasses.- returns
The FieldNode of the requested field and the InternalName of its declaring class, or an error message if the field could not be found
-
def
finalize(): Unit
- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
-
def
formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to StringFormat[ByteCodeRepository[BT]] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
-
final
def
getClass(): Class[_]
- Definition Classes
- AnyRef → Any
-
def
hashCode(): Int
- Definition Classes
- AnyRef → Any
-
final
def
isInstanceOf[T0]: Boolean
- Definition Classes
- Any
-
def
methodNode(ownerInternalNameOrArrayDescriptor: String, name: String, descriptor: String): Either[MethodNotFound, (MethodNode, InternalName)]
The method node for a method matching
name
anddescriptor
, accessed in classownerInternalNameOrArrayDescriptor
.The method node for a method matching
name
anddescriptor
, accessed in classownerInternalNameOrArrayDescriptor
. The declaration of the method may be in one of the parents.Note that the JVM spec performs method lookup in two steps: resolution and selection.
Method resolution, defined in jvms-5.4.3.3 and jvms-5.4.3.4, is the first step and is identical for all invocation styles (virtual, interface, special, static). If C is the receiver class in the invocation instruction: 1 find a matching method (name and descriptor) in C 2 then in C's superclasses 3 then find the maximally-specific matching superinterface methods, succeed if there's a single non-abstract one. static and private methods in superinterfaces are not considered. 4 then pick a random non-static, non-private superinterface method. 5 then fail.
Note that for an
invokestatic
instruction, a method referenceB.m
may resolve toA.m
, if classB
doesn't specify a matching methodm
, but the parentA
does.Selection depends on the invocation style and is defined in jvms-6.5.
- invokestatic: invokes the resolved method
- invokevirtual / invokeinterface: searches for an override of the resolved method starting at the dynamic receiver type. the search procedure is basically the same as in resolution, but it fails at 4 instead of picking a superinterface method at random.
- invokespecial: if C is the receiver in the invocation instruction, searches for an override
of the resolved method starting at
- the superclass of the current class, if C is a superclass of the current class
- C otherwise again, the search procedure is the same.
In the method here we implement method *resolution*. Whether or not the returned method is actually invoked at runtime depends on the invocation instruction and the class hierarchy, so the users (e.g. the inliner) have to be aware of method selection.
Note that the returned method may be abstract (ACC_ABSTRACT), native (ACC_NATIVE) or signature polymorphic (methods
invoke
andinvokeExact
in classMehtodHandles
).- returns
The MethodNode of the requested method and the InternalName of its declaring class, or an error message if the method could not be found. An error message is also returned if method resolution results in multiple default methods.
-
final
def
ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
-
final
def
notify(): Unit
- Definition Classes
- AnyRef
-
final
def
notifyAll(): Unit
- Definition Classes
- AnyRef
-
val
parsedClasses: Map[InternalName, Either[ClassNotFound, (ClassNode, Long)]]
Cache for parsed ClassNodes.
Cache for parsed ClassNodes. The
Long
field encodes the age of the node in the map, which allows removing old entries when the map grows too large (see limitCacheSize). For Java classes in mixed compilation, the map contains an error message: no ClassNode is generated by the backend and also no classfile that could be parsed. -
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
- @throws( ... )
-
def
→[B](y: B): (ByteCodeRepository[BT], B)
- Implicit
- This member is added by an implicit conversion from ByteCodeRepository[BT] to ArrowAssoc[ByteCodeRepository[BT]] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
The Scala compiler and reflection APIs.