aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/NameOps.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-07-09 16:53:16 +0200
committerMartin Odersky <odersky@gmail.com>2015-07-09 16:53:16 +0200
commita1206b99253d230684823c2f22fa42f648124672 (patch)
tree08b975f9dfc79c417081398ee7cb7698838d1242 /src/dotty/tools/dotc/core/NameOps.scala
parentfc5cd47d5380d3dc2e4d32a6d9c2eec1fb7cfa4f (diff)
downloaddotty-a1206b99253d230684823c2f22fa42f648124672.tar.gz
dotty-a1206b99253d230684823c2f22fa42f648124672.tar.bz2
dotty-a1206b99253d230684823c2f22fa42f648124672.zip
New name utility method: freshened
Creates a fresh name by appending a $N suffix. Takes care of unwrapping/rewrapping module class suffixes.
Diffstat (limited to 'src/dotty/tools/dotc/core/NameOps.scala')
-rw-r--r--src/dotty/tools/dotc/core/NameOps.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dotty/tools/dotc/core/NameOps.scala b/src/dotty/tools/dotc/core/NameOps.scala
index 4d6cca61d..dc90a8d3b 100644
--- a/src/dotty/tools/dotc/core/NameOps.scala
+++ b/src/dotty/tools/dotc/core/NameOps.scala
@@ -6,7 +6,7 @@ import scala.annotation.switch
import scala.io.Codec
import Names._, StdNames._, Contexts._, Symbols._, Flags._
import Decorators.StringDecorator
-import dotty.tools.dotc.util.Chars
+import util.{Chars, NameTransformer}
import Chars.isOperatorPart
object NameOps {
@@ -59,7 +59,7 @@ object NameOps {
implicit class NameDecorator[N <: Name](val name: N) extends AnyVal {
import nme._
- def likeTyped(n: Name): N =
+ def likeTyped(n: PreName): N =
(if (name.isTermName) n.toTermName else n.toTypeName).asInstanceOf[N]
def isConstructorName = name == CONSTRUCTOR || name == TRAIT_CONSTRUCTOR
@@ -184,6 +184,11 @@ object NameOps {
def implClassName: N = likeTyped(name ++ tpnme.IMPL_CLASS_SUFFIX)
+ def freshened(implicit ctx: Context): N =
+ likeTyped(
+ if (name.isModuleClassName) name.stripModuleClassSuffix.freshened.moduleClassName
+ else likeTyped(ctx.freshName(name ++ NameTransformer.NAME_JOIN_STRING)))
+
/** Translate a name into a list of simple TypeNames and TermNames.
* In all segments before the last, type/term is determined by whether
* the following separator char is '.' or '#'. The last segment