From 37b13526293295622e18641fc7dbca881f4fff25 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Tue, 10 Jan 2017 23:46:55 +0100 Subject: [PATCH] Fix emission of outer name in InnerClass entries Commit 3d66b0dc contains the following change: - val outerNameModule = if (isTopLevelModuleClass(innerClassSym.rawowner)) outerName.dropModule + val outerNameModule = if (innerClassSym.isTopLevelModuleClass) outerName.dropModule It looks like the `.rawowner` got accidentally dropped. The result is that for the given code: object Outer { class Inner } The ClassEntry for Inner has outer name "Outer$" instead of "Outer", this prevents referencing "Outer.Inner" from Java code. --- .../scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala index 7b9de5582c0d..504be4bc7064 100644 --- a/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala +++ b/src/compiler/scala/tools/nsc/backend/jvm/BTypesFromSymbols.scala @@ -163,7 +163,7 @@ class BTypesFromSymbols[I <: BackendInterface](val int: I) extends BTypes { } else { val outerName = innerClassSym.rawowner.javaBinaryName // Java compatibility. See the big comment in BTypes that summarizes the InnerClass spec. - val outerNameModule = if (innerClassSym.isTopLevelModuleClass) outerName.dropModule + val outerNameModule = if (innerClassSym.rawowner.isTopLevelModuleClass) outerName.dropModule else outerName Some(outerNameModule.toString) }