From a52fbf1f07d866a88df30f4548940cb56de4dbe0 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 13:34:03 +0200 Subject: [PATCH 01/10] chore: drop old MiMa --- .github/workflows/ci.yaml | 49 +-------------------------------------- project/Build.scala | 20 ---------------- 2 files changed, 1 insertion(+), 68 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ed369e3b39b1..96d90e8f169d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -236,53 +236,6 @@ jobs: run: sbt ";sjsJUnitTests/test ;set sjsJUnitTests/scalaJSLinkerConfig ~= switchToESModules ;sjsJUnitTests/test ;sjsCompilerTests/test" shell: cmd - mima: - name: MiMa - runs-on: [self-hosted, Linux] - container: - image: lampepfl/dotty:2024-10-18 - options: --cpu-shares 4096 - volumes: - - ${{ github.workspace }}/../../cache/sbt:/root/.sbt - - ${{ github.workspace }}/../../cache/ivy:/root/.ivy2/cache - - ${{ github.workspace }}/../../cache/general:/root/.cache - if: "github.event_name == 'schedule' && github.repository == 'scala/scala3' - || github.event_name == 'push' - || github.event_name == 'merge_group' - || ( - github.event_name == 'pull_request' - && !contains(github.event.pull_request.body, '[skip ci]') - && !contains(github.event.pull_request.body, '[skip mima]') - ) - || ( - github.event_name == 'workflow_dispatch' - && github.repository == 'scala/scala3' - )" - steps: - - name: Set JDK 17 as default - run: echo "/usr/lib/jvm/java-17-openjdk-amd64/bin" >> $GITHUB_PATH - - - name: Reset existing repo - run: | - git config --global --add safe.directory $GITHUB_WORKSPACE - git -c "http.https://github.com/.extraheader=" fetch --recurse-submodules=no "https://github.com/scala/scala3" && git reset --hard FETCH_HEAD || true - - - name: Checkout cleanup script - uses: actions/checkout@v5 - - - name: Cleanup - run: .github/workflows/cleanup.sh - - - name: Git Checkout - uses: actions/checkout@v5 - - - name: Add SBT proxy repositories - run: cp -vf .github/workflows/repositories /root/.sbt/ ; true - - - name: MiMa - run: | - ./project/scripts/sbt ";scala3-interfaces/mimaReportBinaryIssues ;scala3-library-bootstrapped/mimaReportBinaryIssues ;scala3-library-bootstrappedJS/mimaReportBinaryIssues; tasty-core-bootstrapped/mimaReportBinaryIssues;" - community_build_a: runs-on: [self-hosted, Linux] container: @@ -510,7 +463,7 @@ jobs: - ${{ github.workspace }}/../../cache/sbt:/root/.sbt - ${{ github.workspace }}/../../cache/ivy:/root/.ivy2/cache - ${{ github.workspace }}/../../cache/general:/root/.cache - needs: [test_non_bootstrapped, test, mima, community_build_a, community_build_b, community_build_c, test_sbt, build-sdk-package, build-msi-package] + needs: [test_non_bootstrapped, test, community_build_a, community_build_b, community_build_c, test_sbt, build-sdk-package, build-msi-package] if: "github.event_name == 'push' && startsWith(github.event.ref, 'refs/tags/')" diff --git a/project/Build.scala b/project/Build.scala index be6b08059def..3a8b8e3e0618 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -3467,18 +3467,6 @@ object Build { val doWork = (Compile/doc).result.value (Compile/doc/target).value }, - commonMiMaSettings, - mimaPreviousArtifacts += { - val thisProjectID = projectID.value - val crossedName = thisProjectID.crossVersion match { - case cv: Disabled => thisProjectID.name - case cv: Binary => s"${thisProjectID.name}_${cv.prefix}3${cv.suffix}" - } - (thisProjectID.organization % crossedName % mimaPreviousLTSDottyVersion) - }, - mimaForwardIssueFilters := MiMaFilters.Scala3Library.ForwardsBreakingChanges, - mimaBackwardIssueFilters := MiMaFilters.Scala3Library.BackwardsBreakingChanges, - customMimaReportBinaryIssues("MiMaFilters.Scala3Library"), ) } else base } @@ -3493,14 +3481,6 @@ object Build { Test / envVars ++= Map( "EXPECTED_TASTY_VERSION" -> expectedTastyVersion, ), - if (mode == Bootstrapped) Def.settings( - commonMiMaSettings, - mimaForwardIssueFilters := MiMaFilters.TastyCore.ForwardsBreakingChanges, - mimaBackwardIssueFilters := MiMaFilters.TastyCore.BackwardsBreakingChanges, - customMimaReportBinaryIssues("MiMaFilters.TastyCore"), - ) else { - Nil - } ) def asTastyCoreScala2: Project = project From 16be37dd806cf7a1980ba6f07c95175650cc30c7 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 13:40:46 +0200 Subject: [PATCH 02/10] chore: enable MiMa in `scala-library-nonbootstrapped` and `scala-library-bootstrapped` --- project/Build.scala | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/project/Build.scala b/project/Build.scala index 3a8b8e3e0618..c10239bf4e95 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -134,7 +134,7 @@ object Build { * - `3.M.0` if `P > 0` * - `3.(M-1).0` if `P = 0` */ - val mimaPreviousDottyVersion = "3.7.0" + val mimaPreviousDottyVersion = "3.7.3" // for 3.8.0, we compare against 3.7.3 /** LTS version against which we check binary compatibility. * @@ -304,6 +304,7 @@ object Build { Test / develocityBuildCacheClient := None, extraDevelocityCacheInputFiles := Seq.empty, extraDevelocityCacheInputFiles / outputFileStamper := FileStamper.Hash, + resolvers += ("Artifactory" at "https://repo.scala-lang.org/artifactory/fat-jar/"), ) // Settings shared globally (scoped in Global). Used in build.sbt @@ -1636,6 +1637,16 @@ object Build { publish / skip := false, // Project specific target folder. sbt doesn't like having two projects using the same target folder target := target.value / "scala-library-nonbootstrapped", + // Add configuration for MiMa + mimaCheckDirection := (compatMode match { + case CompatMode.BinaryCompatible => "backward" + case CompatMode.SourceAndBinaryCompatible => "both" + }), + mimaExcludeAnnotations += "scala.annotation.experimental", + mimaPreviousArtifacts += ("org.scala-lang" % "fat-stdlib" % "3.7.3"), + mimaForwardIssueFilters := MiMaFilters.Scala3Library.ForwardsBreakingChanges, + mimaBackwardIssueFilters := MiMaFilters.Scala3Library.BackwardsBreakingChanges, + customMimaReportBinaryIssues("MiMaFilters.Scala3Library"), ) /* Configuration of the org.scala-lang:scala3-library_3:*.**.**-nonbootstrapped project */ @@ -1748,6 +1759,16 @@ object Build { scalaCompilerBridgeBinaryJar := { Some((`scala3-sbt-bridge-nonbootstrapped` / Compile / packageBin).value) }, + // Add configuration for MiMa + mimaCheckDirection := (compatMode match { + case CompatMode.BinaryCompatible => "backward" + case CompatMode.SourceAndBinaryCompatible => "both" + }), + mimaExcludeAnnotations += "scala.annotation.experimental", + mimaPreviousArtifacts += ("org.scala-lang" % "fat-stdlib" % "3.7.3"), + mimaForwardIssueFilters := MiMaFilters.Scala3Library.ForwardsBreakingChanges, + mimaBackwardIssueFilters := MiMaFilters.Scala3Library.BackwardsBreakingChanges, + customMimaReportBinaryIssues("MiMaFilters.Scala3Library"), ) /* Configuration of the org.scala-lang:scala3-library_3:*.**.**-bootstrapped project */ From f66baf47345a12c0476a77b9c2104963fda17afe Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 13:41:10 +0200 Subject: [PATCH 03/10] fix: add temporary filters for modules classes being final in the stdlib --- project/MiMaFilters.scala | 371 +++++++++++++++++++++++++++++++++++++- 1 file changed, 370 insertions(+), 1 deletion(-) diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 7e97b1a3b8c4..e42d08192fb4 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -17,7 +17,7 @@ object MiMaFilters { ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Conversion.underlying"), ProblemFilters.exclude[MissingClassProblem]("scala.Conversion$"), - ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.RuntimeChecked"), + ProblemFilters.exclude[MissingClassProblem]("scala.annotation.internal.RuntimeChecked"), ProblemFilters.exclude[MissingClassProblem]("scala.annotation.stableNull"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.NamedTuple.namedTupleOrdering"), @@ -140,6 +140,375 @@ object MiMaFilters { ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#ValDefModule.let"), // Change `experimental` annotation to a final class ProblemFilters.exclude[FinalClassProblem]("scala.annotation.experimental"), + + // ================================== STDLIB MIGRATION ================================== + // ============================ module classes are not final ============================ + ProblemFilters.exclude[FinalClassProblem]("scala.Array$UnapplySeqWrapper$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Enumeration$ValueOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Enumeration$ValueSet$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Function1$UnliftOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.PartialFunction$ElementWiseExtractor$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Predef$ArrowAssoc$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Predef$Ensuring$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Predef$StringFormat$"), + ProblemFilters.exclude[FinalClassProblem]("scala.Predef$any2stringadd$"), + ProblemFilters.exclude[FinalClassProblem]("scala.StringContext$s$"), + ProblemFilters.exclude[FinalClassProblem]("scala.language$experimental$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$dynamics$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$existentials$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$experimental$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$experimental$macros$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$higherKinds$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$implicitConversions$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$postfixOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$reflectiveCalls$"), + ProblemFilters.exclude[FinalClassProblem]("scala.package$$hash$colon$colon$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.IterableOps$SizeCompareOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$Found$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$InsertionPoint$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.Searching$SearchImpl$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.SeqFactory$UnapplySeqWrapper$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.StepperShape$Shape$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.View$Empty$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.View$Filter$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.package$$colon$plus$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.package$$plus$colon$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$AccumulatorFactoryInfo$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$AccumulatorFactoryInfo$anyAccumulatorFactoryInfoPrototype$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$StreamShape$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.convert.StreamExtensions$StreamUnboxer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.generic.BitOperations$Int$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.generic.BitOperations$Long$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.IntMap$ToBuildFrom$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.IntMap$ToFactory$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$$hash$colon$colon$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$Deferrer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$LazyBuilder$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LazyList$cons$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.ListMap$EmptyListMap$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.ListSet$EmptyListSet$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LongMap$ToBuildFrom$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.LongMap$ToFactory$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Map$EmptyMap$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Queue$EmptyQueue$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$BigDecimal$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$BigInt$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Int$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Long$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Range$Partial$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.SeqMap$EmptySeqMap$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Set$EmptySet$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$$hash$colon$colon$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$Deferrer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$Empty$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.Stream$cons$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeMap$TreeMapBuilder$adder$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$Insertion$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$OrderBy$Modification$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Bin$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Iterator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Tip$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.TreeSeqMap$Ordering$Zero$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.immutable.WrappedString$UnwrapOp$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.AnyRefMap$ToBuildFrom$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.AnyRefMap$ToFactory$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.LongMap$ToBuildFrom$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.LongMap$ToFactory$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.RedBlackTree$Node$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.RedBlackTree$Tree$"), + ProblemFilters.exclude[FinalClassProblem]("scala.collection.mutable.UnrolledBuffer$Unrolled$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.BatchingExecutorStatics$MissingParentBlockContext$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.BlockContext$DefaultBlockContext$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.ExecutionContext$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.ExecutionContext$parasitic$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.Future$never$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.Deadline$DeadlineIsOrdered$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.Duration$DurationIsOrdered$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.DurationConversions$fromNowConvert$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.DurationConversions$spanConvert$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.FiniteDuration$FiniteDurationIsOrdered$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DoubleMult$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationDouble$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationInt$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$DurationLong$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$IntMult$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$LongMult$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$fromNow$"), + ProblemFilters.exclude[FinalClassProblem]("scala.concurrent.duration.package$span$"), + ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$NoPositioner$"), + ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$RelaxedPosition$"), + ProblemFilters.exclude[FinalClassProblem]("scala.io.Source$RelaxedPositioner$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.Accumulator$AccumulatorFactoryShape$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.DurationConverters$JavaDurationOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.DurationConverters$ScalaDurationOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBiPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaBooleanSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoublePredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaDoubleUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaIntUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaLongUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaObjLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToDoubleBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToIntBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToLongBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$AsJavaUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBiPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaBooleanSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoublePredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoublePredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaDoubleUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaIntUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaLongUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaObjLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToDoubleBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToIntBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToLongBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$FromJavaUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiConsumerAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiFunctionAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBiPredicateAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBinaryOperatorAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichBooleanSupplierAsFunction0$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichConsumerAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleBinaryOperatorAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleConsumerAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoublePredicateAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleSupplierAsFunction0$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleToIntFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleToLongFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichDoubleUnaryOperatorAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsBooleanSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsDoubleSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsIntSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsLongSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction0AsSupplier$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoublePredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsDoubleUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsIntUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsLongUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToDoubleFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToIntFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsToLongFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction1AsUnaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBiPredicate$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsDoubleBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsIntBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsLongBinaryOperator$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjDoubleConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjIntConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsObjLongConsumer$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToDoubleBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToIntBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunction2AsToLongBiFunction$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntBinaryOperatorAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntConsumerAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntPredicateAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntSupplierAsFunction0$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntToDoubleFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntToLongFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichIntUnaryOperatorAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongBinaryOperatorAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongConsumerAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongPredicateAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongSupplierAsFunction0$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongToDoubleFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongToIntFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichLongUnaryOperatorAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjDoubleConsumerAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjIntConsumerAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichObjLongConsumerAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichPredicateAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichSupplierAsFunction0$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToDoubleBiFunctionAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToDoubleFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToIntBiFunctionAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToIntFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToLongBiFunctionAsFunction2$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichToLongFunctionAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FunctionWrappers$RichUnaryOperatorAsFunction1$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FutureConverters$CompletionStageOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.FutureConverters$FutureOps$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOption$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptional$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalDouble$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalInt$"), + ProblemFilters.exclude[FinalClassProblem]("scala.jdk.OptionConverters$RichOptionalLong$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.BigDecimal$RoundingMode$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$BigDecimal$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$BigInt$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Boolean$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Byte$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Char$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$DeprecatedDoubleEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$DeprecatedFloatEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$IeeeEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Double$StrictEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$IeeeEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Float$StrictEquiv$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Int$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Long$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Short$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$String$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Symbol$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Equiv$Unit$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Fractional$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Integral$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalAsIfIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalIsConflicted$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigDecimalIsFractional$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$BigIntIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$ByteIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$CharIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$DoubleIsFractional$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$FloatIsFractional$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$IntIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$LongIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Numeric$ShortIsIntegral$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$BigDecimal$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$BigInt$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Boolean$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Byte$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Char$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$DeprecatedDoubleOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$DeprecatedFloatOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$IeeeOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Double$TotalOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$IeeeOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Float$TotalOrdering$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Implicits$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Int$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Long$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Short$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$String$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Symbol$"), + ProblemFilters.exclude[FinalClassProblem]("scala.math.Ordering$Unit$"), + ProblemFilters.exclude[FinalClassProblem]("scala.reflect.ClassTag$cache$"), + ProblemFilters.exclude[FinalClassProblem]("scala.runtime.Tuple2Zipped$Ops$"), + ProblemFilters.exclude[FinalClassProblem]("scala.runtime.Tuple3Zipped$Ops$"), + ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$DoubleProp$"), + ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$FileProp$"), + ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$IntProp$"), + ProblemFilters.exclude[FinalClassProblem]("scala.sys.Prop$StringProp$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$LeftProjection$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$MergeableEither$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Either$RightProjection$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Manager$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Releasable$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.Using$Releasable$AutoCloseableIsReleasable$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.package$chaining$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.control.Exception$Catch$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Call$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Cont$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Done$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Groups$"), + ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Match$"), ), // Breaking changes since last LTS From b6e36d8c091b1fc60351630432cd7e7d50edc758 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 13:41:29 +0200 Subject: [PATCH 04/10] chore: delete old filters from the stdlib --- ...Scala2LibraryBootstrappedMiMaFilters.scala | 199 ------------------ 1 file changed, 199 deletions(-) delete mode 100644 project/Scala2LibraryBootstrappedMiMaFilters.scala diff --git a/project/Scala2LibraryBootstrappedMiMaFilters.scala b/project/Scala2LibraryBootstrappedMiMaFilters.scala deleted file mode 100644 index dd0a885731b2..000000000000 --- a/project/Scala2LibraryBootstrappedMiMaFilters.scala +++ /dev/null @@ -1,199 +0,0 @@ - -import com.typesafe.tools.mima.core._ - -object Scala2LibraryBootstrappedMiMaFilters { - - val BackwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map( - Build.stdlibBootstrappedVersion -> Seq( - // Scala language features (not really a problem) - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language."), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language#experimental."), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties."), - - // Companion module class (not really a problem) - ProblemFilters.exclude[FinalClassProblem]("scala.*$"), - ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"), - ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPosition"), - ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"), - ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueOrdering"), - ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueSet"), - ProblemFilters.exclude[FinalMethodProblem]("scala.StringContext.s"), - - // Issue: https://github.com/scala/scala3/issues/22495 - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.scala$collection$ArrayOps$$elemTag$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.iterateUntilEmpty$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak2$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.linesSeparated$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.escape$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.toBooleanImpl$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.unwrapArg$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.iterateUntilEmpty$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll1$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll2$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll1$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll2$extension"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll3$extension"), - - // Issue: Scala 3 doesn't always outer pointers (not really a problem here) - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.IterableOnceOps#Maximized.this"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.LinearSeqIterator#LazyCell.this"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.PriorityQueue#ResizableArrayAccess.this"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.BatchingExecutor#AbstractBatch.this"), - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Channel#LinkedList.this"), - ) - ) - - val ForwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map( - Build.stdlibBootstrappedVersion -> { - Seq( - // Scala language features - ProblemFilters.exclude[FinalClassProblem]("scala.languageFeature$*$"), - ProblemFilters.exclude[MissingFieldProblem]("scala.language.experimental"), - ProblemFilters.exclude[MissingFieldProblem]("scala.languageFeature*"), - - // https://github.com/scala/scala/blob/v2.13.10/src/library/scala/collection/immutable/Range.scala#LL155C1-L156C1 - // Issue #17519: we do not set final on the default methods of final copy method. - ProblemFilters.exclude[FinalMethodProblem]("scala.collection.immutable.Range.copy$default$*"), - - // Value class extension methods - ProblemFilters.exclude[DirectMissingMethodProblem]("scala.*$extension"), - - // Companion module class: Missing type java.io.Serializable - ProblemFilters.exclude[MissingTypesProblem]("scala.*$"), - - // Non-categorized - ProblemFilters.exclude[IncompatibleMethTypeProblem]("scala.collection.mutable.ArrayBuilder#ofUnit.addAll"), - - // Non-categorized - ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.SortedMapOps.coll"), - ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.reflect.ManifestFactory#NothingManifest.newArray"), - ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.reflect.ManifestFactory#NullManifest.newArray"), - - // the type hierarchy of class scala.Array is different in other version. Missing types {java.io.Serializable,java.lang.Cloneable} - ProblemFilters.exclude[MissingTypesProblem]("scala.Array"), - - // abstract method coll()scala.collection.immutable.SortedMapOps in interface scala.collection.immutable.SortedMapOps is present only in other version - ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.collection.immutable.SortedMapOps.coll"), - ) ++ - Seq( // DirectMissingMethodProblem - "scala.<:<.antisymm", "scala.<:<.refl", - "scala.collection.BitSet.ordMsg", "scala.collection.BitSet.zipOrdMsg", - "scala.collection.BitSetOps.computeWordForFilter", "scala.collection.BitSetOps.LogWL", "scala.collection.BitSetOps.MaxSize", "scala.collection.BitSetOps.updateArray", "scala.collection.BitSetOps.WordLength", - "scala.collection.convert.StreamExtensions#AccumulatorFactoryInfo.*AccumulatorFactoryInfo", "scala.collection.convert.StreamExtensions#StreamShape.*StreamShape", "scala.collection.convert.StreamExtensions#StreamUnboxer.*StreamUnboxer", - "scala.collection.immutable.List.partialNotApplied", - "scala.collection.immutable.ListSet.emptyInstance", - "scala.collection.immutable.Nil.andThen", "scala.collection.immutable.Nil.collectionClassName", "scala.collection.immutable.Nil.empty", "scala.collection.immutable.Nil.view", - "scala.collection.immutable.NumericRange.defaultOrdering", - "scala.collection.immutable.Set.emptyInstance", - "scala.collection.immutable.Stream.collectedTail", "scala.collection.immutable.Stream.filteredTail", - "scala.collection.immutable.TreeSeqMap#Ordering#Bin.apply", "scala.collection.immutable.TreeSeqMap#Ordering#Bin.unapply", "scala.collection.immutable.TreeSeqMap#Ordering#Iterator.empty", "scala.collection.immutable.TreeSeqMap#Ordering#Iterator.Empty", "scala.collection.immutable.TreeSeqMap#Ordering#Tip.apply", "scala.collection.immutable.TreeSeqMap#Ordering#Tip.unapply", - "scala.collection.immutable.Vector.fillSparse", - "scala.collection.IterableOnce.checkArraySizeWithinVMLimit", - "scala.collection.IterableOnce.copyElemsToArray", "scala.collection.IterableOnce.copyElemsToArray$default$3", "scala.collection.IterableOnce.copyElemsToArray$default$4", - "scala.collection.IterableOnce.elemsToCopyToArray", - "scala.collection.LinearSeqIterator#LazyCell.this", - "scala.collection.mutable.ArrayDeque.alloc", "scala.collection.mutable.ArrayDeque.end_=", "scala.collection.mutable.ArrayDeque.end", "scala.collection.mutable.ArrayDeque.StableSize", "scala.collection.mutable.ArrayDeque.start_=", "scala.collection.mutable.ArrayDeque.start", - "scala.collection.mutable.CollisionProofHashMap.ordMsg", - "scala.collection.mutable.PriorityQueue#ResizableArrayAccess.this", - "scala.collection.mutable.RedBlackTree#Node.apply", "scala.collection.mutable.RedBlackTree#Node.leaf", "scala.collection.mutable.RedBlackTree#Node.unapply", "scala.collection.mutable.RedBlackTree#Tree.empty", - "scala.collection.mutable.UnrolledBuffer.unrolledlength", "scala.collection.mutable.UnrolledBuffer#Unrolled.$default$4", - "scala.collection.Searching#Found.apply", "scala.collection.Searching#Found.unapply", - "scala.collection.Searching#Found.andThen", "scala.collection.Searching#Found.compose", - "scala.collection.Searching#InsertionPoint.andThen", "scala.collection.Searching#InsertionPoint.compose", - "scala.collection.Searching#InsertionPoint.apply", "scala.collection.Searching#InsertionPoint.unapply", - "scala.collection.SortedMapFactoryDefaults.empty", "scala.collection.SortedMapFactoryDefaults.fromSpecific", - "scala.collection.SortedMapOps.ordMsg", "scala.collection.SortedSetOps.ordMsg", - "scala.collection.SortedSetOps.zipOrdMsg", - "scala.collection.Stepper.throwNSEE", - "scala.collection.View.dropRightIterator", "scala.collection.View.takeRightIterator", - "scala.collection.View#Filter.apply", - "scala.concurrent.BatchingExecutor#AbstractBatch.this", - "scala.concurrent.Channel#LinkedList.this", - "scala.concurrent.ExecutionContext.opportunistic", - "scala.concurrent.Future.addToBuilderFun", "scala.concurrent.Future.collectFailed", "scala.concurrent.Future.failedFailureFuture", "scala.concurrent.Future.failedFun", "scala.concurrent.Future.filterFailure", "scala.concurrent.Future.id", "scala.concurrent.Future.recoverWithFailed", "scala.concurrent.Future.recoverWithFailedMarker", "scala.concurrent.Future.toBoxed", "scala.concurrent.Future.zipWithTuple2Fun", - "scala.Enumeration#ValueOrdering.this", - "scala.io.Source#RelaxedPosition.this", - "scala.jdk.Accumulator#AccumulatorFactoryShape.anyAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.doubleAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.intAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.jDoubleAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.jIntegerAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.jLongAccumulatorFactoryShape", "scala.jdk.Accumulator#AccumulatorFactoryShape.longAccumulatorFactoryShape", - "scala.jdk.FunctionWrappers#*", - "scala.PartialFunction.unlifted", - "scala.sys.process.BasicIO.connectNoOp", "scala.sys.process.BasicIO.connectToStdIn", - "scala.sys.process.Process.Future", - "scala.sys.process.Process.Spawn", - "scala.util.control.Exception#Catch.$default$2", "scala.util.control.Exception#Catch.$default$3", - "scala.util.control.TailCalls#Call.apply", "scala.util.control.TailCalls#Call.unapply", "scala.util.control.TailCalls#Cont.apply", "scala.util.control.TailCalls#Cont.unapply", "scala.util.control.TailCalls#Done.apply", "scala.util.control.TailCalls#Done.unapply", - "scala.util.Either#LeftProjection.apply", "scala.util.Either#LeftProjection.unapply", "scala.util.Either#RightProjection.apply", "scala.util.Either#RightProjection.unapply", - "scala.util.matching.Regex#Match.unapply", - "scala.util.Properties.coloredOutputEnabled", - "scala.util.Properties.isAvian", - "scala.util.Properties.versionFor", - // New problem in 2.13.11 - "scala.collection.IterableOnceOps#Maximized.this", // private inner class - "scala.collection.mutable.LinkedHashMap.defaultLoadFactor", // private[collection] final def - "scala.collection.mutable.LinkedHashMap.defaultinitialSize", // private[collection] final def - "scala.collection.mutable.LinkedHashSet.defaultLoadFactor", // private[collection] final def - "scala.collection.mutable.LinkedHashSet.defaultinitialSize", // private[collection] final def - "scala.collection.mutable.OpenHashMap.nextPositivePowerOfTwo", // private[mutable] def - // New in 2.13.13 - "scala.collection.mutable.ArrayBuffer.resizeUp", // private[mutable] def - // New in 2.13.14 - "scala.util.Properties.consoleIsTerminal", // private[scala] lazy val - ).map(ProblemFilters.exclude[DirectMissingMethodProblem]) ++ - Seq( // MissingFieldProblem: static field ... in object ... does not have a correspondent in other version - "scala.Array.UnapplySeqWrapper", - "scala.collection.concurrent.TrieMap.RemovalPolicy", - "scala.collection.convert.StreamExtensions.AccumulatorFactoryInfo", "scala.collection.convert.StreamExtensions.StreamShape", "scala.collection.convert.StreamExtensions.StreamUnboxer", - "scala.collection.immutable.IntMap.Bin", "scala.collection.immutable.IntMap.Nil", "scala.collection.immutable.IntMap.Tip", - "scala.collection.immutable.LazyList.#::", "scala.collection.immutable.LazyList.cons", "scala.collection.immutable.LazyList.Deferrer", "scala.collection.immutable.LazyList#State.Empty", - "scala.collection.immutable.LongMap.Bin", "scala.collection.immutable.LongMap.Nil", "scala.collection.immutable.LongMap.Tip", - "scala.collection.immutable.Range.BigDecimal", "scala.collection.immutable.Range.BigInt", "scala.collection.immutable.Range.Int", "scala.collection.immutable.Range.Long", "scala.collection.immutable.Range.Partial", - "scala.collection.immutable.Stream.#::", "scala.collection.immutable.Stream.cons", "scala.collection.immutable.Stream.Deferrer", "scala.collection.immutable.Stream.Empty", - "scala.collection.immutable.TreeSeqMap.OrderBy", "scala.collection.immutable.TreeSeqMap.Ordering", "scala.collection.immutable.TreeSeqMap#OrderBy.Insertion", "scala.collection.immutable.TreeSeqMap#OrderBy.Modification", - "scala.collection.immutable.VectorMap.Tombstone", - "scala.collection.immutable.WrappedString.UnwrapOp", - "scala.collection.IterableOps.SizeCompareOps", - "scala.collection.mutable.UnrolledBuffer.Unrolled", - "scala.collection.package.:+", "scala.collection.package.+:", - "scala.collection.Searching.Found", "scala.collection.Searching.InsertionPoint", "scala.collection.Searching.SearchImpl", - "scala.collection.SeqFactory.UnapplySeqWrapper", - "scala.collection.StepperShape.Shape", - "scala.collection.View.Empty", "scala.collection.View.Filter", - "scala.concurrent.duration.Deadline.DeadlineIsOrdered", "scala.concurrent.duration.Duration.DurationIsOrdered", - "scala.concurrent.duration.DurationConversions.fromNowConvert", "scala.concurrent.duration.DurationConversions.spanConvert", - "scala.concurrent.duration.FiniteDuration.FiniteDurationIsOrdered", - "scala.concurrent.duration.package.DoubleMult", "scala.concurrent.duration.package.DurationDouble", "scala.concurrent.duration.package.DurationInt", "scala.concurrent.duration.package.DurationLong", "scala.concurrent.duration.package.fromNow", "scala.concurrent.duration.package.IntMult", "scala.concurrent.duration.package.LongMult", "scala.concurrent.duration.package.span", - "scala.concurrent.ExecutionContext.Implicits", "scala.concurrent.ExecutionContext.parasitic", - "scala.concurrent.Future.never", - "scala.Function1.UnliftOps", - "scala.jdk.Accumulator.AccumulatorFactoryShape", - "scala.jdk.DurationConverters.JavaDurationOps", "scala.jdk.DurationConverters.ScalaDurationOps", - "scala.jdk.FunctionWrappers.*", - "scala.jdk.FutureConverters.CompletionStageOps", "scala.jdk.FutureConverters.FutureOps", - "scala.jdk.OptionConverters.RichOption", "scala.jdk.OptionConverters.RichOptional", "scala.jdk.OptionConverters.RichOptionalDouble", "scala.jdk.OptionConverters.RichOptionalInt", "scala.jdk.OptionConverters.RichOptionalLong", - "scala.math.BigDecimal.RoundingMode", - "scala.math.Equiv.BigDecimal", "scala.math.Equiv.BigInt", "scala.math.Equiv.Boolean", "scala.math.Equiv.Byte", "scala.math.Equiv.Char", "scala.math.Equiv.DeprecatedDoubleEquiv", "scala.math.Equiv.DeprecatedFloatEquiv", "scala.math.Equiv.Double", "scala.math.Equiv.Float", "scala.math.Equiv.Implicits", "scala.math.Equiv.Int", "scala.math.Equiv.Long", "scala.math.Equiv.Short", "scala.math.Equiv.String", "scala.math.Equiv.Symbol", "scala.math.Equiv.Unit", - "scala.math.Equiv#Double.IeeeEquiv", "scala.math.Equiv#Double.StrictEquiv", "scala.math.Equiv#Float.IeeeEquiv", "scala.math.Equiv#Float.StrictEquiv", - "scala.math.Fractional.Implicits", - "scala.math.Integral.Implicits", - "scala.math.Numeric.BigDecimalAsIfIntegral", "scala.math.Numeric.BigDecimalIsFractional", "scala.math.Numeric.BigIntIsIntegral", "scala.math.Numeric.ByteIsIntegral", "scala.math.Numeric.CharIsIntegral", "scala.math.Numeric.DoubleIsFractional", "scala.math.Numeric.FloatIsFractional", "scala.math.Numeric.Implicits", "scala.math.Numeric.IntIsIntegral", "scala.math.Numeric.LongIsIntegral", "scala.math.Numeric.ShortIsIntegral", - "scala.math.Ordering.BigDecimal", - "scala.math.Ordering.BigInt", "scala.math.Ordering.Boolean", "scala.math.Ordering.Byte", "scala.math.Ordering.Char", "scala.math.Ordering.DeprecatedDoubleOrdering", "scala.math.Ordering.DeprecatedFloatOrdering", "scala.math.Ordering.Double", "scala.math.Ordering.Float", "scala.math.Ordering.Implicits", "scala.math.Ordering.Int", "scala.math.Ordering.Long", "scala.math.Ordering.Short", "scala.math.Ordering.String", "scala.math.Ordering.Symbol", "scala.math.Ordering.Unit", - "scala.math.Ordering#Double.IeeeOrdering", "scala.math.Ordering#Double.TotalOrdering", - "scala.math.Ordering#Float.IeeeOrdering", "scala.math.Ordering#Float.TotalOrdering", - "scala.package.#::", - "scala.PartialFunction.ElementWiseExtractor", - "scala.Predef.any2stringadd", - "scala.Predef.ArrowAssoc", "scala.Predef.Ensuring", "scala.Predef.StringFormat", - "scala.runtime.Tuple2Zipped.Ops", "scala.runtime.Tuple3Zipped.Ops", - "scala.sys.process.BasicIO.LazilyListed", "scala.sys.process.BasicIO.Streamed", "scala.sys.process.BasicIO.Uncloseable", - "scala.sys.Prop.DoubleProp", "scala.sys.Prop.FileProp", "scala.sys.Prop.IntProp", "scala.sys.Prop.StringProp", - "scala.util.control.Exception.Catch", - "scala.util.control.TailCalls.Call", "scala.util.control.TailCalls.Cont", "scala.util.control.TailCalls.Done", - "scala.util.Either.LeftProjection", "scala.util.Either.MergeableEither", "scala.util.Either.RightProjection", - "scala.util.matching.Regex.Groups", "scala.util.matching.Regex.Match", - "scala.util.package.chaining", - "scala.util.Using.Manager", "scala.util.Using.Releasable", "scala.util.Using#Releasable.AutoCloseableIsReleasable", - ).map(ProblemFilters.exclude[MissingFieldProblem]) - } - ) -} From df829004df74b0153afc2f47a98048e697ff3897 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 13:45:22 +0200 Subject: [PATCH 05/10] chore: add CI jobs for MiMa in stdlib --- .github/workflows/stdlib.yaml | 40 +++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/.github/workflows/stdlib.yaml b/.github/workflows/stdlib.yaml index 058f8b1ca5fa..8e7add3b6803 100644 --- a/.github/workflows/stdlib.yaml +++ b/.github/workflows/stdlib.yaml @@ -280,6 +280,46 @@ jobs: - name: Compile `scaladoc` run: ./project/scripts/sbt scaladoc-new/compile + ################################################################################################# + ########################################### MiMa JOBS ########################################### + ################################################################################################# + + mima-scala-library-nonbootstrapped: + runs-on: ubuntu-latest + needs: scala-library-nonbootstrapped + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Report MiMa issues in `scala-library-nonbootstrapped` + run: ./project/scripts/sbt scala-library-nonbootstrapped/mimaReportBinaryIssues + + mima-scala-library-bootstrapped: + runs-on: ubuntu-latest + needs: scala-library-bootstrapped + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Report MiMa issues in `scala-library-bootstrapped` + run: ./project/scripts/sbt scala-library-bootstrapped/mimaReportBinaryIssues + ################################################################################################# ########################################### TEST JOBS ########################################### ################################################################################################# From b301b8cd7a835374e73bdce6ad9581e4b9d32a2d Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 15:24:49 +0200 Subject: [PATCH 06/10] chore: add filter for `module def` methods being final in Scala 3 --- project/MiMaFilters.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index e42d08192fb4..14ddd4d02db0 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -509,6 +509,13 @@ object MiMaFilters { ProblemFilters.exclude[FinalClassProblem]("scala.util.control.TailCalls$Done$"), ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Groups$"), ProblemFilters.exclude[FinalClassProblem]("scala.util.matching.Regex$Match$"), + // ====== objects inside classes will get a method too, `module def` :) ====== + ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueOrdering"), + ProblemFilters.exclude[FinalMethodProblem]("scala.Enumeration.ValueSet"), + ProblemFilters.exclude[FinalMethodProblem]("scala.StringContext.s"), + ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPosition"), + ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"), + ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"), ), // Breaking changes since last LTS From 7b3fd49e9a4318b419edae5d68f0a3bd2f043ee0 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 15:25:32 +0200 Subject: [PATCH 07/10] chore: add filters for issue #22495 --- project/MiMaFilters.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 14ddd4d02db0..c91986a7868a 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -516,6 +516,21 @@ object MiMaFilters { ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPosition"), ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"), ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"), + + // Issue #22495 (will be fixed in a later PR and should be fixed before any release) + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.iterateUntilEmpty$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak2$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.linesSeparated$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.escape$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.toBooleanImpl$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.unwrapArg$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.iterateUntilEmpty$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll1$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple2Zipped.coll2$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll1$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll2$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll3$extension"), ), // Breaking changes since last LTS From 40c58eeffb65d97702f1fcd5e56654661071be6d Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 15:56:22 +0200 Subject: [PATCH 08/10] chore: add all the remaining filters --- project/MiMaFilters.scala | 52 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index c91986a7868a..19b95d35937e 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -517,8 +517,24 @@ object MiMaFilters { ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.RelaxedPositioner"), ProblemFilters.exclude[FinalMethodProblem]("scala.io.Source.NoPositioner"), + // Class initializers, fine to omit them + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language."), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.language#experimental."), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.util.Properties."), + + // These are inner objects/private classes and it is fine to not have the outer reference captured. + // The code that is emitted is correct within the compilation unit and does not escape it + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.Enumeration#ValueOrdering.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.IterableOnceOps#Maximized.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.LinearSeqIterator#LazyCell.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.mutable.PriorityQueue#ResizableArrayAccess.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.BatchingExecutor#AbstractBatch.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.concurrent.Channel#LinkedList.this"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.io.Source#RelaxedPosition.this"), + // Issue #22495 (will be fixed in a later PR and should be fixed before any release) ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.iterateUntilEmpty$extension"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.ArrayOps.scala$collection$ArrayOps$$elemTag$extension"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak$extension"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.isLineBreak2$extension"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringOps.linesSeparated$extension"), @@ -531,6 +547,42 @@ object MiMaFilters { ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll1$extension"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll2$extension"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.Tuple3Zipped.coll3$extension"), + + // singleton case classes modules inherit AbstractFunction1?? + ProblemFilters.exclude[MissingTypesProblem]("scala.ScalaReflectionException$"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.ScalaReflectionException.compose"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.ScalaReflectionException.andThen"), + ProblemFilters.exclude[MissingTypesProblem]("scala.UninitializedFieldError$"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.UninitializedFieldError.compose"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.UninitializedFieldError.andThen"), + ProblemFilters.exclude[MissingTypesProblem]("scala.collection.StringView$"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringView.compose"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.collection.StringView.andThen"), + + // This issue only arise in the non-bootstrapped stdlib + // It has to do with the fact that the special erasure of Pure was handled such as + // `scala.Pure`, not `scala.caps.Pure`. This filter should be removed once we move to 3.8.1 + ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.Map.from"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.SeqMap.from"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.Map.from"), + ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.mutable.SeqMap.from"), + + // TO INVESTIGATE: This constructor changed, but it is private... why complaining? + ProblemFilters.exclude[IncompatibleMethTypeProblem]("scala.collection.immutable.LazyList.this"), + // This one should be fine, public class inside private object + ProblemFilters.exclude[IncompatibleResultTypeProblem]("scala.collection.immutable.LazyList#LazyBuilder#DeferredState.eval"), + + // MIX IN FORWARDERS ISSUE (SHOULD BE FIXED WHEN WE REMERGE THE PR) + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.StrictOptimizedSeqOps.prepended"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.StrictOptimizedSeqOps.appended"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.StrictOptimizedSeqOps.appendedAll"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.StrictOptimizedSeqOps.prependedAll"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.StrictOptimizedSeqOps.padTo"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.immutable.StrictOptimizedSeqOps.updated"), + ProblemFilters.exclude[NewMixinForwarderProblem]("scala.collection.immutable.StrictOptimizedSeqOps.patch"), + + // NO IDEA FOR NOW :) + ProblemFilters.exclude[ReversedMissingMethodProblem]("scala.collection.mutable.ArrayDequeOps.scala$collection$mutable$ArrayDequeOps$$super$sliding"), ), // Breaking changes since last LTS From 101e655e6244f8297f1581e4f00f1a860d25d330 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 16:36:07 +0200 Subject: [PATCH 09/10] chore: add MiMa checks for `scala3-interfaces` --- .github/workflows/stdlib.yaml | 39 +++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stdlib.yaml b/.github/workflows/stdlib.yaml index 8e7add3b6803..ab589f4c79c5 100644 --- a/.github/workflows/stdlib.yaml +++ b/.github/workflows/stdlib.yaml @@ -48,6 +48,23 @@ jobs: - name: Compile `scala3-library-nonbootstrapped` run: ./project/scripts/sbt scala3-library-nonbootstrapped/compile + scala3-interfaces: + runs-on: ubuntu-latest + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Compile `scala3-interfaces` + run: ./project/scripts/sbt scala3-interfaces/compile + tasty-core-nonbootstrapped: runs-on: ubuntu-latest needs: [scala3-library-nonbootstrapped] @@ -67,7 +84,7 @@ jobs: scala3-compiler-nonbootstrapped: runs-on: ubuntu-latest - needs: [tasty-core-nonbootstrapped, scala3-library-nonbootstrapped] + needs: [tasty-core-nonbootstrapped, scala3-library-nonbootstrapped, scala3-interfaces] steps: - name: Git Checkout uses: actions/checkout@v5 @@ -155,7 +172,7 @@ jobs: scala3-compiler-bootstrapped: runs-on: ubuntu-latest - needs: [tasty-core-bootstrapped, scala3-library-bootstrapped] + needs: [tasty-core-bootstrapped, scala3-library-bootstrapped, scala3-interfaces] steps: - name: Git Checkout uses: actions/checkout@v5 @@ -302,6 +319,24 @@ jobs: - name: Report MiMa issues in `scala-library-nonbootstrapped` run: ./project/scripts/sbt scala-library-nonbootstrapped/mimaReportBinaryIssues + mima-scala3-interfaces: + runs-on: ubuntu-latest + needs: scala3-interfaces + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Report MiMa issues in `scala3-interfaces` + run: ./project/scripts/sbt scala3-interfaces/mimaReportBinaryIssues + mima-scala-library-bootstrapped: runs-on: ubuntu-latest needs: scala-library-bootstrapped From e274d0cdc46c42c7d58a024ba01083e3ab86ef9e Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Fri, 12 Sep 2025 16:59:49 +0200 Subject: [PATCH 10/10] chore: add MiMa checks for `tasty-core` --- .github/workflows/stdlib.yaml | 36 +++++++++++++++++++++++++++++++++++ project/Build.scala | 9 ++++++++- project/MiMaFilters.scala | 7 +++++++ 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.github/workflows/stdlib.yaml b/.github/workflows/stdlib.yaml index ab589f4c79c5..3555510aec63 100644 --- a/.github/workflows/stdlib.yaml +++ b/.github/workflows/stdlib.yaml @@ -337,6 +337,24 @@ jobs: - name: Report MiMa issues in `scala3-interfaces` run: ./project/scripts/sbt scala3-interfaces/mimaReportBinaryIssues + mima-tasty-core-nonbootstrapped: + runs-on: ubuntu-latest + needs: tasty-core-nonbootstrapped + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Report MiMa issues in `tasty-core-nonbootstrapped` + run: ./project/scripts/sbt tasty-core-nonbootstrapped/mimaReportBinaryIssues + mima-scala-library-bootstrapped: runs-on: ubuntu-latest needs: scala-library-bootstrapped @@ -355,6 +373,24 @@ jobs: - name: Report MiMa issues in `scala-library-bootstrapped` run: ./project/scripts/sbt scala-library-bootstrapped/mimaReportBinaryIssues + mima-tasty-core-bootstrapped: + runs-on: ubuntu-latest + needs: tasty-core-bootstrapped + steps: + - name: Git Checkout + uses: actions/checkout@v5 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + distribution: 'temurin' + java-version: 17 + cache: 'sbt' + + - uses: sbt/setup-sbt@v1 + - name: Report MiMa issues in `tasty-core-bootstrapped` + run: ./project/scripts/sbt tasty-core-bootstrapped-new/mimaReportBinaryIssues + ################################################################################################# ########################################### TEST JOBS ########################################### ################################################################################################# diff --git a/project/Build.scala b/project/Build.scala index c10239bf4e95..b2d2e5fd9cd6 100644 --- a/project/Build.scala +++ b/project/Build.scala @@ -1973,6 +1973,7 @@ object Build { /* Configuration of the org.scala-lang:tasty-core_3:*.**.**-nonbootstrapped project */ lazy val `tasty-core-nonbootstrapped` = project.in(file("tasty")) .dependsOn(`scala3-library-nonbootstrapped`) + .settings(commonMiMaSettings) .settings( name := "tasty-core-nonbootstrapped", moduleName := "tasty-core", @@ -2026,13 +2027,16 @@ object Build { Test / envVars ++= Map( "EXPECTED_TASTY_VERSION" -> expectedTastyVersion, ), - + mimaForwardIssueFilters := MiMaFilters.TastyCore.ForwardsBreakingChanges, + mimaBackwardIssueFilters := MiMaFilters.TastyCore.BackwardsBreakingChanges, + customMimaReportBinaryIssues("MiMaFilters.TastyCore"), ) /* Configuration of the org.scala-lang:tasty-core_3:*.**.**-bootstrapped project */ lazy val `tasty-core-bootstrapped-new` = project.in(file("tasty")) .dependsOn(`scala3-library-bootstrapped-new`) .settings(publishSettings) + .settings(commonMiMaSettings) .settings( name := "tasty-core-bootstrapped", moduleName := "tasty-core", @@ -2095,6 +2099,9 @@ object Build { Test / envVars ++= Map( "EXPECTED_TASTY_VERSION" -> expectedTastyVersion, ), + mimaForwardIssueFilters := MiMaFilters.TastyCore.ForwardsBreakingChanges, + mimaBackwardIssueFilters := MiMaFilters.TastyCore.BackwardsBreakingChanges, + customMimaReportBinaryIssues("MiMaFilters.TastyCore"), ) // ============================================================================================== diff --git a/project/MiMaFilters.scala b/project/MiMaFilters.scala index 19b95d35937e..4f8f8e8dc2d1 100644 --- a/project/MiMaFilters.scala +++ b/project/MiMaFilters.scala @@ -617,6 +617,13 @@ object MiMaFilters { ) val BackwardsBreakingChanges: Map[String, Seq[ProblemFilter]] = Map( + Build.mimaPreviousDottyVersion -> Seq( + // These are legitimate issues that needs to be investigated + ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy"), + ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$1"), + ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$2"), + ProblemFilters.exclude[DirectMissingMethodProblem]("dotty.tools.tasty.TastyVersion.copy$default$3"), + ), // Breaking changes since last LTS Build.mimaPreviousLTSDottyVersion -> Seq.empty // We should never break backwards compatibility )