@@ -1943,12 +1943,27 @@ object desugar {
19431943 case AndType (tp1, tp2) => stripToCore(tp1) ::: stripToCore(tp2)
19441944 case _ => defn.AnyType :: Nil
19451945 }
1946+
1947+ val refinements1 = Trees .flatten:
1948+ refinements.mapConserve {
1949+ case tree : ValDef if tree.mods.is(Mutable ) =>
1950+ val getter =
1951+ cpy.DefDef (tree)(name = tree.name, paramss = Nil , tpt = tree.tpt, rhs = tree.rhs)
1952+ .withFlags(tree.mods.flags & (AccessFlags | Synthetic ))
1953+ val setterParam = makeSyntheticParameter(tpt = tree.tpt)
1954+ val setter =
1955+ cpy.DefDef (tree)(name = tree.name.setterName, paramss = List (List (setterParam)), tpt = untpd.scalaUnit, rhs = EmptyTree )
1956+ .withFlags(tree.mods.flags & (AccessFlags | Synthetic ))
1957+ Thicket (getter, setter)
1958+ case tree => tree
1959+ }
1960+
19461961 val parentCores = stripToCore(parent.tpe)
19471962 val untpdParent = TypedSplice (parent)
19481963 val (classParents, self) =
19491964 if (parentCores.length == 1 && (parent.tpe eq parentCores.head)) (untpdParent :: Nil , EmptyValDef )
19501965 else (parentCores map TypeTree , ValDef (nme.WILDCARD , untpdParent, EmptyTree ))
1951- val impl = Template (emptyConstructor, classParents, Nil , self, refinements )
1966+ val impl = Template (emptyConstructor, classParents, Nil , self, refinements1 )
19521967 TypeDef (tpnme.REFINE_CLASS , impl).withFlags(Trait )
19531968 }
19541969
0 commit comments