This is an automated email from the ASF dual-hosted git repository.

He-Pin pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pekko-http.git


The following commit(s) were added to refs/heads/main by this push:
     new 56f2f5ad1 feat: add Scala next cross-build coverage (#1129)
56f2f5ad1 is described below

commit 56f2f5ad19de2bd891954ea2c254e16a936d028d
Author: He-Pin(kerr) <[email protected]>
AuthorDate: Mon Jul 6 01:57:18 2026 +0800

    feat: add Scala next cross-build coverage (#1129)
    
    Motivation:\nPrepare the build for the next Scala 3 LTS lane while keeping 
published Scala artifacts on the current 2.13.x and 3.3.x release 
lines.\n\nModification:\nCentralize the next Scala version lookup for CI, keep 
published crossScalaVersions on release lanes, force the next lane only in 
build/test matrices, and fix Scala 3.8.4 compile, MiMa, and formatting 
issues.\n\nResult:\n2.13.x, 3.3.8, and 3.8.4 build/test coverage can run while 
MiMa and publishing remain on published Scal [...]
---
 .github/scripts/resolve-scala-version.sh           |  48 ++++++
 .github/workflows/validate-and-test.yml            |  18 ++-
 build.sbt                                          |   6 +-
 .../directives/BasicDirectivesExamplesTest.java    |   1 +
 .../pekko/remote/testkit/MultiNodeConfig.scala     |   3 +-
 .../pekko/http/javadsl/server/MinimalHttpApp.java  |   1 +
 .../DontLeakActorsOnFailingConnectionSpecs.scala   |   3 +-
 project/Common.scala                               |  18 +--
 project/Dependencies.scala                         |   9 +-
 project/NoScala3.scala                             |  10 +-
 project/ValidatePullRequest.scala                  | 180 +++++++++++----------
 11 files changed, 188 insertions(+), 109 deletions(-)

diff --git a/.github/scripts/resolve-scala-version.sh 
b/.github/scripts/resolve-scala-version.sh
new file mode 100644
index 000000000..f631a194c
--- /dev/null
+++ b/.github/scripts/resolve-scala-version.sh
@@ -0,0 +1,48 @@
+#!/usr/bin/env bash
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+set -euo pipefail
+
+scala_version="${1:?scala version is required}"
+repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
+
+resolve_from_build() {
+  local pattern="$1"
+  local resolved
+  resolved="$(sed -n "$pattern" "$repo_root/project/Dependencies.scala")"
+  if [ -z "$resolved" ]; then
+    echo "Unable to resolve Scala version '$scala_version' from 
project/Dependencies.scala" >&2
+    exit 1
+  fi
+  printf '%s\n' "$resolved"
+}
+
+case "$scala_version" in
+  2.13 | 2.13.x | scala213)
+    resolve_from_build 's/.*val scala213Version = "\(.*\)".*/\1/p'
+    ;;
+  3.3 | 3.3.x | scala3)
+    resolve_from_build 's/.*val scala3Version = "\(.*\)".*/\1/p'
+    ;;
+  next)
+    resolve_from_build 's/.*val scala3NextVersion = "\(.*\)".*/\1/p'
+    ;;
+  *)
+    printf '%s\n' "$scala_version"
+    ;;
+esac
diff --git a/.github/workflows/validate-and-test.yml 
b/.github/workflows/validate-and-test.yml
index d6a0aede5..f16ec0811 100644
--- a/.github/workflows/validate-and-test.yml
+++ b/.github/workflows/validate-and-test.yml
@@ -70,7 +70,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        SCALA_VERSION: [2.13, 3.3]
+        SCALA_VERSION: [scala213, scala3, next]
         JDK: [17]
     steps:
       - name: Checkout
@@ -101,17 +101,27 @@ jobs:
         run: cp .jvmopts-ci .jvmopts
 
       - name: Compile everything
-        run: sbt ++${{ matrix.SCALA_VERSION }} Test/compile
+        run: |-
+          scala_version="$(bash .github/scripts/resolve-scala-version.sh "${{ 
matrix.SCALA_VERSION }}")"
+          sbt "++${scala_version}!" Test/compile
 
       # Quick testing for PR validation
       - name: Validate pull request for JDK ${{ matrix.JDK }}, Scala ${{ 
matrix.SCALA_VERSION }}
         if: ${{ github.event_name == 'pull_request' }}
-        run: sbt -Dpekko.http.parallelExecution=false 
-Dpekko.test.timefactor=2 ++${{ matrix.SCALA_VERSION }} validatePullRequest
+        run: |-
+          scala_version="$(bash .github/scripts/resolve-scala-version.sh "${{ 
matrix.SCALA_VERSION }}")"
+          sbt -Dpekko.http.parallelExecution=false -Dpekko.test.timefactor=2 
"++${scala_version}!" validatePullRequest
 
       # Full testing for pushes
       - name: Run all tests JDK ${{ matrix.JDK }}, Scala ${{ 
matrix.SCALA_VERSION }}
         if: ${{ github.event_name == 'push' }}
-        run: sbt -Dpekko.http.parallelExecution=false 
-Dpekko.test.timefactor=2 ++${{ matrix.SCALA_VERSION }} mimaReportBinaryIssues 
test
+        run: |-
+          scala_version="$(bash .github/scripts/resolve-scala-version.sh "${{ 
matrix.SCALA_VERSION }}")"
+          if [ "${{ matrix.SCALA_VERSION }}" = "next" ]; then
+            sbt -Dpekko.http.parallelExecution=false -Dpekko.test.timefactor=2 
"++${scala_version}!" test
+          else
+            sbt -Dpekko.http.parallelExecution=false -Dpekko.test.timefactor=2 
"++${scala_version}!" mimaReportBinaryIssues test
+          fi
 
       - name: Upload test results
         uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a 
# v7.0.1
diff --git a/build.sbt b/build.sbt
index b40df8b3c..6bbb69a59 100644
--- a/build.sbt
+++ b/build.sbt
@@ -112,7 +112,7 @@ lazy val parsing = project("parsing")
   .settings(AutomaticModuleName.settings("pekko.http.parsing"))
   .addPekkoModuleDependency("pekko-actor", "provided", 
PekkoCoreDependency.default)
   .settings(Dependencies.parsing)
-  .settings(scalacOptions ++= 
Common.notOnScala39Plus(Seq("-language:_")).value)
+  .settings(scalacOptions ++= Common.onlyOnScala2(Seq("-language:_")).value)
   .settings(scalaMacroSupport)
   .enablePlugins(ScaladocNoVerificationOfDiagrams)
   .enablePlugins(ReproducibleBuildsPlugin)
@@ -140,7 +140,7 @@ lazy val http = project("http")
   .addPekkoModuleDependency("pekko-stream", "provided", 
PekkoCoreDependency.default)
   .settings(Dependencies.http)
   .settings(
-    Compile / scalacOptions ++= 
Common.notOnScala39Plus(Seq("-language:_")).value)
+    Compile / scalacOptions ++= Common.onlyOnScala2(Seq("-language:_")).value)
   .settings(scalaMacroSupport)
   .enablePlugins(BootstrapGenjavadoc, BoilerplatePlugin)
   .enablePlugins(ReproducibleBuildsPlugin)
@@ -195,7 +195,7 @@ lazy val httpTestkit = project("http-testkit")
   .settings(
     // don't ignore Suites which is the default for the junit-interface
     testOptions += Tests.Argument(TestFrameworks.JUnit, "--ignore-runners="),
-    Compile / scalacOptions ++= 
Common.notOnScala39Plus(Seq("-language:_")).value,
+    Compile / scalacOptions ++= Common.onlyOnScala2(Seq("-language:_")).value,
     Test / run / mainClass := 
Some("org.apache.pekko.http.javadsl.SimpleServerApp"))
   .enablePlugins(BootstrapGenjavadoc, MultiNodeScalaTest, 
ScaladocNoVerificationOfDiagrams)
   .enablePlugins(ReproducibleBuildsPlugin)
diff --git 
a/docs/src/test/java/docs/http/javadsl/server/directives/BasicDirectivesExamplesTest.java
 
b/docs/src/test/java/docs/http/javadsl/server/directives/BasicDirectivesExamplesTest.java
index 04c19087b..0b2b5ad1c 100644
--- 
a/docs/src/test/java/docs/http/javadsl/server/directives/BasicDirectivesExamplesTest.java
+++ 
b/docs/src/test/java/docs/http/javadsl/server/directives/BasicDirectivesExamplesTest.java
@@ -253,6 +253,7 @@ import static 
org.apache.pekko.http.javadsl.server.Directives.extractActorSystem
 
 // #extractActorSystem
 
+@SuppressWarnings("unchecked")
 public class BasicDirectivesExamplesTest extends JUnitJupiterRouteTest {
 
   @Test
diff --git 
a/http-tests/src/multi-jvm/scala/org/apache/pekko/remote/testkit/MultiNodeConfig.scala
 
b/http-tests/src/multi-jvm/scala/org/apache/pekko/remote/testkit/MultiNodeConfig.scala
index cc03ed96b..052a875d4 100644
--- 
a/http-tests/src/multi-jvm/scala/org/apache/pekko/remote/testkit/MultiNodeConfig.scala
+++ 
b/http-tests/src/multi-jvm/scala/org/apache/pekko/remote/testkit/MultiNodeConfig.scala
@@ -272,7 +272,8 @@ abstract class MultiNodeSpec(val myself: RoleName, _system: 
ActorSystem, _roles:
       ActorSystem(MultiNodeSpec.getCallerName(classOf[MultiNodeSpec]), 
ConfigFactory.load(config.config)),
       config.roles, config.deployments)
 
-  val log: LoggingAdapter = Logging(system, this.getClass)(LogSource.fromClass)
+  private implicit val logSource: LogSource[Class[?]] = LogSource.fromClass
+  val log: LoggingAdapter = Logging(system, this.getClass)
 
   /**
    * Enrich `.await()` onto all Awaitables, using remaining duration from the 
innermost
diff --git 
a/http-tests/src/test/java/org/apache/pekko/http/javadsl/server/MinimalHttpApp.java
 
b/http-tests/src/test/java/org/apache/pekko/http/javadsl/server/MinimalHttpApp.java
index 4da7e9d2e..33c48cc7f 100644
--- 
a/http-tests/src/test/java/org/apache/pekko/http/javadsl/server/MinimalHttpApp.java
+++ 
b/http-tests/src/test/java/org/apache/pekko/http/javadsl/server/MinimalHttpApp.java
@@ -19,6 +19,7 @@ import org.apache.pekko.Done;
 import org.apache.pekko.actor.ActorSystem;
 import org.apache.pekko.http.javadsl.ServerBinding;
 
+@SuppressWarnings("deprecation")
 public class MinimalHttpApp extends HttpApp {
 
   CompletableFuture<Done> shutdownTrigger = new CompletableFuture<>();
diff --git 
a/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/server/DontLeakActorsOnFailingConnectionSpecs.scala
 
b/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/server/DontLeakActorsOnFailingConnectionSpecs.scala
index b2b44aca1..467f37540 100644
--- 
a/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/server/DontLeakActorsOnFailingConnectionSpecs.scala
+++ 
b/http-tests/src/test/scala/org/apache/pekko/http/scaladsl/server/DontLeakActorsOnFailingConnectionSpecs.scala
@@ -52,7 +52,8 @@ abstract class 
DontLeakActorsOnFailingConnectionSpecs(poolImplementation: String
   implicit val system: ActorSystem = 
ActorSystem("DontLeakActorsOnFailingConnectionSpecs-" + poolImplementation, 
config)
   implicit val materializer: Materializer = 
Materializer.createMaterializer(system)
 
-  val log = Logging(system, getClass)(LogSource.fromClass)
+  private implicit val logSource: LogSource[Class[?]] = LogSource.fromClass
+  val log = Logging(system, getClass)
 
   "Http.superPool" should {
 
diff --git a/project/Common.scala b/project/Common.scala
index 936e15d70..98c029cb6 100644
--- a/project/Common.scala
+++ b/project/Common.scala
@@ -63,7 +63,8 @@ object Common extends AutoPlugin {
       "-Wconf:msg=pattern binding uses refutable extractor:s",
       "-Wconf:msg=is more specialized than the right hand side:s",
       "-Wconf:cat=deprecation:s")).value,
-    scalacOptions ++= onlyOnScala3Below39(Seq("-Yfuture-lazy-vals")).value,
+    scalacOptions ++= onlyOnScala38OrLater(Seq("-Wconf:any:s")).value,
+    scalacOptions ++= onlyOnScala33(Seq("-Yfuture-lazy-vals")).value,
     javacOptions ++=
       Seq("-encoding", "UTF-8", "--release", javacTarget),
     mimaReportSignatureProblems := true,
@@ -77,16 +78,15 @@ object Common extends AutoPlugin {
   def onlyOnScala3[T](values: Seq[T]): Def.Initialize[Seq[T]] = Def.setting {
     if (scalaVersion.value.startsWith("3")) values else Seq.empty[T]
   }
-  def onlyOnScala3Below39[T](values: Seq[T]): Def.Initialize[Seq[T]] = 
Def.setting {
-    if (scalaVersion.value.startsWith("3") && 
CrossVersion.partialVersion(scalaVersion.value).exists(_._2 < 9)) values
-    else Seq.empty[T]
+  def onlyOnScala33[T](values: Seq[T]): Def.Initialize[Seq[T]] = Def.setting {
+    if (scalaVersion.value.startsWith("3.3.")) values else Seq.empty[T]
   }
-  def notOnScala39Plus[T](values: Seq[T]): Def.Initialize[Seq[T]] = 
Def.setting {
-    if (scalaVersion.value.startsWith("3") && 
CrossVersion.partialVersion(scalaVersion.value).exists(_._2 >= 9))
-      Seq.empty[T]
-    else values
+  def onlyOnScala38OrLater[T](values: Seq[T]): Def.Initialize[Seq[T]] = 
Def.setting {
+    CrossVersion.partialVersion(scalaVersion.value) match {
+      case Some((3, minor)) if minor >= 8 => values
+      case _                              => Seq.empty[T]
+    }
   }
-
   def scalaMinorVersion: Def.Initialize[Long] = Def.setting { 
CrossVersion.partialVersion(scalaVersion.value).get._2 }
 
 }
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 44a5314e6..daf2cbbe6 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -37,11 +37,12 @@ object Dependencies {
 
   val scala213Version = "2.13.18"
   val scala3Version = "3.3.8"
-  val allScalaVersions = Seq(scala213Version, scala3Version)
+  val scala3NextVersion = "3.8.4"
+  val publishedScalaVersions = Seq(scala213Version, scala3Version)
 
   val Versions = Seq(
-    crossScalaVersions := allScalaVersions,
-    scalaVersion := allScalaVersions.head)
+    crossScalaVersions := publishedScalaVersions,
+    scalaVersion := publishedScalaVersions.head)
 
   object Provided {
     val jsr305 = "com.google.code.findbugs" % "jsr305" % "3.0.2" % "provided"
@@ -65,7 +66,7 @@ object Dependencies {
 
     val caffeine = "com.github.ben-manes.caffeine" % "caffeine" % "3.2.4"
 
-    val scalafix = "ch.epfl.scala" %% "scalafix-core" % 
Dependencies.scalafixVersion
+    val scalafix = ("ch.epfl.scala" %% "scalafix-core" % 
Dependencies.scalafixVersion).cross(CrossVersion.for3Use2_13)
 
     val parboiled = "org.parboiled" %% "parboiled" % "2.5.1"
 
diff --git a/project/NoScala3.scala b/project/NoScala3.scala
index e028a2bf8..6c5560e7d 100644
--- a/project/NoScala3.scala
+++ b/project/NoScala3.scala
@@ -12,5 +12,13 @@ import Keys._
 
 object NoScala3 extends AutoPlugin {
   override def projectSettings: Seq[Def.Setting[?]] = Seq(
-    crossScalaVersions := 
crossScalaVersions.value.filterNot(_.startsWith("3.")))
+    crossScalaVersions := 
crossScalaVersions.value.filterNot(_.startsWith("3.")),
+    Compile / unmanagedSourceDirectories := {
+      if (scalaVersion.value.startsWith("3.")) Seq.empty
+      else (Compile / unmanagedSourceDirectories).value
+    },
+    Test / unmanagedSourceDirectories := {
+      if (scalaVersion.value.startsWith("3.")) Seq.empty
+      else (Test / unmanagedSourceDirectories).value
+    })
 }
diff --git a/project/ValidatePullRequest.scala 
b/project/ValidatePullRequest.scala
index 1fc73bd36..9d8ddddc4 100644
--- a/project/ValidatePullRequest.scala
+++ b/project/ValidatePullRequest.scala
@@ -33,6 +33,7 @@ import sbtunidoc.BaseUnidocPlugin.autoImport.unidoc
 
 import scala.collection.JavaConverters._
 import scala.collection.immutable
+import scala.language.postfixOps
 import scala.sys.process._
 import scala.util.Try
 import scala.util.matching.Regex
@@ -392,9 +393,13 @@ object AggregatePRValidation extends AutoPlugin {
         fw.println(msg)
       }
 
+      @scala.annotation.nowarn("cat=deprecation")
       val testLogger = LogExchange.logger("testLogger")
       val appender = MainAppender.defaultBacked(useFormat = false)(fw)
-      LogExchange.bindLoggerAppenders("testLogger", appender -> Level.Info :: 
Nil)
+      @scala.annotation.nowarn("cat=deprecation")
+      def installTestLoggerAppender(): Unit =
+        LogExchange.bindLoggerAppenders("testLogger", appender -> Level.Info 
:: Nil)
+      installTestLoggerAppender()
 
       log.info("")
       if (failed.nonEmpty || mimaFailures.nonEmpty || failedTasks.nonEmpty) {
@@ -516,102 +521,105 @@ object MimaWithPrValidation extends AutoPlugin {
   override lazy val projectSettings = Seq(
     ValidatePR / additionalTasks += mimaResult,
     mimaResult := {
-      import com.typesafe.tools.mima.core
-      def reportModuleErrors(module: ModuleID,
-          backward: List[core.Problem],
-          forward: List[core.Problem],
-          filters: Seq[core.ProblemFilter],
-          backwardFilters: Map[String, Seq[core.ProblemFilter]],
-          forwardFilters: Map[String, Seq[core.ProblemFilter]],
-          log: String => Unit, projectName: String): Boolean = {
-        // filters * found is n-squared, it's fixable in principle by 
special-casing known
-        // filter types or something, not worth it most likely...
-
-        val versionOrdering = {
-          // version string "x.y.z" is converted to an Int tuple (x, y, z) for 
comparison
-          val VersionRegex = """(\d+)\.?(\d+)?\.?(.*)?""".r
-          def int(versionPart: String) =
-            Try(versionPart.replace("x", 
Short.MaxValue.toString).filter(_.isDigit).toInt).getOrElse(0)
-          Ordering[(Int, Int, Int)].on[String] { case VersionRegex(x, y, z) => 
(int(x), int(y), int(z)) }
-        }
-        def isReported(module: ModuleID, verionedFilters: Map[String, 
Seq[core.ProblemFilter]])(
-            problem: core.Problem) =
-          (verionedFilters.collect {
-            // get all filters that apply to given module version or any 
version after it
-            case f @ (version, filters) if versionOrdering.gteq(version, 
module.revision) => filters
-          }.flatten ++ filters).forall { f =>
-            if (f(problem)) {
-              true
-            } else {
-              // log(projectName + ": filtered out: " + problem.description + 
"\n  filtered by: " + f)
-              false
-            }
+      if (scalaVersion.value == Dependencies.scala3NextVersion) NoErrors
+      else {
+        import com.typesafe.tools.mima.core
+        def reportModuleErrors(module: ModuleID,
+            backward: List[core.Problem],
+            forward: List[core.Problem],
+            filters: Seq[core.ProblemFilter],
+            backwardFilters: Map[String, Seq[core.ProblemFilter]],
+            forwardFilters: Map[String, Seq[core.ProblemFilter]],
+            log: String => Unit, projectName: String): Boolean = {
+          // filters * found is n-squared, it's fixable in principle by 
special-casing known
+          // filter types or something, not worth it most likely...
+
+          val versionOrdering = {
+            // version string "x.y.z" is converted to an Int tuple (x, y, z) 
for comparison
+            val VersionRegex = """(\d+)\.?(\d+)?\.?(.*)?""".r
+            def int(versionPart: String) =
+              Try(versionPart.replace("x", 
Short.MaxValue.toString).filter(_.isDigit).toInt).getOrElse(0)
+            Ordering[(Int, Int, Int)].on[String] { case VersionRegex(x, y, z) 
=> (int(x), int(y), int(z)) }
           }
+          def isReported(module: ModuleID, verionedFilters: Map[String, 
Seq[core.ProblemFilter]])(
+              problem: core.Problem) =
+            (verionedFilters.collect {
+              // get all filters that apply to given module version or any 
version after it
+              case f @ (version, filters) if versionOrdering.gteq(version, 
module.revision) => filters
+            }.flatten ++ filters).forall { f =>
+              if (f(problem)) {
+                true
+              } else {
+                // log(projectName + ": filtered out: " + problem.description 
+ "\n  filtered by: " + f)
+                false
+              }
+            }
 
-        val backErrors = backward.filter(isReported(module, backwardFilters))
-        val forwErrors = forward.filter(isReported(module, forwardFilters))
+          val backErrors = backward.filter(isReported(module, backwardFilters))
+          val forwErrors = forward.filter(isReported(module, forwardFilters))
 
-        val filteredCount = backward.size + forward.size - backErrors.size - 
forwErrors.size
-        val filteredNote = if (filteredCount > 0) " (filtered " + 
filteredCount + ")" else ""
+          val filteredCount = backward.size + forward.size - backErrors.size - 
forwErrors.size
+          val filteredNote = if (filteredCount > 0) " (filtered " + 
filteredCount + ")" else ""
 
-        // TODO - Line wrapping an other magikz
-        def prettyPrint(p: core.Problem, affected: String): String = {
-          " * " + p.description(affected) + p.howToFilter.map("\n   filter 
with: " + _).getOrElse("")
-        }
+          // TODO - Line wrapping an other magikz
+          def prettyPrint(p: core.Problem, affected: String): String = {
+            " * " + p.description(affected) + p.howToFilter.map("\n   filter 
with: " + _).getOrElse("")
+          }
 
-        log(
-          s"$projectName: found ${backErrors.size + forwErrors.size} potential 
binary incompatibilities while checking against $module $filteredNote")
-        ((backErrors.map { p: core.Problem => prettyPrint(p, "current") }) ++
-        (forwErrors.map { p: core.Problem => prettyPrint(p, "other") 
})).foreach { p =>
-          log(p)
+          log(
+            s"$projectName: found ${backErrors.size + forwErrors.size} 
potential binary incompatibilities while checking against $module 
$filteredNote")
+          ((backErrors.map { p: core.Problem => prettyPrint(p, "current") }) ++
+          (forwErrors.map { p: core.Problem => prettyPrint(p, "other") 
})).foreach { p =>
+            log(p)
+          }
+          backErrors.nonEmpty || forwErrors.nonEmpty
         }
-        backErrors.nonEmpty || forwErrors.nonEmpty
-      }
 
-      def withLogger[T](f: (String => Unit) => T): (String, T) = {
-        val stringWriter = new StringWriter()
-        val printWriter = new PrintWriter(stringWriter)
+        def withLogger[T](f: (String => Unit) => T): (String, T) = {
+          val stringWriter = new StringWriter()
+          val printWriter = new PrintWriter(stringWriter)
 
-        val result = f(printWriter.println)
+          val result = f(printWriter.println)
 
-        printWriter.close()
-        stringWriter.close()
-        (stringWriter.toString, result)
-      }
-
-      val allResults =
-        mimaPreviousClassfiles.value.toSeq.map {
-          case (moduleId, file) =>
-            val problems = SbtMima.runMima(
-              file,
-              mimaCurrentClassfiles.value,
-              (mimaFindBinaryIssues / fullClasspath).value,
-              mimaCheckDirection.value,
-              scalaVersion.value,
-              streams.value.log,
-              Nil)
-
-            val binary = mimaBinaryIssueFilters.value
-            val backward = mimaBackwardIssueFilters.value
-            val forward = mimaForwardIssueFilters.value
-
-            withLogger { logger =>
-              reportModuleErrors(
-                moduleId,
-                problems._1, problems._2,
-                binary,
-                backward,
-                forward,
-                logger,
-                name.value)
-            }
+          printWriter.close()
+          stringWriter.close()
+          (stringWriter.toString, result)
         }
 
-      val noErrors = allResults.forall(!_._2)
-      if (noErrors) NoErrors
-      else {
-        val erroneous = allResults.filter(_._2)
-        Problems(erroneous.map(_._1).mkString("\n"))
+        val allResults =
+          mimaPreviousClassfiles.value.toSeq.map {
+            case (moduleId, file) =>
+              val problems = SbtMima.runMima(
+                file,
+                mimaCurrentClassfiles.value,
+                (mimaFindBinaryIssues / fullClasspath).value,
+                mimaCheckDirection.value,
+                scalaVersion.value,
+                streams.value.log,
+                Nil)
+
+              val binary = mimaBinaryIssueFilters.value
+              val backward = mimaBackwardIssueFilters.value
+              val forward = mimaForwardIssueFilters.value
+
+              withLogger { logger =>
+                reportModuleErrors(
+                  moduleId,
+                  problems._1, problems._2,
+                  binary,
+                  backward,
+                  forward,
+                  logger,
+                  name.value)
+              }
+          }
+
+        val noErrors = allResults.forall(!_._2)
+        if (noErrors) NoErrors
+        else {
+          val erroneous = allResults.filter(_._2)
+          Problems(erroneous.map(_._1).mkString("\n"))
+        }
       }
     })
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to