From 36799fa531cc9d1fcab8c2652b0b9b1aa0b6b56a Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Sun, 21 Jun 2020 19:08:34 +0200 Subject: [PATCH] Fox #9207: Properly erase self type of classes --- compiler/src/dotty/tools/dotc/core/TypeErasure.scala | 3 ++- tests/pos/i9207.scala | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 tests/pos/i9207.scala diff --git a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala index 5eaf99776135..41b0ff272759 100644 --- a/compiler/src/dotty/tools/dotc/core/TypeErasure.scala +++ b/compiler/src/dotty/tools/dotc/core/TypeErasure.scala @@ -499,7 +499,8 @@ class TypeErasure(isJava: Boolean, semiEraseVCs: Boolean, isConstructor: Boolean case nil => nil } val erasedDecls = decls.filteredScope(sym => !sym.isType || sym.isClass) - tp.derivedClassInfo(NoPrefix, erasedParents, erasedDecls, erasedRef(tp.selfType)) + val selfType1 = if cls.is(Module) then cls.sourceModule.termRef else NoType + tp.derivedClassInfo(NoPrefix, erasedParents, erasedDecls, selfType1) // can't replace selftype by NoType because this would lose the sourceModule link } case _: ErrorType | JavaArrayType(_) => diff --git a/tests/pos/i9207.scala b/tests/pos/i9207.scala new file mode 100644 index 000000000000..90260be507c7 --- /dev/null +++ b/tests/pos/i9207.scala @@ -0,0 +1,9 @@ +class Child +class HelloTest { + def simpleTest(): Unit = { + trait Parent { + this: Child => + final def bar: Int = bar + } + } +}