diff options
author | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-08-06 06:40:44 -0700 |
---|---|---|
committer | Josh Suereth <Joshua.Suereth@gmail.com> | 2012-08-06 06:40:44 -0700 |
commit | ba402c457aecf7d94038534775b7b063d7d5bd9e (patch) | |
tree | ee45e6ca9b9dac6eb4e8b014e667dea6a0ca246b /src | |
parent | a05a68a9894f78fc8d7423c722e516a7ee49d559 (diff) | |
parent | ce4bcb536279d97617f85da3f66b5296c6ee2b96 (diff) | |
download | scala-ba402c457aecf7d94038534775b7b063d7d5bd9e.tar.gz scala-ba402c457aecf7d94038534775b7b063d7d5bd9e.tar.bz2 scala-ba402c457aecf7d94038534775b7b063d7d5bd9e.zip |
Merge pull request #1045 from scalamacros/ticket/6175
SI-6175 reflect over classes with symbolic names
Diffstat (limited to 'src')
-rw-r--r-- | src/reflect/scala/reflect/runtime/JavaMirrors.scala | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala index 64c47a5502..5eb7770de6 100644 --- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala +++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala @@ -777,7 +777,16 @@ trait JavaMirrors extends internal.SymbolTable with api.JavaUniverse { self: Sym lookupClass else if (jclazz.isLocalClass0 || isInvalidClassName(jname)) // local classes and implementation classes not preserved by unpickling - treat as Java - jclassAsScala(jclazz) + // + // upd. but only if they cannot be loaded as top-level classes + // otherwise we may mistake mangled symbolic names for mangled nested names + // + // in case when a Java binary name can be treated both as a top-level class and as a nested class + // (as described in http://groups.google.com/group/scala-internals/browse_thread/thread/10855403bbf04298) + // we check for a top-level class first + // this is totally correct, because a top-level class and a nested class with the same name cannot coexist + // so it's either one or another, but not both - therefore we always load $-bearing classes correctly + lookupClass orElse jclassAsScala(jclazz) else if (jclazz.isArray) ArrayClass else |