Skip to content

Commit a80f3d7

Browse files
committed
Fix stdlib-bootstrapped private case class constructors
In the Scala 2 the `apply` and `copy` of a private case class constructor are public in the pickles and bytecode.
1 parent d0f9a51 commit a80f3d7

File tree

3 files changed

+6
-8
lines changed

3 files changed

+6
-8
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -696,12 +696,14 @@ object desugar {
696696
cpy.ValDef(vparam)(rhs = refOfDef(vparam)))
697697
val copyRestParamss = derivedVparamss.tail.nestedMap(vparam =>
698698
cpy.ValDef(vparam)(rhs = EmptyTree))
699+
var flags = Synthetic | constr1.mods.flags & copiedAccessFlags
700+
if ctx.settings.Yscala2Stdlib.value then flags &~= Private
699701
DefDef(
700702
nme.copy,
701703
joinParams(derivedTparams, copyFirstParams :: copyRestParamss),
702704
TypeTree(),
703705
creatorExpr
704-
).withMods(Modifiers(Synthetic | constr1.mods.flags & copiedAccessFlags, constr1.mods.privateWithin)) :: Nil
706+
).withMods(Modifiers(flags, constr1.mods.privateWithin)) :: Nil
705707
}
706708
}
707709

@@ -755,7 +757,9 @@ object desugar {
755757
if (mods.is(Abstract)) Nil
756758
else {
757759
val appMods =
758-
Modifiers(Synthetic | constr1.mods.flags & copiedAccessFlags).withPrivateWithin(constr1.mods.privateWithin)
760+
var flags = Synthetic | constr1.mods.flags & copiedAccessFlags
761+
if ctx.settings.Yscala2Stdlib.value then flags &~= Private
762+
Modifiers(flags).withPrivateWithin(constr1.mods.privateWithin)
759763
val appParamss =
760764
derivedVparamss.nestedZipWithConserve(constrVparamss)((ap, cp) =>
761765
ap.withMods(ap.mods | (cp.mods.flags & HasDefault)))

project/MiMaFilters.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,6 @@ object MiMaFilters {
113113
"scala.collection.StringView.andThen", "scala.collection.StringView.compose",
114114
"scala.concurrent.BatchingExecutor#AbstractBatch.this",
115115
"scala.concurrent.Channel#LinkedList.this",
116-
"scala.concurrent.duration.Deadline.apply", "scala.concurrent.duration.Deadline.copy", "scala.concurrent.duration.Deadline.copy$default$1",
117116
"scala.Enumeration#ValueOrdering.this",
118117
"scala.io.Source#RelaxedPosition.this",
119118
"scala.PartialFunction#OrElse.andThen", "scala.PartialFunction#OrElse.orElse",

project/TastyMiMaFilters.scala

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ object TastyMiMaFilters {
3030
// Problem: ConstantType for `null` versus `scala.Null`
3131
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.mutable.UnrolledBuffer.Unrolled.<init>$default$4"),
3232

33-
// Problem: Case class with private constructor
34-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.apply"),
35-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.copy"),
36-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.copy$default$1"),
37-
3833
// Problem: Missing type arguments with higher-kinded types
3934
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedSetFactoryDefaults._$5"),
4035
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedMapFactoryDefaults._$6"),

0 commit comments

Comments
 (0)