Skip to content

Commit 08325d8

Browse files
committed
Fix #3279
When using the repl through "sbt console", we used to use the class loader sbt give us. But we need a class loader that has the output directory of the compiler on the classpath
1 parent 953a385 commit 08325d8

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

compiler/src/dotty/tools/repl/Rendering.scala

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,26 @@ import dotc.core.StdNames.str
2121
* `Rendering` is no longer valid.
2222
*/
2323
private[repl] class Rendering(compiler: ReplCompiler,
24-
private var currentClassLoader: Option[ClassLoader] = None) {
24+
parentClassLoader: Option[ClassLoader] = None) {
2525

26+
private var _classLoader: ClassLoader = _
27+
28+
/** Class loader used to load compiled code */
2629
private def classLoader()(implicit ctx: Context) =
27-
currentClassLoader.getOrElse {
30+
if (_classLoader != null) _classLoader
31+
else {
2832
import java.net.{URL, URLClassLoader}
2933

30-
/** the compiler's classpath, as URL's */
31-
val compilerClasspath: Seq[URL] = ctx.platform.classPath(ctx).asURLs
32-
33-
def parent = new URLClassLoader(compilerClasspath.toArray,
34-
classOf[ReplDriver].getClassLoader)
35-
36-
val newClsLoader = new AbstractFileClassLoader(compiler.directory,
37-
currentClassLoader.getOrElse(parent))
34+
val parent = parentClassLoader.getOrElse {
35+
// the compiler's classpath, as URL's
36+
val compilerClasspath = ctx.platform.classPath(ctx).asURLs
37+
new URLClassLoader(compilerClasspath.toArray, classOf[ReplDriver].getClassLoader)
38+
}
3839

39-
Thread.currentThread.setContextClassLoader(newClsLoader)
40-
currentClassLoader = Some(newClsLoader)
41-
newClsLoader
40+
_classLoader = new AbstractFileClassLoader(compiler.directory, parent)
41+
// Set the current Java "context" class loader to this rendering class loader
42+
Thread.currentThread.setContextClassLoader(_classLoader)
43+
_classLoader
4244
}
4345

4446
/** Load the value of the symbol using reflection

0 commit comments

Comments
 (0)