Skip to content

Commit 6039753

Browse files
authored
Merge pull request #147 from scala/backport-lts-3.3-22157
Backport "Add type parameters derived from enum to default param getters of enum cases" to 3.3 LTS
2 parents 5704bcb + 00a962b commit 6039753

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

compiler/src/dotty/tools/dotc/ast/Desugar.scala

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -481,15 +481,15 @@ object desugar {
481481
val originalTparams = constr1.leadingTypeParams
482482
val originalVparamss = asTermOnly(constr1.trailingParamss)
483483
lazy val derivedEnumParams = enumClass.typeParams.map(derivedTypeParamWithVariance)
484-
val impliedTparams =
485-
if (isEnumCase) {
484+
val enumTParams =
485+
if isEnumCase then
486486
val tparamReferenced = typeParamIsReferenced(
487-
enumClass.typeParams, originalTparams, originalVparamss, parents)
488-
if (originalTparams.isEmpty && (parents.isEmpty || tparamReferenced))
487+
enumClass.typeParams, originalTparams, originalVparamss, parents)
488+
if originalTparams.isEmpty && (parents.isEmpty || tparamReferenced) then
489489
derivedEnumParams.map(tdef => tdef.withFlags(tdef.mods.flags | PrivateLocal))
490-
else originalTparams
491-
}
492-
else originalTparams
490+
else Nil
491+
else Nil
492+
val impliedTparams = enumTParams ++ originalTparams
493493

494494
if mods.is(Trait) then
495495
for vparams <- originalVparamss; vparam <- vparams do
@@ -519,6 +519,11 @@ object desugar {
519519
derivedTermParam(vparam).withAnnotations(Nil))
520520

521521
val constr = cpy.DefDef(constr1)(paramss = joinParams(constrTparams, constrVparamss))
522+
if enumTParams.nonEmpty then
523+
defaultGetters = defaultGetters.map:
524+
case ddef: DefDef =>
525+
val tParams = enumTParams.map(tparam => toMethParam(tparam, KeepAnnotations.All))
526+
cpy.DefDef(ddef)(paramss = joinParams(tParams, ddef.trailingParamss))
522527

523528
val (normalizedBody, enumCases, enumCompanionRef) = {
524529
// Add constructor type parameters and evidence implicit parameters

tests/pos/i22137.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
enum Parser[+Value]:
2+
case Success(value: Value, issues: Seq[Failure] = Seq.empty) extends Parser[Value]
3+
case Failure(exception: Throwable) extends Parser[Nothing]
4+
5+
val v = Parser.Success(1)

0 commit comments

Comments
 (0)