From 03e411975aa923d3594453e0771266103cea207e Mon Sep 17 00:00:00 2001 From: jvican Date: Fri, 13 Oct 2017 15:52:07 +0200 Subject: [PATCH 1/2] Add pending test case for issue/127 --- zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala | 3 +++ zinc/src/sbt-test/source-dependencies/issue-127/pending | 1 + 2 files changed, 4 insertions(+) create mode 100644 zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala create mode 100644 zinc/src/sbt-test/source-dependencies/issue-127/pending diff --git a/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala b/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala new file mode 100644 index 0000000000..814f4a1ce0 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala @@ -0,0 +1,3 @@ +class Foo { + private[Foo] object Bar +} \ No newline at end of file diff --git a/zinc/src/sbt-test/source-dependencies/issue-127/pending b/zinc/src/sbt-test/source-dependencies/issue-127/pending new file mode 100644 index 0000000000..73a68203f3 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/issue-127/pending @@ -0,0 +1 @@ +> compile \ No newline at end of file From 6dc758683cbb03f2cf43dff53dc3e50c1c118252 Mon Sep 17 00:00:00 2001 From: jvican Date: Fri, 13 Oct 2017 17:16:31 +0200 Subject: [PATCH 2/2] Fix #127: Use `unexpanded` name instead of `name` It looks like scalac encodes access rights of objects in their names. To make sure that we get the right simple names, we need to use `unexpandedName` instead of `name` which will decipher these access rights and return their simple names insted (with all the previous `$$` prefixes stripped out). --- .../src/main/scala/xsbt/ClassName.scala | 8 ++++++-- .../source-dependencies/issue-127/Foo.scala | 3 --- .../source-dependencies/issue-127/pending | 1 - .../unexpanded-names/Foo.scala | 19 +++++++++++++++++++ .../source-dependencies/unexpanded-names/test | 2 ++ 5 files changed, 27 insertions(+), 6 deletions(-) delete mode 100644 zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala delete mode 100644 zinc/src/sbt-test/source-dependencies/issue-127/pending create mode 100644 zinc/src/sbt-test/source-dependencies/unexpanded-names/Foo.scala create mode 100644 zinc/src/sbt-test/source-dependencies/unexpanded-names/test diff --git a/internal/compiler-bridge/src/main/scala/xsbt/ClassName.scala b/internal/compiler-bridge/src/main/scala/xsbt/ClassName.scala index ec32db1927..b81e91c1d1 100644 --- a/internal/compiler-bridge/src/main/scala/xsbt/ClassName.scala +++ b/internal/compiler-bridge/src/main/scala/xsbt/ClassName.scala @@ -68,15 +68,19 @@ trait ClassName extends Compat { * * If `s` represents a package object `pkg3`, then the returned name will be `pkg1.pkg2.pkg3.package`. * If `s` represents a class `Foo` nested in package object `pkg3` then the returned name is `pkg1.pkg2.pk3.Foo`. + * + * Note that some objects with special access rights are encoded in names + * (like qualified privates `private[qualifier]`). In order to get the right + * original names, we need to use `unexpandedName`. */ protected def classNameAsSeenIn(in: Symbol, s: Symbol): String = enteringPhase(currentRun.picklerPhase.next) { if (in.isRoot || in.isRootPackage || in == NoSymbol || in.isEffectiveRoot) s.simpleName.toString else if (in.isPackageObjectOrClass) - in.owner.fullName + "." + s.name + in.owner.fullName + "." + s.unexpandedName else - in.fullName + "." + s.name + in.fullName + "." + s.unexpandedName } private def pickledName(s: Symbol): Name = diff --git a/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala b/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala deleted file mode 100644 index 814f4a1ce0..0000000000 --- a/zinc/src/sbt-test/source-dependencies/issue-127/Foo.scala +++ /dev/null @@ -1,3 +0,0 @@ -class Foo { - private[Foo] object Bar -} \ No newline at end of file diff --git a/zinc/src/sbt-test/source-dependencies/issue-127/pending b/zinc/src/sbt-test/source-dependencies/issue-127/pending deleted file mode 100644 index 73a68203f3..0000000000 --- a/zinc/src/sbt-test/source-dependencies/issue-127/pending +++ /dev/null @@ -1 +0,0 @@ -> compile \ No newline at end of file diff --git a/zinc/src/sbt-test/source-dependencies/unexpanded-names/Foo.scala b/zinc/src/sbt-test/source-dependencies/unexpanded-names/Foo.scala new file mode 100644 index 0000000000..1b99e3e20e --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/unexpanded-names/Foo.scala @@ -0,0 +1,19 @@ +class Fooo { + // This one is problematic because of expanded names + private[Fooo] object Bar +} + +package issue127 { + class Foo { + private[Foo] object Bar + class Baz { + private[Baz] object Bazz + } + } + + object Foo { + private[issue127] class Bippy + // This one is problematic because of expanded names + private[issue127] object Bippy + } +} diff --git a/zinc/src/sbt-test/source-dependencies/unexpanded-names/test b/zinc/src/sbt-test/source-dependencies/unexpanded-names/test new file mode 100644 index 0000000000..e3d1046bf1 --- /dev/null +++ b/zinc/src/sbt-test/source-dependencies/unexpanded-names/test @@ -0,0 +1,2 @@ +# See https://github.com/sbt/zinc/issues/127 +> compile \ No newline at end of file