diff options
author | ilyas <ilyas@epfl.ch> | 2010-03-02 01:02:55 +0000 |
---|---|---|
committer | ilyas <ilyas@epfl.ch> | 2010-03-02 01:02:55 +0000 |
commit | dc9bb2630601b49d5cee326566854b96a61b412b (patch) | |
tree | 8e1399140f786dda30eb139eb8022d06497bcaed | |
parent | dae85e321aaf121d83e2b3824e47ab7c525ed2cd (diff) | |
download | scala-dc9bb2630601b49d5cee326566854b96a61b412b.tar.gz scala-dc9bb2630601b49d5cee326566854b96a61b412b.tar.bz2 scala-dc9bb2630601b49d5cee326566854b96a61b412b.zip |
#3128 fixed
-rw-r--r-- | src/scalap/scala/tools/scalap/scalax/rules/scalasig/ScalaSigPrinter.scala | 23 | ||||
-rw-r--r-- | test/files/scalap/classPrivate/A.scala | 9 | ||||
-rw-r--r-- | test/files/scalap/classPrivate/result.test | 10 |
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 |