@@ -22,10 +22,30 @@ import io.AbstractFile
2222import java .net .{URL , URLConnection , URLStreamHandler }
2323import java .util .Collections
2424
25- class AbstractFileClassLoader (root : AbstractFile , parent : ClassLoader , interruptInstrumentation : String )
25+ import AbstractFileClassLoader .InterruptInstrumentation
26+
27+
28+ object AbstractFileClassLoader :
29+ enum InterruptInstrumentation (val stringValue : String ):
30+ case Disabled extends InterruptInstrumentation (" false" )
31+ case Enabled extends InterruptInstrumentation (" true" )
32+ case Local extends InterruptInstrumentation (" local" )
33+
34+ def is (value : InterruptInstrumentation ): Boolean = this == value
35+ def isOneOf (others : InterruptInstrumentation * ): Boolean = others.contains(this )
36+
37+ object InterruptInstrumentation :
38+ def fromString (string : String ): InterruptInstrumentation = string match {
39+ case " false" => Disabled
40+ case " true" => Enabled
41+ case " local" => Local
42+ case _ => throw new IllegalArgumentException (s " Invalid interrupt instrumentation value: $string" )
43+ }
44+
45+ class AbstractFileClassLoader (root : AbstractFile , parent : ClassLoader , interruptInstrumentation : InterruptInstrumentation )
2646 extends io.AbstractFileClassLoader (root, parent):
2747
28- def this (root : AbstractFile , parent : ClassLoader ) = this (root, parent, ScalaSettings .XreplInterruptInstrumentation .default)
48+ def this (root : AbstractFile , parent : ClassLoader ) = this (root, parent, InterruptInstrumentation .fromString( ScalaSettings .XreplInterruptInstrumentation .default) )
2949
3050 override def findClass (name : String ): Class [? ] = {
3151 var file : AbstractFile | Null = root
@@ -39,7 +59,7 @@ class AbstractFileClassLoader(root: AbstractFile, parent: ClassLoader, interrupt
3959
4060 val bytes = file.toByteArray
4161
42- if interruptInstrumentation != " false " then defineClassInstrumented(name, bytes)
62+ if ! interruptInstrumentation.is( InterruptInstrumentation . Enabled ) then defineClassInstrumented(name, bytes)
4363 else defineClass(name, bytes, 0 , bytes.length)
4464 }
4565
@@ -49,8 +69,8 @@ class AbstractFileClassLoader(root: AbstractFile, parent: ClassLoader, interrupt
4969 }
5070
5171 override def loadClass (name : String ): Class [? ] =
52- if interruptInstrumentation == " false " || interruptInstrumentation == " local "
53- then return super .loadClass(name)
72+ if interruptInstrumentation.isOneOf( InterruptInstrumentation . Disabled , InterruptInstrumentation . Local ) then
73+ return super .loadClass(name)
5474
5575 val loaded = findLoadedClass(name) // Check if already loaded
5676 if loaded != null then return loaded
0 commit comments