Skip to content

Commit 2631e59

Browse files
committed
Add MiMa to stdlib-bootstrapped
1 parent 768c301 commit 2631e59

File tree

4 files changed

+138
-1
lines changed

4 files changed

+138
-1
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ jobs:
253253

254254
- name: MiMa
255255
run: |
256-
./project/scripts/sbt ";scala3-interfaces/mimaReportBinaryIssues ;scala3-library-bootstrapped/mimaReportBinaryIssues ;scala3-library-bootstrappedJS/mimaReportBinaryIssues; tasty-core-bootstrapped/mimaReportBinaryIssues"
256+
./project/scripts/sbt ";scala3-interfaces/mimaReportBinaryIssues ;scala3-library-bootstrapped/mimaReportBinaryIssues ;scala3-library-bootstrappedJS/mimaReportBinaryIssues; tasty-core-bootstrapped/mimaReportBinaryIssues; stdlib-bootstrapped/mimaReportBinaryIssues"
257257
258258
community_build_a:
259259
runs-on: [self-hosted, Linux]

project/Build.scala

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,6 +1021,15 @@ object Build {
10211021
(Test / managedClasspath) ~= {
10221022
_.filterNot(file => file.data.getName == s"scala-library-${stdlibVersion(Bootstrapped)}.jar")
10231023
},
1024+
mimaPreviousArtifacts +=
1025+
("org.scala-lang" % "scala-library" % stdlibVersion(Bootstrapped)),
1026+
mimaCheckDirection := "backward",
1027+
mimaExcludeAnnotations ++= Seq(
1028+
"scala.annotation.experimental",
1029+
"scala.annotation.specialized",
1030+
"scala.annotation.unspecialized",
1031+
),
1032+
mimaBinaryIssueFilters ++= MiMaFilters.LibraryBootstrapped,
10241033
run := {
10251034
val args: Seq[String] = spaceDelimited("<arg>").parsed
10261035
val reference = (Compile/sourceManaged).value / "scala-library-src"

project/MiMaFilters.scala

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,128 @@ object MiMaFilters {
4949
ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.dotc.interfaces.Diagnostic.diagnosticRelatedInformation"),
5050
ProblemFilters.exclude[MissingClassProblem]("dotty.tools.dotc.interfaces.DiagnosticRelatedInformation")
5151
)
52+
53+
val LibraryBootstrapped: Seq[ProblemFilter] = Seq(
54+
// Files that are not compiled in the bootstrapped library
55+
ProblemFilters.exclude[MissingClassProblem]("scala.AnyVal"),
56+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Unit.this"),
57+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Boolean.this"),
58+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Byte.this"),
59+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Short.this"),
60+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Int.this"),
61+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Long.this"),
62+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Float.this"),
63+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Double.this"),
64+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Char.this"),
65+
66+
67+
// Scala language features
68+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language.<clinit>"),
69+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language#experimental.<clinit>"),
70+
ProblemFilters.exclude[FinalClassProblem]("scala.language$experimental$"),
71+
ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$*$"),
72+
73+
// trait $init$
74+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*.$init$"),
75+
76+
// Case class unapply
77+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.*.unapply"),
78+
79+
// Value class extension methods
80+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*$extension"),
81+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.*$extension"),
82+
83+
// Companion module class
84+
ProblemFilters.exclude[FinalClassProblem]("scala.*$"),
85+
ProblemFilters.exclude[MissingTypesProblem]("scala.*$"),
86+
87+
// Tuples
88+
ProblemFilters.exclude[FinalClassProblem]("scala.Tuple1"),
89+
ProblemFilters.exclude[FinalClassProblem]("scala.Tuple2"),
90+
ProblemFilters.exclude[MissingFieldProblem]("scala.Tuple*._*"), // Tuple1._1, Tuple2._1, Tuple2._2
91+
92+
// Scala 2 intrinsic macros
93+
ProblemFilters.exclude[FinalMethodProblem]("scala.StringContext.s"),
94+
95+
// scala.math.Ordering.tryCompare
96+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*.tryCompare"),
97+
98+
// Scala 2 specialization
99+
ProblemFilters.exclude[MissingClassProblem]("scala.*$sp"),
100+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*$sp"),
101+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*#*#sp.$init$"),
102+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.DoubleStepper"),
103+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.immutable.DoubleVectorStepper"),
104+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.immutable.IntVectorStepper"),
105+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.immutable.LongVectorStepper"),
106+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.IntStepper"),
107+
ProblemFilters.exclude[MissingTypesProblem]("scala.collection.LongStepper"),
108+
ProblemFilters.exclude[MissingTypesProblem]("scala.jdk.DoubleAccumulator"),
109+
ProblemFilters.exclude[MissingTypesProblem]("scala.jdk.FunctionWrappers$*"),
110+
ProblemFilters.exclude[MissingTypesProblem]("scala.jdk.IntAccumulator"),
111+
ProblemFilters.exclude[MissingTypesProblem]("scala.jdk.LongAccumulator"),
112+
113+
// non-categorized
114+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#*.iterableFactory"),
115+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#*.mapFactory"),
116+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.convert.JavaCollectionWrappers#IteratorWrapper.remove"),
117+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.ArraySeq#*.elemTag"),
118+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.BitSet.bitSetFactory"),
119+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.HashCollisionSetNode.copy"),
120+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.MapKeyValueTupleHashIterator.next"),
121+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.immutable.TreeSet.sortedIterableFactory"),
122+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.LinearSeqIterator#LazyCell.this"),
123+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.AnyRefMap#ToBuildFrom.newBuilder"),
124+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.ArraySeq#*.elemTag"),
125+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.BitSet.bitSetFactory"),
126+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.LinkedHashMap.newBuilder"),
127+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.LinkedHashSet.newBuilder"),
128+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.LongMap#ToBuildFrom.newBuilder"),
129+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.PriorityQueue#ResizableArrayAccess.this"),
130+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.TreeMap.sortedMapFactory"),
131+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringView.andThen"),
132+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringView.compose"),
133+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.View#*.iterator"),
134+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.BatchingExecutor#AbstractBatch.this"),
135+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Channel#LinkedList.this"),
136+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.duration.Deadline.apply"),
137+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.duration.Deadline.copy"),
138+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.duration.Deadline.copy$default$1"),
139+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.duration.FiniteDuration.unary_-"),
140+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Enumeration#ValueOrdering.this"),
141+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.io.Source#RelaxedPosition.this"),
142+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.math.BigDecimal.underlying"),
143+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.PartialFunction#OrElse.andThen"),
144+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.PartialFunction#OrElse.orElse"),
145+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Rich*.num"),
146+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Rich*.ord"),
147+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.ScalaReflectionException.andThen"),
148+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.ScalaReflectionException.compose"),
149+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.UninitializedFieldError.andThen"),
150+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.UninitializedFieldError.compose"),
151+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties.<clinit>"),
152+
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Sorting.scala$util$Sorting$$mergeSort$default$5"),
153+
ProblemFilters.exclude[FinalClassProblem]("scala.collection.ArrayOps$ReverseIterator"),
154+
ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueOrdering"),
155+
ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueSet"),
156+
ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"),
157+
ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPosition"),
158+
ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"),
159+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.convert.JavaCollectionWrappers#*.empty"),
160+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.RedBlackTree#EqualsIterator.nextResult"),
161+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.SortedMapOps.coll"),
162+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.TreeMap.empty"),
163+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.TreeMap.fromSpecific"),
164+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.ArrayBuilder#ofUnit.addAll"),
165+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.LinkedHashMap.newBuilder"),
166+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.LinkedHashSet.newBuilder"),
167+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.TreeMap.empty"),
168+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.TreeMap.fromSpecific"),
169+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.reflect.ManifestFactory#NothingManifest.newArray"),
170+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.reflect.ManifestFactory#NullManifest.newArray"),
171+
ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.StringContext.unapplySeq"),
172+
ProblemFilters.exclude[MissingFieldProblem]("scala.collection.ArrayOps#ReverseIterator.xs"),
173+
ProblemFilters.exclude[MissingFieldProblem]("scala.runtime.NonLocalReturnControl.value"),
174+
ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.collection.immutable.SortedMapOps.coll"),
175+
)
52176
}

stdlib-bootstrapped/README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ To clone or list non-overridden sources execute `stdlib-bootstrapped/run`.
1111

1212
This project generates a version of the Scala 3 library that contains the full library with
1313
TASTy files. The compiled library is located in `out/bootstrap/stdlib-bootstrapped/`.
14+
15+
MiMa checks (`stdlib-bootstrapped/mimaReportBinaryIssues`) will check the backwards binary
16+
compatibility compared with `"org.scala-lang" % "scala-library" % stdlibVersion(Bootstrapped)`.
17+
MiMa filter are located in `project/MiMaFilters.scala`.

0 commit comments

Comments
 (0)