@@ -21,24 +21,24 @@ import dotc.core.StdNames.str
21
21
* `Rendering` is no longer valid.
22
22
*/
23
23
private [repl] class Rendering (compiler : ReplCompiler ,
24
- private var currentClassLoader : Option [ClassLoader ] = None ) {
24
+ parentClassLoader : Option [ClassLoader ] = None ) {
25
25
26
- private def classLoader ()(implicit ctx : Context ) =
27
- currentClassLoader.getOrElse {
28
- import java .net .{URL , URLClassLoader }
26
+ private [this ] var myClassLoader : ClassLoader = _
29
27
30
- /** the compiler's classpath, as URL's */
31
- val compilerClasspath : Seq [URL ] = ctx.platform.classPath(ctx).asURLs
28
+ /** Class loader used to load compiled code */
29
+ private [this ] def classLoader ()(implicit ctx : Context ) =
30
+ if (myClassLoader != null ) myClassLoader
31
+ else {
32
+ val parent = parentClassLoader.getOrElse {
33
+ // the compiler's classpath, as URL's
34
+ val compilerClasspath = ctx.platform.classPath(ctx).asURLs
35
+ new java.net.URLClassLoader (compilerClasspath.toArray, classOf [ReplDriver ].getClassLoader)
36
+ }
32
37
33
- def parent = new URLClassLoader (compilerClasspath.toArray,
34
- classOf [ReplDriver ].getClassLoader)
35
-
36
- val newClsLoader = new AbstractFileClassLoader (compiler.directory,
37
- currentClassLoader.getOrElse(parent))
38
-
39
- Thread .currentThread.setContextClassLoader(newClsLoader)
40
- currentClassLoader = Some (newClsLoader)
41
- newClsLoader
38
+ myClassLoader = new AbstractFileClassLoader (compiler.directory, parent)
39
+ // Set the current Java "context" class loader to this rendering class loader
40
+ Thread .currentThread.setContextClassLoader(myClassLoader)
41
+ myClassLoader
42
42
}
43
43
44
44
/** Load the value of the symbol using reflection
0 commit comments