Skip to content

Commit 89e8970

Browse files
committed
Fix #348 flatten short name shouldn't include package names
1 parent f2a9a7a commit 89e8970

File tree

3 files changed

+17
-2
lines changed

3 files changed

+17
-2
lines changed

src/dotty/tools/dotc/core/SymDenotations.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,21 @@ object SymDenotations {
292292
if (isType) fn.toTypeName else fn.toTermName
293293
}
294294

295+
296+
/** The encoded flat name of this denotation, where joined names are separated by `separator` characters. */
297+
def flatName(separator: Char = '$')(implicit ctx: Context): Name =
298+
if (symbol == NoSymbol || owner == NoSymbol || owner.isEffectiveRoot || (owner is PackageClass)) name
299+
else {
300+
var owner = this
301+
var sep = ""
302+
do {
303+
owner = owner.owner
304+
sep += separator
305+
} while (!owner.isClass && !owner.isPackageObject)
306+
val fn = owner.flatName(separator) ++ sep ++ name
307+
if (isType) fn.toTypeName else fn.toTermName
308+
}
309+
295310
/** `fullName` where `.' is the separator character */
296311
def fullName(implicit ctx: Context): Name = fullNameSeparated('.')
297312

src/dotty/tools/dotc/transform/Flatten.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Flatten extends MiniPhaseTransform with SymTransformer { thisTransform =>
1919
def transformSym(ref: SymDenotation)(implicit ctx: Context) = {
2020
if (ref.isClass && !ref.is(Package) && !ref.owner.is(Package)) {
2121
ref.copySymDenotation(
22-
name = ref.flatName,
22+
name = ref.flatName(),
2323
owner = ref.enclosingPackageClass)
2424
}
2525
else ref

src/dotty/tools/dotc/transform/SymUtils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class SymUtils(val self: Symbol) extends AnyVal {
9393
self.owner.info.decl(self.asTerm.name.fieldName).suchThat(!_.is(Method)).symbol
9494

9595
/** `fullName` where `$' is the separator character */
96-
def flatName(implicit ctx: Context): Name = self.fullNameSeparated('$')
96+
def flatName(implicit ctx: Context): Name = self.flatName('$')
9797

9898
def initializer(implicit ctx: Context): TermSymbol =
9999
self.owner.info.decl(InitializerName(self.asTerm.name)).symbol.asTerm

0 commit comments

Comments
 (0)