From f1328134ada77d1c21374f7cca953a376a9b27f9 Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Tue, 27 Jun 2017 15:49:21 -0700 Subject: Library upgrades and code tweaks to support Scala 2.12 --- build.sbt | 10 +++++----- project/plugins.sbt | 2 +- src/main/scala/xyz/driver/core/app.scala | 4 ++-- .../xyz/driver/core/database/PatchedHsqldbProfile.scala | 6 +++--- src/main/scala/xyz/driver/core/database/database.scala | 6 +++--- src/main/scala/xyz/driver/core/database/package.scala | 2 +- src/main/scala/xyz/driver/core/file/GcsStorage.scala | 2 +- src/main/scala/xyz/driver/core/file/S3Storage.scala | 2 +- src/main/scala/xyz/driver/core/rest.scala | 8 ++++---- src/main/scala/xyz/driver/core/swagger.scala | 10 +++++----- src/test/scala/xyz/driver/core/AuthTest.scala | 2 +- src/test/scala/xyz/driver/core/CoreTest.scala | 2 +- src/test/scala/xyz/driver/core/FileTest.scala | 2 +- src/test/scala/xyz/driver/core/JsonTest.scala | 6 +++--- src/test/scala/xyz/driver/core/MessagesTest.scala | 12 ++++++------ 15 files changed, 38 insertions(+), 38 deletions(-) diff --git a/build.sbt b/build.sbt index 1de7260..6942993 100644 --- a/build.sbt +++ b/build.sbt @@ -10,16 +10,16 @@ lazy val core = (project in file(".")) "com.typesafe.akka" %% "akka-http-core" % akkaHttpV, "com.typesafe.akka" %% "akka-http-spray-json" % akkaHttpV, "com.typesafe.akka" %% "akka-http-testkit" % akkaHttpV, - "com.pauldijou" %% "jwt-core" % "0.9.2", - "org.scalatest" % "scalatest_2.11" % "2.2.6" % "test", - "org.scalacheck" %% "scalacheck" % "1.12.5" % "test", + "com.pauldijou" %% "jwt-core" % "0.14.0", + "org.scalatest" %% "scalatest" % "3.0.1" % "test", + "org.scalacheck" %% "scalacheck" % "1.13.4" % "test", "org.mockito" % "mockito-core" % "1.9.5" % "test", "com.github.swagger-akka-http" %% "swagger-akka-http" % "0.9.1", "com.amazonaws" % "aws-java-sdk-s3" % "1.11.26", "com.google.cloud" % "google-cloud-pubsub" % "0.17.2-alpha", "com.google.cloud" % "google-cloud-storage" % "1.0.1", - "com.typesafe.slick" %% "slick" % "3.1.1", + "com.typesafe.slick" %% "slick" % "3.2.1", "com.typesafe" % "config" % "1.2.1", - "com.typesafe.scala-logging" %% "scala-logging" % "3.4.0", + "com.typesafe.scala-logging" %% "scala-logging" % "3.5.0", "ch.qos.logback" % "logback-classic" % "1.1.3" )) diff --git a/project/plugins.sbt b/project/plugins.sbt index 83fdd9a..4da27d0 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,4 +1,4 @@ resolvers += "releases" at "https://drivergrp.jfrog.io/drivergrp/releases" credentials += Credentials("Artifactory Realm", "drivergrp.jfrog.io", "sbt-publisher", "ANC-d8X-Whm-USS") -addSbtPlugin("xyz.driver" % "sbt-settings" % "0.7.39") +addSbtPlugin("xyz.driver" % "sbt-settings" % "0.7.40") diff --git a/src/main/scala/xyz/driver/core/app.scala b/src/main/scala/xyz/driver/core/app.scala index 363f1e8..a64093a 100644 --- a/src/main/scala/xyz/driver/core/app.scala +++ b/src/main/scala/xyz/driver/core/app.scala @@ -104,7 +104,7 @@ object app { lazy val names = methods map (_.name) mkString ", " options { ctx => - optionalHeaderValueByType[Origin]() { originHeader => + optionalHeaderValueByType[Origin](()) { originHeader => respondWithHeaders(List[HttpHeader]( Allow(methods), `Access-Control-Allow-Methods`(methods), @@ -130,7 +130,7 @@ object app { http.bindAndHandle( route2HandlerFlow(extractHost { origin => extractClientIP { ip => - optionalHeaderValueByType[Origin]() { originHeader => + optionalHeaderValueByType[Origin](()) { originHeader => { ctx => val trackingId = rest.extractTrackingId(ctx.request) MDC.put("trackingId", trackingId) diff --git a/src/main/scala/xyz/driver/core/database/PatchedHsqldbProfile.scala b/src/main/scala/xyz/driver/core/database/PatchedHsqldbProfile.scala index 1331efc..a3f57c1 100644 --- a/src/main/scala/xyz/driver/core/database/PatchedHsqldbProfile.scala +++ b/src/main/scala/xyz/driver/core/database/PatchedHsqldbProfile.scala @@ -1,11 +1,11 @@ package xyz.driver.core.database -import slick.driver.HsqldbDriver +import slick.jdbc.HsqldbProfile import slick.jdbc.JdbcType import slick.ast.FieldSymbol -import slick.profile.RelationalProfile +import slick.relational.RelationalProfile -trait PatchedHsqldbProfile extends HsqldbDriver { +trait PatchedHsqldbProfile extends HsqldbProfile { override def defaultSqlTypeName(tmd: JdbcType[_], sym: Option[FieldSymbol]): String = tmd.sqlType match { case java.sql.Types.VARCHAR => val size = sym.flatMap(_.findColumnOption[RelationalProfile.ColumnOption.Length]) diff --git a/src/main/scala/xyz/driver/core/database/database.scala b/src/main/scala/xyz/driver/core/database/database.scala index 8426309..7855a16 100644 --- a/src/main/scala/xyz/driver/core/database/database.scala +++ b/src/main/scala/xyz/driver/core/database/database.scala @@ -1,7 +1,7 @@ package xyz.driver.core -import slick.backend.DatabaseConfig -import slick.driver.JdbcProfile +import slick.basic.DatabaseConfig +import slick.jdbc.JdbcProfile import xyz.driver.core.date.Date import xyz.driver.core.time.Time @@ -21,7 +21,7 @@ package database { val dbConfig: DatabaseConfig[JdbcProfile] = DatabaseConfig.forConfig(databaseName, config) new Database { - val profile: JdbcProfile = dbConfig.driver + val profile: JdbcProfile = dbConfig.profile val database: JdbcProfile#Backend#Database = dbConfig.db } } diff --git a/src/main/scala/xyz/driver/core/database/package.scala b/src/main/scala/xyz/driver/core/database/package.scala index b39169d..9385c8f 100644 --- a/src/main/scala/xyz/driver/core/database/package.scala +++ b/src/main/scala/xyz/driver/core/database/package.scala @@ -5,7 +5,7 @@ import java.util.Calendar import date.{Date, Month} import slick.dbio._ -import slick.driver.JdbcProfile +import slick.jdbc.JdbcProfile package object database { diff --git a/src/main/scala/xyz/driver/core/file/GcsStorage.scala b/src/main/scala/xyz/driver/core/file/GcsStorage.scala index 65a5a50..76438cf 100644 --- a/src/main/scala/xyz/driver/core/file/GcsStorage.scala +++ b/src/main/scala/xyz/driver/core/file/GcsStorage.scala @@ -11,7 +11,7 @@ import java.nio.file.{Path, Paths} import java.util.concurrent.TimeUnit import com.google.cloud.storage.Storage.BlobListOption -import com.google.cloud.storage._ +import com.google.cloud.storage.{Option => _, _} import xyz.driver.core.time.Time import xyz.driver.core.{Name, Revision, generators} diff --git a/src/main/scala/xyz/driver/core/file/S3Storage.scala b/src/main/scala/xyz/driver/core/file/S3Storage.scala index 49bebc8..311aab3 100644 --- a/src/main/scala/xyz/driver/core/file/S3Storage.scala +++ b/src/main/scala/xyz/driver/core/file/S3Storage.scala @@ -43,7 +43,7 @@ class S3Storage(s3: AmazonS3, bucket: Name[Bucket], executionContext: ExecutionC override def stream(filePath: Path): OptionT[Future, Source[ByteString, NotUsed]] = OptionT.optionT(Future { Option(s3.getObject(new GetObjectRequest(bucket.value, filePath.toString))).map { elem => - StreamConverters.fromInputStream(elem.getObjectContent, chunkSize).mapMaterializedValue(_ => NotUsed) + StreamConverters.fromInputStream(() => elem.getObjectContent(), chunkSize).mapMaterializedValue(_ => NotUsed) } }) diff --git a/src/main/scala/xyz/driver/core/rest.scala b/src/main/scala/xyz/driver/core/rest.scala index 1088e40..2527b75 100644 --- a/src/main/scala/xyz/driver/core/rest.scala +++ b/src/main/scala/xyz/driver/core/rest.scala @@ -91,7 +91,7 @@ object `package` { case Seq(start, end) => builder += ' ' builder ++= byteString.slice(start, end) - case Seq(byteStringLength) => // Should not match; sliding on at least 2 elements + case Seq(_) => // Should not match; sliding on at least 2 elements assert(indices.nonEmpty, s"Indices should have been nonEmpty: $indices") } builder.result @@ -205,7 +205,7 @@ trait Authorization[U <: User] { implicit ctx: ServiceRequestContext): Future[AuthorizationResult] } -class AlwaysAllowAuthorization[U <: User](implicit execution: ExecutionContext) extends Authorization[U] { +class AlwaysAllowAuthorization[U <: User] extends Authorization[U] { override def userHasPermissions(user: U, permissions: Seq[Permission])( implicit ctx: ServiceRequestContext): Future[AuthorizationResult] = { val permissionsMap = permissions.map(_ -> true).toMap @@ -427,9 +427,9 @@ class HttpRestServiceTransport(applicationName: Name[App], val request = requestStub .withHeaders(context.contextHeaders.toSeq.map { - case (ContextHeaders.TrackingIdHeader, headerValue) => + case (ContextHeaders.TrackingIdHeader, _) => RawHeader(ContextHeaders.TrackingIdHeader, context.trackingId) - case (ContextHeaders.StacktraceHeader, headerValue) => + case (ContextHeaders.StacktraceHeader, _) => RawHeader(ContextHeaders.StacktraceHeader, Option(MDC.get("stack")) .orElse(context.contextHeaders.get(ContextHeaders.StacktraceHeader)) diff --git a/src/main/scala/xyz/driver/core/swagger.scala b/src/main/scala/xyz/driver/core/swagger.scala index 36c52e0..a97e0ac 100644 --- a/src/main/scala/xyz/driver/core/swagger.scala +++ b/src/main/scala/xyz/driver/core/swagger.scala @@ -85,7 +85,7 @@ object swagger { val javaType = Json.mapper().constructType(`type`) (getEnumerationInstance(javaType.getRawClass) match { - case Some(enumInstance) => Option.empty[Model] // ignore scala enums + case Some(_) => Option.empty[Model] // ignore scala enums case None => val customObjectModel = customObjects.get(javaType.getRawClass).map { objectExampleJson => val properties = objectExampleJson.asJsObject.fields.mapValues(parseJsonValueToSwaggerProperty).flatMap { @@ -125,10 +125,10 @@ object swagger { case (key, value) => value.map(v => key -> v) } Option(new ObjectProperty(subProperties.asJava)) - case JsBoolean(value) => Option(booleanProperty()) - case JsNumber(value) => Option(numericProperty(example = Option(value))) - case JsString(value) => Option(stringProperty(example = Option(value))) - case _ => Option.empty[Property] + case JsBoolean(_) => Option(booleanProperty()) + case JsNumber(value) => Option(numericProperty(example = Option(value))) + case JsString(value) => Option(stringProperty(example = Option(value))) + case _ => Option.empty[Property] } } diff --git a/src/test/scala/xyz/driver/core/AuthTest.scala b/src/test/scala/xyz/driver/core/AuthTest.scala index 9018a3e..16f9e92 100644 --- a/src/test/scala/xyz/driver/core/AuthTest.scala +++ b/src/test/scala/xyz/driver/core/AuthTest.scala @@ -5,7 +5,7 @@ import akka.http.scaladsl.server.AuthenticationFailedRejection.CredentialsReject import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server._ import akka.http.scaladsl.testkit.ScalatestRouteTest -import org.scalatest.mock.MockitoSugar +import org.scalatest.mockito.MockitoSugar import org.scalatest.{FlatSpec, Matchers} import pdi.jwt.{Jwt, JwtAlgorithm} import xyz.driver.core.auth._ diff --git a/src/test/scala/xyz/driver/core/CoreTest.scala b/src/test/scala/xyz/driver/core/CoreTest.scala index 0518652..d280d73 100644 --- a/src/test/scala/xyz/driver/core/CoreTest.scala +++ b/src/test/scala/xyz/driver/core/CoreTest.scala @@ -3,7 +3,7 @@ package xyz.driver.core import java.io.ByteArrayOutputStream import org.mockito.Mockito._ -import org.scalatest.mock.MockitoSugar +import org.scalatest.mockito.MockitoSugar import org.scalatest.{FlatSpec, Matchers} class CoreTest extends FlatSpec with Matchers with MockitoSugar { diff --git a/src/test/scala/xyz/driver/core/FileTest.scala b/src/test/scala/xyz/driver/core/FileTest.scala index 717233e..ace0b07 100644 --- a/src/test/scala/xyz/driver/core/FileTest.scala +++ b/src/test/scala/xyz/driver/core/FileTest.scala @@ -5,7 +5,7 @@ import java.nio.file.Paths import org.mockito.Matchers._ import org.mockito.Mockito._ -import org.scalatest.mock.MockitoSugar +import org.scalatest.mockito.MockitoSugar import org.scalatest.{FlatSpec, Matchers} import xyz.driver.core.file.{FileSystemStorage, GcsStorage, S3Storage} diff --git a/src/test/scala/xyz/driver/core/JsonTest.scala b/src/test/scala/xyz/driver/core/JsonTest.scala index 760559c..bcf0ecf 100644 --- a/src/test/scala/xyz/driver/core/JsonTest.scala +++ b/src/test/scala/xyz/driver/core/JsonTest.scala @@ -144,9 +144,9 @@ class JsonTest extends FlatSpec with Matchers { implicit val case3Format = jsonFormat1(GadtCase3) val format = GadtJsonFormat.create[CustomGADT]("gadtTypeField") { - case t1: CustomGADT.GadtCase1 => "case1" - case t2: CustomGADT.GadtCase2 => "case2" - case t3: CustomGADT.GadtCase3 => "case3" + case _: CustomGADT.GadtCase1 => "case1" + case _: CustomGADT.GadtCase2 => "case2" + case _: CustomGADT.GadtCase3 => "case3" } { case "case1" => case1Format case "case2" => case2Format diff --git a/src/test/scala/xyz/driver/core/MessagesTest.scala b/src/test/scala/xyz/driver/core/MessagesTest.scala index abc4035..09558bc 100644 --- a/src/test/scala/xyz/driver/core/MessagesTest.scala +++ b/src/test/scala/xyz/driver/core/MessagesTest.scala @@ -3,12 +3,12 @@ package xyz.driver.core import java.util.Locale import com.typesafe.config.{ConfigException, ConfigFactory} -import org.scalatest.mock.MockitoSugar +import org.scalatest.mockito.MockitoSugar import org.scalatest.{FlatSpec, Matchers} import xyz.driver.core.messages.Messages import xyz.driver.core.logging.NoLogger -import scala.collection.JavaConversions._ +import scala.collection.JavaConverters._ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { @@ -17,7 +17,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { "Messages" should "read messages from config and format with parameters" in { - val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages) + val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages.asJava) val messages = Messages.messages(messagesConfig, NoLogger, Locale.US) @@ -28,12 +28,12 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { it should "be able to read messages for different locales" in { - val messagesConfig = ConfigFactory.parseMap( + val messagesConfig = ConfigFactory.parseMap(( englishLocaleMessages ++ Map( "zh.hello" -> "你好,世界!", "zh.greeting" -> "你好,{0}!", "zh.greetingFullName" -> "你好,{0} {1} {2}!" - )) + )).asJava) val englishMessages = Messages.messages(messagesConfig, NoLogger, Locale.US) val englishMessagesToo = Messages.messages(messagesConfig, NoLogger, Locale.ENGLISH) @@ -55,7 +55,7 @@ class MessagesTest extends FlatSpec with Matchers with MockitoSugar { it should "raise exception when locale is not available" in { - val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages) + val messagesConfig = ConfigFactory.parseMap(englishLocaleMessages.asJava) an[ConfigException.Missing] should be thrownBy Messages.messages(messagesConfig, NoLogger, Locale.GERMAN) -- cgit v1.2.3