@@ -14,8 +14,8 @@ import collection.mutable
1414object NameKinds {
1515
1616 @ sharable private val simpleNameKinds = new mutable.HashMap [Int , ClassifiedNameKind ]
17+ @ sharable private val qualifiedNameKinds = new mutable.HashMap [Int , QualifiedNameKind ]
1718 @ sharable private val uniqueNameKinds = new mutable.HashMap [String , UniqueNameKind ]
18- @ sharable private val qualifiedNameKinds = new mutable.HashMap [String , QualifiedNameKind ]
1919
2020 abstract class NameInfo extends DotClass {
2121 def kind : NameKind
@@ -83,8 +83,18 @@ object NameKinds {
8383 override def map (f : SimpleTermName => SimpleTermName ): NameInfo = new QualInfo (f(name))
8484 override def toString = s " $infoString $name"
8585 }
86- def apply (qual : TermName , name : SimpleTermName ) =
86+ def apply (qual : TermName , name : SimpleTermName ): TermName =
8787 qual.derived(new QualInfo (name))
88+
89+ /** Overloaded version used only for ExpandedName and TraitSetterName.
90+ * Needed because the suffix of an expanded name may itself be expanded.
91+ * For example, look at javap of scala.App.initCode
92+ */
93+ def apply (qual : TermName , name : TermName ): TermName = name rewrite {
94+ case name : SimpleTermName => apply(qual, name)
95+ case AnyQualifiedName (_, _) => apply(qual, name.toSimpleName)
96+ }
97+
8898 def unapply (name : DerivedTermName ): Option [(TermName , SimpleTermName )] = name match {
8999 case DerivedTermName (qual, info : this .QualInfo ) => Some ((qual, info.name))
90100 case _ => None
@@ -96,7 +106,7 @@ object NameKinds {
96106 s " $underlying$separator${info.name}"
97107 def infoString = s " Qualified $separator"
98108
99- qualifiedNameKinds(separator ) = this
109+ qualifiedNameKinds(tag ) = this
100110 }
101111
102112 object AnyQualifiedName {
@@ -150,8 +160,8 @@ object NameKinds {
150160 }
151161
152162 val QualifiedName = new QualifiedNameKind (QUALIFIED , " ." )
153- val FlattenedName = new QualifiedNameKind (FLATTENED , " $" )
154- val TraitSetterName = new QualifiedNameKind (TRAITSETTER , str. TRAIT_SETTER_SEPARATOR )
163+ val FlatName = new QualifiedNameKind (FLATTENED , " $" )
164+ val ExpandPrefixName = new QualifiedNameKind (EXPANDPREFIX , " $ " )
155165
156166 val ExpandedName = new QualifiedNameKind (EXPANDED , str.EXPAND_SEPARATOR ) {
157167 private val FalseSuper = " $$super" .toTermName
@@ -172,6 +182,8 @@ object NameKinds {
172182 }
173183 }
174184
185+ val TraitSetterName = new QualifiedNameKind (TRAITSETTER , str.TRAIT_SETTER_SEPARATOR )
186+
175187 val UniqueName = new UniqueNameKind (" $" ) {
176188 override def mkString (underlying : TermName , info : ThisInfo ) =
177189 if (underlying.isEmpty) " $" + info.num + " $" else super .mkString(underlying, info)
@@ -260,7 +272,7 @@ object NameKinds {
260272 val Scala2MethodNameKinds : List [NameKind ] =
261273 List (DefaultGetterName , ProtectedAccessorName , ProtectedSetterName )
262274
263- def simpleNameKindOfTag : collection.Map [Int , ClassifiedNameKind ] = simpleNameKinds
264- def qualifiedNameKindOfSeparator : collection.Map [String , QualifiedNameKind ] = qualifiedNameKinds
265- def uniqueNameKindOfSeparator : collection.Map [String , UniqueNameKind ] = uniqueNameKinds
275+ def simpleNameKindOfTag : collection.Map [Int , ClassifiedNameKind ] = simpleNameKinds
276+ def qualifiedNameKindOfTag : collection.Map [Int , QualifiedNameKind ] = qualifiedNameKinds
277+ def uniqueNameKindOfSeparator : collection.Map [String , UniqueNameKind ] = uniqueNameKinds
266278}
0 commit comments