From da4caf804fe05794911b929ed0fe4097f680a48e Mon Sep 17 00:00:00 2001 From: xuwei-k <6b656e6a69@gmail.com> Date: Fri, 3 Sep 2021 08:00:02 +0900 Subject: [PATCH] Enabled cross build with Scala 3.x for core --- .github/workflows/ci.yml | 2 +- build.sbt | 3 ++- .../scala/com/typesafe/tools/mima/core/MimaUnpickler.scala | 5 +++-- .../scala/com/typesafe/tools/mima/core/PickleBuffer.scala | 5 +++-- .../main/scala/com/typesafe/tools/mima/core/Signature.scala | 4 ++-- .../scala/com/typesafe/tools/mima/core/TastyUnpickler.scala | 4 ++-- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e4020982b..ab2cfae3b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: with: java-version: ${{ matrix.java }} - uses: coursier/cache-action@v6 - - run: "sbt test mimaReportBinaryIssues 'set sbtplugin/scriptedSbt := \"1.2.8\"' 'scripted sbt-mima-plugin/minimal'" + - run: "sbt +test mimaReportBinaryIssues 'set sbtplugin/scriptedSbt := \"1.2.8\"' 'scripted sbt-mima-plugin/minimal'" testFunctional: needs: build strategy: diff --git a/build.sbt b/build.sbt index c7df51388..50c648470 100644 --- a/build.sbt +++ b/build.sbt @@ -26,6 +26,7 @@ commands += Command.command("testStaging") { state => } val scala213 = "2.13.6" +val scala3 = "3.0.2" val root = project.in(file(".")).settings( name := "mima", @@ -39,7 +40,7 @@ val munit = "org.scalameta" %% "munit" % "0.7.29" val core = project.settings( name := "mima-core", - crossScalaVersions += scala213, + crossScalaVersions ++= Seq(scala213, scala3), libraryDependencies += munit % Test, testFrameworks += new TestFramework("munit.Framework"), MimaSettings.mimaSettings, diff --git a/core/src/main/scala/com/typesafe/tools/mima/core/MimaUnpickler.scala b/core/src/main/scala/com/typesafe/tools/mima/core/MimaUnpickler.scala index 77875038f..35c6840f6 100644 --- a/core/src/main/scala/com/typesafe/tools/mima/core/MimaUnpickler.scala +++ b/core/src/main/scala/com/typesafe/tools/mima/core/MimaUnpickler.scala @@ -279,11 +279,12 @@ object MimaUnpickler { var idx = 0 var res = 0L var b = 0L - do { + while({ b = data(idx).toLong idx += 1 res = (res << 7) + (b & 0x7f) - } while ((b & 0x80) != 0L) + (b & 0x80) != 0L + }) () res.toInt } diff --git a/core/src/main/scala/com/typesafe/tools/mima/core/PickleBuffer.scala b/core/src/main/scala/com/typesafe/tools/mima/core/PickleBuffer.scala index e10d5e00a..27aab391f 100644 --- a/core/src/main/scala/com/typesafe/tools/mima/core/PickleBuffer.scala +++ b/core/src/main/scala/com/typesafe/tools/mima/core/PickleBuffer.scala @@ -12,10 +12,11 @@ final class PickleBuffer(val bytes: Array[Byte]) { def readLongNat(): Long = { var b = 0L var x = 0L - do { + while({ b = readByte().toLong x = (x << 7) + (b & 0x7f) - } while ((b & 0x80) != 0L) + (b & 0x80) != 0L + }) () x } diff --git a/core/src/main/scala/com/typesafe/tools/mima/core/Signature.scala b/core/src/main/scala/com/typesafe/tools/mima/core/Signature.scala index 47edca804..b8cef5932 100644 --- a/core/src/main/scala/com/typesafe/tools/mima/core/Signature.scala +++ b/core/src/main/scala/com/typesafe/tools/mima/core/Signature.scala @@ -30,8 +30,8 @@ class Signature(private val signature: String) { newer.isEmpty || // ignore losing signature on constructors signature.endsWith(newer.tail) // ignore losing the 1st (outer) param (.tail drops the leading '(') - // a method that takes no parameters and returns Object can have no signature - override def toString = if (signature.isEmpty) "" else signature + // a method that takes no parameters and returns Object can have no signature + override def toString = if (signature.isEmpty) "" else signature } object Signature { diff --git a/core/src/main/scala/com/typesafe/tools/mima/core/TastyUnpickler.scala b/core/src/main/scala/com/typesafe/tools/mima/core/TastyUnpickler.scala index 04f0e1fda..3add12e7e 100644 --- a/core/src/main/scala/com/typesafe/tools/mima/core/TastyUnpickler.scala +++ b/core/src/main/scala/com/typesafe/tools/mima/core/TastyUnpickler.scala @@ -122,7 +122,7 @@ object TastyUnpickler { if (nextByte == SELFDEF) skipTree(readByte()) // self val classes = new ListBuffer[ClsDef] val meths = new ListBuffer[DefDef] - doUntil(end)(readByte match { + doUntil(end)(readByte() match { case TYPEDEF => readTypeDef() match { case clsDef: ClsDef => classes += clsDef case _ => } case DEFDEF => meths += readDefDef() case tag => skipTree(tag) @@ -354,7 +354,7 @@ object TastyUnpickler { final case class SimpleName(raw: String) extends Name final case class ObjectName(base: Name) extends Name - final case class TypeName private (base: Name) extends Name + final case class TypeName private[TastyUnpickler] (base: Name) extends Name final case class QualifiedName(qual: Name, sep: SimpleName, sel: SimpleName) extends Name final case class UniqueName(qual: Name, sep: SimpleName, num: Int) extends Name