c

bloop

ScalaInstanceTopLoader

class ScalaInstanceTopLoader extends ClassLoader

The parent classloader of the Scala compiler. It was originally copied and pasted from https://github.com/lampepfl/dotty/blob/ea65338e06142f41f0e68b23250c8e22b0ba8837/sbt-dotty/src/dotty/tools/sbtplugin/DottyPlugin.scala#L586-L627

To understand why a custom parent classloader is needed for the compiler, let us describe some alternatives that wouldn't work.

- new URLClassLoader(urls): The compiler contains sbt phases that callback to sbt using the xsbti.* interfaces. If urls does not contain the sbt interfaces we'll get a ClassNotFoundException in the compiler when we try to use them, if urls does contain the interfaces we'll get a ClassCastException or a LinkageError because if the same class is loaded by two different classloaders, they are considered distinct by the JVM.

- new URLClassLoader(urls, bloopLoader): Because of the JVM delegation model, this means that we will only load a class from urls if it's not present in the parent bloopLoader, but Bloop uses its own version of the scala library which is not the one we need to run the compiler.

Our solution is to implement an URLClassLoader whose parent is new ScalaInstanceTopLoader(bloopClassLoader, bootClassLoader). We override loadClass to load the xsbti.* interfaces from the bloopClassLoader and the JDK classes from the bootClassLoader.

Linear Supertypes
ClassLoader, AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ScalaInstanceTopLoader
  2. ClassLoader
  3. AnyRef
  4. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new ScalaInstanceTopLoader(bloopClassLoader: ClassLoader, parent: ClassLoader)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def clearAssertionStatus(): Unit
    Definition Classes
    ClassLoader
  6. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
  7. final def defineClass(arg0: String, arg1: ByteBuffer, arg2: ProtectionDomain): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassFormatError])
  8. final def defineClass(arg0: String, arg1: Array[Byte], arg2: Int, arg3: Int, arg4: ProtectionDomain): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassFormatError])
  9. final def defineClass(arg0: String, arg1: Array[Byte], arg2: Int, arg3: Int): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassFormatError])
  10. def definePackage(arg0: String, arg1: String, arg2: String, arg3: String, arg4: String, arg5: String, arg6: String, arg7: URL): Package
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  11. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  12. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  13. def findClass(arg0: String, arg1: String): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  14. def findClass(arg0: String): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassNotFoundException])
  15. def findLibrary(arg0: String): String
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  16. final def findLoadedClass(arg0: String): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  17. def findResource(arg0: String): URL
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  18. def findResource(arg0: String, arg1: String): URL
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.io.IOException])
  19. def findResources(arg0: String): Enumeration[URL]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.io.IOException])
  20. final def findSystemClass(arg0: String): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassNotFoundException])
  21. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  22. def getClassLoadingLock(arg0: String): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  23. final def getDefinedPackage(arg0: String): Package
    Definition Classes
    ClassLoader
  24. final def getDefinedPackages(): Array[Package]
    Definition Classes
    ClassLoader
  25. def getName(): String
    Definition Classes
    ClassLoader
  26. def getPackages(): Array[Package]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  27. final def getParent(): ClassLoader
    Definition Classes
    ClassLoader
    Annotations
    @CallerSensitive()
  28. def getResource(arg0: String): URL
    Definition Classes
    ClassLoader
  29. def getResourceAsStream(arg0: String): InputStream
    Definition Classes
    ClassLoader
  30. def getResources(arg0: String): Enumeration[URL]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.io.IOException])
  31. final def getUnnamedModule(): Module
    Definition Classes
    ClassLoader
  32. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native() @IntrinsicCandidate()
  33. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  34. final def isRegisteredAsParallelCapable(): Boolean
    Definition Classes
    ClassLoader
  35. def loadClass(name: String, resolve: Boolean): Class[_]
    Attributes
    protected
    Definition Classes
    ScalaInstanceTopLoader → ClassLoader
  36. def loadClass(arg0: String): Class[_ <: AnyRef]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassNotFoundException])
  37. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  38. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  39. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native() @IntrinsicCandidate()
  40. final def resolveClass(arg0: Class[_ <: AnyRef]): Unit
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  41. def resources(arg0: String): Stream[URL]
    Definition Classes
    ClassLoader
  42. def setClassAssertionStatus(arg0: String, arg1: Boolean): Unit
    Definition Classes
    ClassLoader
  43. def setDefaultAssertionStatus(arg0: Boolean): Unit
    Definition Classes
    ClassLoader
  44. def setPackageAssertionStatus(arg0: String, arg1: Boolean): Unit
    Definition Classes
    ClassLoader
  45. final def setSigners(arg0: Class[_ <: AnyRef], arg1: Array[AnyRef]): Unit
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
  46. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  47. def toString(): String
    Definition Classes
    AnyRef → Any
  48. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  49. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()
  50. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])

Deprecated Value Members

  1. final def defineClass(arg0: Array[Byte], arg1: Int, arg2: Int): Class[_ <: AnyRef]
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @throws(classOf[java.lang.ClassFormatError]) @Deprecated @Deprecated
    Deprecated
  2. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable]) @Deprecated @Deprecated
    Deprecated
  3. def getPackage(arg0: String): Package
    Attributes
    protected[lang]
    Definition Classes
    ClassLoader
    Annotations
    @Deprecated @Deprecated
    Deprecated

Inherited from ClassLoader

Inherited from AnyRef

Inherited from Any

Ungrouped