Packages

c

scala.tools.nsc.backend.jvm.opt

ByteCodeRepository

abstract class ByteCodeRepository extends PerRunInit

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
Linear Supertypes
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ByteCodeRepository
  2. PerRunInit
  3. AnyRef
  4. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ByteCodeRepository()

Abstract Value Members

  1. abstract val postProcessor: PostProcessor

Concrete Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. def +(other: String): String
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to any2stringadd[ByteCodeRepository] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (ByteCodeRepository, B)
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to ArrowAssoc[ByteCodeRepository] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  6. def add(classNode: ClassNode, sourceFilePath: Option[String]): Unit
  7. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  8. 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.

  9. 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.

  10. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  11. 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.

  12. def ensuring(cond: (ByteCodeRepository) ⇒ Boolean, msg: ⇒ Any): ByteCodeRepository
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to Ensuring[ByteCodeRepository] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  13. def ensuring(cond: (ByteCodeRepository) ⇒ Boolean): ByteCodeRepository
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to Ensuring[ByteCodeRepository] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  14. def ensuring(cond: Boolean, msg: ⇒ Any): ByteCodeRepository
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to Ensuring[ByteCodeRepository] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  15. def ensuring(cond: Boolean): ByteCodeRepository
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to Ensuring[ByteCodeRepository] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  16. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  17. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  18. def fieldNode(classInternalName: InternalName, name: String, descriptor: String): Either[FieldNotFound, (FieldNode, InternalName)]

    The field node for a field matching name and descriptor, accessed in class classInternalName.

    The field node for a field matching name and descriptor, accessed in class classInternalName. 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

  19. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  20. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  21. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  22. def initialize(): Unit
    Definition Classes
    PerRunInit
  23. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  24. def methodNode(ownerInternalNameOrArrayDescriptor: String, name: String, descriptor: String): Either[MethodNotFound, (MethodNode, InternalName)]

    The method node for a method matching name and descriptor, accessed in class ownerInternalNameOrArrayDescriptor.

    The method node for a method matching name and descriptor, accessed in class ownerInternalNameOrArrayDescriptor. 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 reference B.m may resolve to A.m, if class B doesn't specify a matching method m, but the parent A 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 and invokeExact in class MethodHandles).

    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.

  25. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  26. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  27. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  28. val parsedClasses: Map[InternalName, Either[ClassNotFound, ClassNode]]

    Cache for parsed ClassNodes, an LRU or size maxCacheSize 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.

    Cache for parsed ClassNodes, an LRU or size maxCacheSize 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. Note - although this is typed a mutable.Map, individual simple get and put operations are threadsafe as the underlying data structure is synchronized.

  29. def perRunInit(init: ⇒ Unit): Unit
    Definition Classes
    PerRunInit
  30. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  31. def toString(): String
    Definition Classes
    AnyRef → Any
  32. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  33. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  35. def [B](y: B): (ByteCodeRepository, B)
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to ArrowAssoc[ByteCodeRepository] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Deprecated Value Members

  1. def formatted(fmtstr: String): String
    Implicit
    This member is added by an implicit conversion from ByteCodeRepository to StringFormat[ByteCodeRepository] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @deprecated @inline()
    Deprecated

    (Since version 2.12.16) Use formatString.format(value) instead of value.formatted(formatString), or use the f"" string interpolator. In Java 15 and later, formatted resolves to the new method in String which has reversed parameters.

Inherited from PerRunInit

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from ByteCodeRepository to any2stringadd[ByteCodeRepository]

Inherited by implicit conversion StringFormat from ByteCodeRepository to StringFormat[ByteCodeRepository]

Inherited by implicit conversion Ensuring from ByteCodeRepository to Ensuring[ByteCodeRepository]

Inherited by implicit conversion ArrowAssoc from ByteCodeRepository to ArrowAssoc[ByteCodeRepository]

Ungrouped