Skip to content

Commit 4c2b322

Browse files
committed
Add Serialize to companions of serializable classes in stdlib-bootsrapped
1 parent 302be2f commit 4c2b322

File tree

3 files changed

+28
-3
lines changed

3 files changed

+28
-3
lines changed

compiler/src/dotty/tools/dotc/transform/PostTyper.scala

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -425,7 +425,7 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
425425
if sym.isOpaqueAlias then
426426
VarianceChecker.checkLambda(rhs, TypeBounds.upper(sym.opaqueAlias))
427427
case _ =>
428-
processMemberDef(super.transform(tree))
428+
processMemberDef(super.transform(scala2LibPatch(tree)))
429429
case tree: Bind =>
430430
if tree.symbol.isType && !tree.symbol.name.is(WildcardParamName) then
431431
Checking.checkGoodBounds(tree.symbol)
@@ -534,5 +534,18 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
534534
sym.addAnnotation(Annotation(defn.ExperimentalAnnot, sym.span))
535535
sym.companionModule.addAnnotation(Annotation(defn.ExperimentalAnnot, sym.span))
536536

537+
private def scala2LibPatch(tree: TypeDef)(using Context) =
538+
val sym = tree.symbol
539+
if ctx.settings.Yscala2Stdlib.value
540+
&& sym.isClass && sym.is(Module) && !sym.derivesFrom(defn.SerializableClass)
541+
&& sym.companionClass.derivesFrom(defn.SerializableClass)
542+
then
543+
// Add Serializable to companion objects of serializable classes
544+
tree.rhs match
545+
case impl: Template =>
546+
val parents1 = impl.parents :+ TypeTree(defn.SerializableType)
547+
val impl1 = cpy.Template(impl)(parents = parents1)
548+
cpy.TypeDef(tree)(rhs = impl1)
549+
else tree
537550
}
538551
}

project/MiMaFilters.scala

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ object MiMaFilters {
5151

5252
// Companion module class
5353
ProblemFilters.exclude[FinalClassProblem]("scala.*$"),
54-
ProblemFilters.exclude[MissingTypesProblem]("scala.*$"),
54+
55+
// Missing types {scala.runtime.AbstractFunction1}
56+
ProblemFilters.exclude[MissingTypesProblem]("scala.ScalaReflectionException$"),
57+
ProblemFilters.exclude[MissingTypesProblem]("scala.UninitializedFieldError$"),
58+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.StringView$"),
5559

5660
// Tuples
5761
ProblemFilters.exclude[FinalClassProblem]("scala.Tuple1"),

project/TastyMiMaFilters.scala

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,15 @@ object TastyMiMaFilters {
7373
ProblemMatcher.make(ProblemKind.MissingTermMember, "scala.*$default$*"), // To check (semantic names vs mangled name?)
7474

7575
// Problem: Missing Serializable in companions of serializable classes
76-
ProblemMatcher.make(ProblemKind.MissingParent, "scala.*$"),
76+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.collection.Searching.Found$"),
77+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.collection.Searching.InsertionPoint$"),
78+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.jdk.FunctionWrappers.AsJava*$"),
79+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.jdk.FunctionWrappers.FromJava*$"),
80+
81+
// Missing types {scala.runtime.AbstractFunction1}
82+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.ScalaReflectionException$"),
83+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.UninitializedFieldError$"),
84+
ProblemMatcher.make(ProblemKind.MissingParent, "scala.collection.StringView$"),
7785

7886
// Problem: Class[T] or ClassTag[T] return type
7987
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.*.getClass"),

0 commit comments

Comments
 (0)