Skip to content

Commit 4a4ea7b

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 916d4e7 commit 4a4ea7b

File tree

3 files changed

+6
-7
lines changed

3 files changed

+6
-7
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -671,12 +671,14 @@ object desugar {
671671
cpy.ValDef(vparam)(rhs = refOfDef(vparam)))
672672
val copyRestParamss = derivedVparamss.tail.nestedMap(vparam =>
673673
cpy.ValDef(vparam)(rhs = EmptyTree))
674+
var flags = Synthetic | constr1.mods.flags & copiedAccessFlags
675+
if ctx.settings.Yscala2Stdlib.value then flags &~= Private
674676
DefDef(
675677
nme.copy,
676678
joinParams(derivedTparams, copyFirstParams :: copyRestParamss),
677679
TypeTree(),
678680
creatorExpr
679-
).withMods(Modifiers(Synthetic | constr1.mods.flags & copiedAccessFlags, constr1.mods.privateWithin)) :: Nil
681+
).withMods(Modifiers(flags, constr1.mods.privateWithin)) :: Nil
680682
}
681683
}
682684

@@ -730,7 +732,9 @@ object desugar {
730732
if (mods.is(Abstract)) Nil
731733
else {
732734
val appMods =
733-
Modifiers(Synthetic | constr1.mods.flags & copiedAccessFlags).withPrivateWithin(constr1.mods.privateWithin)
735+
var flags = Synthetic | constr1.mods.flags & copiedAccessFlags
736+
if ctx.settings.Yscala2Stdlib.value then flags &~= Private
737+
Modifiers(flags).withPrivateWithin(constr1.mods.privateWithin)
734738
val appParamss =
735739
derivedVparamss.nestedZipWithConserve(constrVparamss)((ap, cp) =>
736740
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 & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,6 @@ object TastyMiMaFilters {
8383
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.reflect.ManifestFactory.*.runtimeClass"),
8484
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.*.elemTag"),
8585

86-
// Problem: Case class with private constructor
87-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.apply"),
88-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.copy"),
89-
9086
// Problem: Missing type arguments with higher-kinded types
9187
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedSetFactoryDefaults._$5"),
9288
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedMapFactoryDefaults._$6"),

0 commit comments

Comments
 (0)