Skip to content

Commit f5bd16a

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 302be2f commit f5bd16a

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ object MiMaFilters {
122122
"scala.collection.View#*.iterator",
123123
"scala.concurrent.BatchingExecutor#AbstractBatch.this",
124124
"scala.concurrent.Channel#LinkedList.this",
125-
"scala.concurrent.duration.Deadline.apply", "scala.concurrent.duration.Deadline.copy", "scala.concurrent.duration.Deadline.copy$default$1", "scala.concurrent.duration.FiniteDuration.unary_-",
125+
"scala.concurrent.duration.FiniteDuration.unary_-",
126126
"scala.Enumeration#ValueOrdering.this",
127127
"scala.io.Source#RelaxedPosition.this",
128128
"scala.math.BigDecimal.underlying",

project/TastyMiMaFilters.scala

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,6 @@ object TastyMiMaFilters {
8080
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.reflect.ManifestFactory.*.runtimeClass"),
8181
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.*.elemTag"),
8282

83-
// Problem: Case class with private constructor
84-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.apply"),
85-
ProblemMatcher.make(ProblemKind.RestrictedVisibilityChange, "scala.concurrent.duration.Deadline.copy"),
86-
8783
// Problem: Missing type arguments with higher-kinded types
8884
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedSetFactoryDefaults._$5"),
8985
ProblemMatcher.make(ProblemKind.MissingTypeMember, "scala.collection.SortedMapFactoryDefaults._$6"),

0 commit comments

Comments
 (0)