summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2013-05-17 15:34:15 -0700
committerAdriaan Moors <adriaan.moors@typesafe.com>2013-05-17 15:34:15 -0700
commit3ba3d041a8f2f27d4a2708ce9177009f33790f3d (patch)
tree8bf8abf56d0a883854824c401129118984f62489 /src/reflect
parent2a5abf7f4ca6bc5b2795381a99fd14dcb7d3aee1 (diff)
parent7f9feba0213fc210c7752ab210f900c016032699 (diff)
downloadscala-3ba3d041a8f2f27d4a2708ce9177009f33790f3d.tar.gz
scala-3ba3d041a8f2f27d4a2708ce9177009f33790f3d.tar.bz2
scala-3ba3d041a8f2f27d4a2708ce9177009f33790f3d.zip
Merge pull request #2536 from adriaanm/ticket-7359
[backport #1727] SI-7359 cyclic nested java class
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/runtime/JavaMirrors.scala17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/reflect/scala/reflect/runtime/JavaMirrors.scala b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
index ed4458c455..ccc727451c 100644
--- a/src/reflect/scala/reflect/runtime/JavaMirrors.scala
+++ b/src/reflect/scala/reflect/runtime/JavaMirrors.scala
@@ -692,7 +692,8 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
(if (jModifier.isStatic(mods)) module.moduleClass else clazz).info.decls enter sym
for (jinner <- jclazz.getDeclaredClasses) {
- enter(jclassAsScala(jinner, clazz), jinner.getModifiers)
+ jclassAsScala(jinner) // inner class is entered as a side-effect
+ // no need to call enter explicitly
}
pendingLoadActions = { () =>
@@ -1051,13 +1052,17 @@ private[reflect] trait JavaMirrors extends internal.SymbolTable with api.JavaUni
* @param jclazz The Java class
* @return A Scala class symbol that wraps all reflection info of `jclazz`
*/
- private def jclassAsScala(jclazz: jClass[_]): Symbol = jclassAsScala(jclazz, sOwner(jclazz))
+ private def jclassAsScala(jclazz: jClass[_]): Symbol = {
+ val clazz = sOwner(jclazz) // sOwner called outside of closure for binary compatibility
+ toScala(classCache, jclazz){ (mirror, jclazz) =>
+ mirror.jclassAsScala(jclazz, clazz)
+ }
+ }
private def jclassAsScala(jclazz: jClass[_], owner: Symbol): ClassSymbol = {
- val name = scalaSimpleName(jclazz)
- val completer = (clazz: Symbol, module: Symbol) => new FromJavaClassCompleter(clazz, module, jclazz)
- val (clazz, module) = createClassModule(owner, name, completer)
- classCache enter (jclazz, clazz)
+ val name = scalaSimpleName(jclazz)
+ val completer = (clazz: Symbol, module: Symbol) => new FromJavaClassCompleter(clazz, module, jclazz)
+ val (clazz, _) = createClassModule(owner, name, completer)
clazz
}