@@ -458,29 +458,38 @@ object SymDenotations {
458
458
* are separated by `separator` strings as indicated by the given name kind.
459
459
* Drops package objects. Represents each term in the owner chain by a simple `_$`.
460
460
*/
461
- def fullNameSeparated (kind : QualifiedNameKind )(using Context ): Name =
462
- maybeOwner.fullNameSeparated(kind, kind, name)
461
+ def fullNameSeparated (kind : QualifiedNameKind , encodePackages : Boolean )(using Context ): Name =
462
+ val doEncodeName = encodePackages && is(PackageClass ) && ! isEffectiveRoot
463
+ maybeOwner.fullNameSeparated(kind, kind, name, doEncodeName, encodePackages)
463
464
464
465
/** The encoded full path name of this denotation (separated by `prefixKind`),
465
466
* followed by the separator implied by `kind` and the given `name`.
466
467
* Drops package objects. Represents each term in the owner chain by a simple `_$`.
467
468
*/
468
- def fullNameSeparated (prefixKind : QualifiedNameKind , kind : QualifiedNameKind , name : Name )(using Context ): Name =
469
- if (symbol == NoSymbol || isEffectiveRoot || kind == FlatName && is(PackageClass ))
470
- name
469
+ def fullNameSeparated (
470
+ prefixKind : QualifiedNameKind ,
471
+ kind : QualifiedNameKind ,
472
+ name : Name ,
473
+ doEncodeName : Boolean ,
474
+ encodePackages : Boolean
475
+ )(using Context ): Name =
476
+ if symbol == NoSymbol || isEffectiveRoot || kind == FlatName && is(PackageClass ) then {
477
+ if doEncodeName then name.encode else name
478
+ }
471
479
else {
472
480
var filler = " "
473
481
var encl = symbol
474
482
while (! encl.isClass && ! encl.isPackageObject) {
475
483
encl = encl.owner
476
484
filler += " _$"
477
485
}
478
- var prefix = encl.fullNameSeparated(prefixKind)
486
+ var prefix = encl.fullNameSeparated(prefixKind, encodePackages )
479
487
if (kind.separator == " $" )
480
488
// duplicate scalac's behavior: don't write a double '$$' for module class members.
481
489
prefix = prefix.exclude(ModuleClassName )
482
- def qualify (n : SimpleName ) =
483
- val qn = kind(prefix.toTermName, if (filler.isEmpty) n else termName(filler + n))
490
+ def qualify (n0 : SimpleName ) =
491
+ val n1 = if (filler.isEmpty) n0 else termName(filler + n0)
492
+ val qn = kind(prefix.toTermName, if doEncodeName then n1.encode else n1)
484
493
if kind == FlatName && ! encl.is(JavaDefined ) then qn.compactified else qn
485
494
val fn = name replace {
486
495
case name : SimpleName => qualify(name)
@@ -490,10 +499,12 @@ object SymDenotations {
490
499
}
491
500
492
501
/** The encoded flat name of this denotation, where joined names are separated by `separator` characters. */
493
- def flatName (using Context ): Name = fullNameSeparated(FlatName )
502
+ def flatName (using Context ): Name = fullNameSeparated(FlatName , encodePackages = false )
494
503
495
504
/** `fullName` where `.' is the separator character */
496
- def fullName (using Context ): Name = fullNameSeparated(QualifiedName )
505
+ def fullName (using Context ): Name = fullNameSeparated(QualifiedName , encodePackages = false )
506
+
507
+ def tastyCompatibleFullName (using Context ): Name = fullNameSeparated(QualifiedName , encodePackages = true )
497
508
498
509
private var myTargetName : Name = null
499
510
@@ -1701,7 +1712,7 @@ object SymDenotations {
1701
1712
// ----- caches -------------------------------------------------------
1702
1713
1703
1714
private var myTypeParams : List [TypeSymbol ] = null
1704
- private var fullNameCache : SimpleIdentityMap [QualifiedNameKind , Name ] = SimpleIdentityMap .empty
1715
+ private var fullNameCache : SimpleIdentityMap [( QualifiedNameKind , Boolean ) , Name ] = SimpleIdentityMap .empty
1705
1716
1706
1717
private var myMemberCache : EqHashMap [Name , PreDenotation ] = null
1707
1718
private var myMemberCachePeriod : Period = Nowhere
@@ -2252,19 +2263,22 @@ object SymDenotations {
2252
2263
}
2253
2264
}
2254
2265
2255
- override final def fullNameSeparated (kind : QualifiedNameKind )(using Context ): Name = {
2256
- val cached = fullNameCache(kind)
2266
+ override final def fullNameSeparated (kind : QualifiedNameKind , encodePackages : Boolean )(using Context ): Name = {
2267
+ val cached = fullNameCache(( kind, encodePackages) )
2257
2268
if (cached != null ) cached
2258
2269
else {
2259
- val fn = super .fullNameSeparated(kind)
2260
- fullNameCache = fullNameCache.updated(kind, fn)
2270
+ val fn = super .fullNameSeparated(kind, encodePackages )
2271
+ fullNameCache = fullNameCache.updated(( kind, encodePackages) , fn)
2261
2272
fn
2262
2273
}
2263
2274
}
2264
2275
2265
2276
// to avoid overloading ambiguities
2266
2277
override def fullName (using Context ): Name = super .fullName
2267
2278
2279
+ // to avoid overloading ambiguities
2280
+ override def tastyCompatibleFullName (using Context ): Name = super .tastyCompatibleFullName
2281
+
2268
2282
override def primaryConstructor (using Context ): Symbol = {
2269
2283
def constrNamed (cname : TermName ) = info.decls.denotsNamed(cname).last.symbol
2270
2284
// denotsNamed returns Symbols in reverse order of occurrence
0 commit comments