Skip to content

Commit 4418821

Browse files
Merge pull request #5830 from dotty-staging/fix-#5827
Fix #5827: Don't copy protected flag to apply method of case class
2 parents f9e58c9 + 4ba1cf6 commit 4418821

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

Diff for: compiler/src/dotty/tools/dotc/ast/Desugar.scala

+6-3
Original file line numberDiff line numberDiff line change
@@ -629,9 +629,12 @@ object desugar {
629629
(creatorExpr /: widenDefs)((rhs, meth) => Apply(Ident(meth.name), rhs :: Nil))
630630
val applyMeths =
631631
if (mods is Abstract) Nil
632-
else
633-
DefDef(nme.apply, derivedTparams, derivedVparamss, applyResultTpt, widenedCreatorExpr)
634-
.withFlags(Synthetic | constr1.mods.flags & (DefaultParameterized | copiedAccessFlags)) :: widenDefs
632+
else {
633+
val copiedFlagsMask = DefaultParameterized | (copiedAccessFlags & Private)
634+
val app = DefDef(nme.apply, derivedTparams, derivedVparamss, applyResultTpt, widenedCreatorExpr)
635+
.withFlags(Synthetic | constr1.mods.flags & copiedFlagsMask)
636+
app :: widenDefs
637+
}
635638
val unapplyMeth = {
636639
val unapplyParam = makeSyntheticParameter(tpt = classTypeRef)
637640
val unapplyRHS = if (arity == 0) Literal(Constant(true)) else Ident(unapplyParam.name)

Diff for: tests/pos/i5827.scala

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
case class Foo protected(a: Int)
2+
3+
case class Bar private(a: Int)

0 commit comments

Comments
 (0)