diff options
Diffstat (limited to 'src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala')
-rw-r--r-- | src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala b/src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala index 7aef87f387..e4f879560c 100644 --- a/src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala +++ b/src/compiler/scala/tools/nsc/util/AbstractFileClassLoader.scala @@ -6,6 +6,9 @@ package scala.tools.nsc package util import scala.tools.nsc.io.AbstractFile +import java.security.cert.Certificate +import java.security.{ ProtectionDomain, CodeSource } +import util.ScalaClassLoader import java.net.{ URL, URLConnection, URLStreamHandler } import scala.collection.{ mutable, immutable } @@ -82,7 +85,17 @@ class AbstractFileClassLoader(val root: AbstractFile, parent: ClassLoader) if (bytes.length == 0) throw new ClassNotFoundException(name) else - defineClass(name, bytes, 0, bytes.length) + defineClass(name, bytes, 0, bytes.length, protectionDomain) + } + + lazy val protectionDomain = { + val cl = Thread.currentThread().getContextClassLoader() + val resource = cl.getResource("scala/runtime/package.class") + if (resource == null) null else { + val s = resource.getPath + val path = s.substring(0, s.lastIndexOf('!')) + new ProtectionDomain(new CodeSource(new URL(path), null.asInstanceOf[Array[Certificate]]), null, this, null) + } } private val packages = mutable.Map[String, Package]() |