diff options
author | Paul Phillips <paulp@improving.org> | 2012-11-03 09:20:09 -0700 |
---|---|---|
committer | Paul Phillips <paulp@improving.org> | 2012-11-09 16:44:53 -0700 |
commit | 2a1d0202f1b7f59f6312263b7a80ea750657296d (patch) | |
tree | aa8954fc21cb91e739737cf79d7ce94d517d5f87 /src/reflect/scala/reflect/runtime/JavaMirrors.scala | |
parent | 4e325dafae514312633bc0a0f2c0ed47e3113d80 (diff) | |
download | scala-2a1d0202f1b7f59f6312263b7a80ea750657296d.tar.gz scala-2a1d0202f1b7f59f6312263b7a80ea750657296d.tar.bz2 scala-2a1d0202f1b7f59f6312263b7a80ea750657296d.zip |
Hardened JavaMirrors against linkage errors.
After running into a ClassCircularityError and following it
back to this, I simplified the method to route all linkage
errors the same way. And added logging.
Diffstat (limited to 'src/reflect/scala/reflect/runtime/JavaMirrors.scala')
-rw-r--r-- | src/reflect/scala/reflect/runtime/JavaMirrors.scala | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala index 0cfb3fd623..44fbd55162 100644 --- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala +++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala @@ -496,13 +496,10 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni Class.forName(path, true, classLoader) /** Does `path` correspond to a Java class with that fully qualified name in the current class loader? */ - def tryJavaClass(path: String): Option[jClass[_]] = - try { - Some(javaClass(path)) - } catch { - case (_: ClassNotFoundException) | (_: NoClassDefFoundError) | (_: IncompatibleClassChangeError) => - None - } + def tryJavaClass(path: String): Option[jClass[_]] = ( + try Some(javaClass(path)) + catch { case ex @ (_: LinkageError | _: ClassNotFoundException) => None } // TODO - log + ) /** The mirror that corresponds to the classloader that original defined the given Java class */ def mirrorDefining(jclazz: jClass[_]): JavaMirror = { |