diff options
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/NameExtractors.scala')
-rw-r--r-- | compiler/src/dotty/tools/dotc/core/NameExtractors.scala | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala index eaac30bf5..f84ee565d 100644 --- a/compiler/src/dotty/tools/dotc/core/NameExtractors.scala +++ b/compiler/src/dotty/tools/dotc/core/NameExtractors.scala @@ -7,9 +7,12 @@ import StdNames._ import util.DotClass import tasty.TastyFormat._ import Decorators._ +import collection.mutable object NameExtractors { + private val extractors = new mutable.HashMap[Int, ClassifiedNameExtractor] + abstract class NameInfo extends DotClass { def tag: Int def mkString(underlying: TermName): String @@ -41,6 +44,7 @@ object NameExtractors { case DerivedTermName(underlying, `info`) => Some(underlying) case _ => None } + extractors(tag) = this } class PrefixNameExtractor(tag: Int, prefix: String, infoString: String) extends ClassifiedNameExtractor(tag, infoString) { @@ -73,8 +77,8 @@ object NameExtractors { } object AnyQualifiedName { - def unapply(name: DerivedTermName): Option[(TermName, QualifiedNameExtractor # QualInfo)] = name match { - case DerivedTermName(qual, info: QualifiedNameExtractor # QualInfo) => + def unapply(name: DerivedTermName): Option[(TermName, QualifiedInfo)] = name match { + case DerivedTermName(qual, info: QualifiedInfo) => Some((name.underlying, info)) case _ => None } @@ -143,6 +147,8 @@ object NameExtractors { def definesNewName(tag: Int) = tag <= TraitSetterName.tag + def extractorOfTag(tag: Int) = extractors(tag) + val separatorToQualified: Map[String, QualifiedNameExtractor] = Map("." -> QualifiedName, "$" -> FlattenedName, |