From dc9bb2630601b49d5cee326566854b96a61b412b Mon Sep 17 00:00:00 2001 From: ilyas Date: Tue, 2 Mar 2010 01:02:55 +0000 Subject: #3128 fixed --- .../scalax/rules/scalasig/ScalaSigPrinter.scala | 23 ++++++++++++++++++---- test/files/scalap/classPrivate/A.scala | 9 +++++++++ test/files/scalap/classPrivate/result.test | 10 ++++++++++ 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 test/files/scalap/classPrivate/A.scala create mode 100644 test/files/scalap/classPrivate/result.test 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 -- cgit v1.2.3