Skip to content

Commit 674e6bb

Browse files
committed
Fix to trait setter generation
The logic to add trait setters to Scala 2 traits was wrong. This led to AbstractMethodErrors in the formerly commented out part of scala-trait.scala.
1 parent 6ca52b0 commit 674e6bb

File tree

2 files changed

+7
-10
lines changed

2 files changed

+7
-10
lines changed

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

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,13 @@ class AugmentScala2Traits extends MiniPhaseTransform with IdentityDenotTransform
6969
info = fullyParameterizedType(mold.info, mixin))
7070
}
7171

72-
def traitSetter(getter: TermSymbol) = {
73-
val separator = if (getter.is(Private)) nme.EXPAND_SEPARATOR else nme.TRAIT_SETTER_SEPARATOR
74-
val expandedGetterName =
75-
if (getter.is(ExpandedName)) getter.name
76-
else getter.name.expandedName(getter.owner, separator)
72+
def traitSetter(getter: TermSymbol) =
7773
getter.copy(
78-
name = expandedGetterName.setterName,
74+
name = getter.ensureNotPrivate.name
75+
.expandedName(getter.owner, nme.TRAIT_SETTER_SEPARATOR)
76+
.asTermName.setterName,
7977
flags = Method | Accessor | ExpandedName,
8078
info = MethodType(getter.info.resultType :: Nil, defn.UnitType))
81-
}
8279

8380
for (sym <- mixin.info.decls) {
8481
if (needsForwarder(sym) || sym.isConstructor || sym.isGetter && sym.is(Lazy))

tests/pos/scala2traits/scala-trait.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ trait T {
99
trait S2T {
1010
var x: Int = 0
1111
lazy val y: Int = 1
12-
// val z: Int = 2
12+
val z: Int = 2
1313
val a: Int
1414
var b: Int
1515

@@ -19,13 +19,13 @@ trait S2T {
1919
trait S2Tprivate {
2020
private var x: Int = 0
2121
private lazy val y: Int = 1
22-
// private val z: Int = 2 // @darkdimius uncomment once lazy vals can be inherited.
22+
private val z: Int = 2
2323

2424
private def f(x: Int): Int = x + y
2525
def xx = x
2626
def xx_=(x: Int) = this.x = x
2727
def yy = y
28-
// def zz = z
28+
def zz = z
2929
def ff(x: Int) = f(x)
3030
}
3131

0 commit comments

Comments
 (0)