summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala23
-rw-r--r--test/files/scalap/classPrivate/A.scala9
-rw-r--r--test/files/scalap/classPrivate/result.test10
3 files changed, 38 insertions, 4 deletions
diff --git a/src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala b/src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala
index 28b3094035..43ef9d2107 100644
--- a/src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala
+++ b/src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala
@@ -95,11 +95,20 @@ class ScalaSigPrinter(stream: PrintStream, printPrivates: Boolean) {
}
def printModifiers(symbol: Symbol) {
+ // print private access modifier
+ if (symbol.isPrivate) print("private ")
+ else if (symbol.isProtected) print("protected ")
+ else symbol match {
+ case sym: SymbolInfoSymbol => sym.symbolInfo.privateWithin match {
+ case Some(t: Symbol) => print("private[" + t.name +"] ")
+ case _ =>
+ }
+ case _ =>
+ }
+
if (symbol.isSealed) print("sealed ")
if (symbol.isImplicit) print("implicit ")
if (symbol.isFinal && !symbol.isInstanceOf[ObjectSymbol]) print("final ")
- if (symbol.isPrivate) print("private ")
- else if (symbol.isProtected) print("protected ")
if (symbol.isOverride) print("override ")
if (symbol.isAbstract) symbol match {
case c@(_: ClassSymbol | _: ObjectSymbol) if !c.isTrait => print("abstract ")
@@ -398,9 +407,15 @@ class ScalaSigPrinter(stream: PrintStream, printPrivates: Boolean) {
val pattern = Pattern.compile(_syms.keysIterator.foldLeft("")((x, y) => if (x == "") y else x + "|" + y))
val placeholderPattern = "_\\$(\\d)+"
+ private def stripPrivatePrefix(name: String) = {
+ val i = name.lastIndexOf("$$")
+ if (i > 0) name.substring(i + 2) else name
+ }
+
def processName(name: String) = {
- val m = pattern.matcher(name)
- var temp = name
+ val stripped = stripPrivatePrefix(name)
+ val m = pattern.matcher(stripped)
+ var temp = stripped
while (m.find) {
val key = m.group
val re = "\\" + key
diff --git a/test/files/scalap/classPrivate/A.scala b/test/files/scalap/classPrivate/A.scala
new file mode 100644
index 0000000000..9f1bd34a6a
--- /dev/null
+++ b/test/files/scalap/classPrivate/A.scala
@@ -0,0 +1,9 @@
+class ClassPrivate {
+ private def foo = 1
+ private[ClassPrivate] def bar = 2
+ def baz = 3
+ class Outer {
+ private[ClassPrivate] def qux = 4
+ }
+ protected def quux = 5
+} \ No newline at end of file
diff --git a/test/files/scalap/classPrivate/result.test b/test/files/scalap/classPrivate/result.test
new file mode 100644
index 0000000000..0d12b779c3
--- /dev/null
+++ b/test/files/scalap/classPrivate/result.test
@@ -0,0 +1,10 @@
+class ClassPrivate extends java.lang.Object with scala.ScalaObject {
+ def this() = { /* compiled code */ }
+ def baz : scala.Int = { /* compiled code */ }
+ class Outer extends java.lang.Object with scala.ScalaObject {
+ def this() = { /* compiled code */ }
+ private[ClassPrivate] def qux : scala.Int = { /* compiled code */ }
+ }
+ protected def quux : scala.Int = { /* compiled code */ }
+ private[ClassPrivate] def bar : scala.Int = { /* compiled code */ }
+} \ No newline at end of file