From 181df8f3ab11deb2639faf182e8a01bb7676f2dc Mon Sep 17 00:00:00 2001 From: Stefano Baghino <43749967+stefanobaghino-da@users.noreply.github.com> Date: Tue, 24 Mar 2020 12:25:05 +0100 Subject: [PATCH] Act on Option2Iterable wart (#5154) Some Option2Iterable ignore annotations are not needed, others were needed for unused methods. In a few occasions we were ignoring the warning for the very purpose for which is was there, i.e. avoiding an implicit conversion. I'm all for not verifying this rule if we agree we don't need it. For ProcessFailedException it was a bit gratuitous, I changed the way in which the exception message is built. CHANGELOG_BEGIN CHANGELOG_END --- .../backend/java/inner/ToValueGenerator.scala | 1 - .../transaction/ApiTransactionService.scala | 1 - .../sandbox/ScenarioLoadingITBase.scala | 1 - .../sandbox/ScenarioLoadingITDivulgence.scala | 1 - .../testing/postgresql/PostgresAround.scala | 50 +++++++++---------- .../digitalasset/navigator/UIBackend.scala | 5 +- .../navigator/config/Config.scala | 5 +- .../navigator/console/AsciiTable.scala | 3 +- .../navigator/console/commands/Exercise.scala | 6 +-- .../navigator/console/commands/Info.scala | 15 ------ .../navigator/graphql/GraphQLSchema.scala | 16 +++--- .../digitalasset/navigator/model/Ledger.scala | 9 ---- 12 files changed, 36 insertions(+), 77 deletions(-) diff --git a/language-support/java/codegen/src/main/scala/com/digitalasset/daml/lf/codegen/backend/java/inner/ToValueGenerator.scala b/language-support/java/codegen/src/main/scala/com/digitalasset/daml/lf/codegen/backend/java/inner/ToValueGenerator.scala index 6a5dd8ca77..068cdf35ad 100644 --- a/language-support/java/codegen/src/main/scala/com/digitalasset/daml/lf/codegen/backend/java/inner/ToValueGenerator.scala +++ b/language-support/java/codegen/src/main/scala/com/digitalasset/daml/lf/codegen/backend/java/inner/ToValueGenerator.scala @@ -26,7 +26,6 @@ import scala.collection.JavaConverters._ * method it's overloading, meaning that the return type will be * boxed even if it's a DAML-LF primitive */ -@SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) object ToValueGenerator { import Types._ diff --git a/ledger/sandbox/src/main/scala/com/digitalasset/platform/apiserver/services/transaction/ApiTransactionService.scala b/ledger/sandbox/src/main/scala/com/digitalasset/platform/apiserver/services/transaction/ApiTransactionService.scala index 09bba36c33..031bfac3fe 100644 --- a/ledger/sandbox/src/main/scala/com/digitalasset/platform/apiserver/services/transaction/ApiTransactionService.scala +++ b/ledger/sandbox/src/main/scala/com/digitalasset/platform/apiserver/services/transaction/ApiTransactionService.scala @@ -64,7 +64,6 @@ final class ApiTransactionService private ( private val subscriptionIdCounter = new AtomicLong() - @SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) override def getTransactions( request: GetTransactionsRequest): Source[GetTransactionsResponse, NotUsed] = withEnrichedLoggingContext( diff --git a/ledger/sandbox/src/test/lib/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITBase.scala b/ledger/sandbox/src/test/lib/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITBase.scala index 104ef9ba17..67314e7c89 100644 --- a/ledger/sandbox/src/test/lib/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITBase.scala +++ b/ledger/sandbox/src/test/lib/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITBase.scala @@ -38,7 +38,6 @@ import scala.concurrent.Future @SuppressWarnings( Array( "org.wartremover.warts.Any", - "org.wartremover.warts.Option2Iterable", "org.wartremover.warts.StringPlusAny" )) abstract class ScenarioLoadingITBase diff --git a/ledger/sandbox/src/test/suite/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITDivulgence.scala b/ledger/sandbox/src/test/suite/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITDivulgence.scala index bfcb933fb4..989cd61fdb 100644 --- a/ledger/sandbox/src/test/suite/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITDivulgence.scala +++ b/ledger/sandbox/src/test/suite/scala/com/digitalasset/platform/sandbox/ScenarioLoadingITDivulgence.scala @@ -21,7 +21,6 @@ import org.scalatest.{Matchers, WordSpec} @SuppressWarnings( Array( "org.wartremover.warts.Any", - "org.wartremover.warts.Option2Iterable", "org.wartremover.warts.StringPlusAny" )) class ScenarioLoadingITDivulgence diff --git a/libs-scala/postgresql-testing/src/main/scala/com/digitalasset/testing/postgresql/PostgresAround.scala b/libs-scala/postgresql-testing/src/main/scala/com/digitalasset/testing/postgresql/PostgresAround.scala index 0e9b4a6260..f23d78e8ce 100644 --- a/libs-scala/postgresql-testing/src/main/scala/com/digitalasset/testing/postgresql/PostgresAround.scala +++ b/libs-scala/postgresql-testing/src/main/scala/com/digitalasset/testing/postgresql/PostgresAround.scala @@ -163,11 +163,11 @@ trait PostgresAround { IOUtils.copy(process.getErrorStream, stderr, StandardCharsets.UTF_8) val logs = Files.readAllLines(postgresFixture.logFile).asScala throw new ProcessFailedException( - description, - command, - Some(stdout.toString), - Some(stderr.toString), - logs, + description = description, + command = command, + stdout = stdout.toString, + stderr = stderr.toString, + logs = logs, ) } } catch { @@ -175,7 +175,12 @@ trait PostgresAround { throw e case NonFatal(e) => val logs = Files.readAllLines(postgresFixture.logFile).asScala - throw new ProcessFailedException(description, command, None, None, logs, e) + throw new ProcessFailedException( + description = description, + command = command, + logs = logs, + cause = e, + ) } } @@ -190,31 +195,22 @@ object PostgresAround { private val userName = "test" private val databaseName = "test" - @SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) private class ProcessFailedException( description: String, command: Seq[String], - stdout: Option[String], - stderr: Option[String], - logs: Seq[String], - cause: Throwable, + stdout: String = "", + stderr: String = "", + logs: Seq[String] = Seq.empty, + cause: Throwable = null, ) extends RuntimeException( Seq( - Some(s"Failed to $description."), - Some(s"Command:"), - Some(command.mkString("\n")), - stdout.map(output => s"\nSTDOUT:\n$output"), - stderr.map(output => s"\nSTDERR:\n$output"), - Some(logs).filter(_.nonEmpty).map(lines => s"\nLogs:\n${lines.mkString("\n")}"), - ).flatten.mkString("\n"), + s"Failed to $description.", + s"Command:", + command.mkString("\n"), + s"\nSTDOUT:\n$stdout", + s"\nSTDERR:\n$stderr", + logs.map(lines => s"\nLogs:\n${lines.mkString("\n")}"), + ).mkString("\n"), cause, - ) { - def this( - description: String, - command: Seq[String], - stdout: Option[String], - stderr: Option[String], - logs: Seq[String], - ) = this(description, command, stdout, stderr, logs, null) - } + ) } diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/UIBackend.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/UIBackend.scala index cdeeb2c0f7..557ae2a0f9 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/UIBackend.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/UIBackend.scala @@ -44,7 +44,7 @@ import scala.util.{Failure, Success, Try} * A new UI backend can be implemented by extending [[UIBackend]] and by providing * the [[customEndpoints]], [[customRoutes]], [[applicationInfo]] definitions. */ -@SuppressWarnings(Array("org.wartremover.warts.Any", "org.wartremover.warts.Option2Iterable")) +@SuppressWarnings(Array("org.wartremover.warts.Any")) abstract class UIBackend extends LazyLogging with ApplicationInfoJsonSupport { def customEndpoints: Set[CustomEndpoint[_]] @@ -78,7 +78,8 @@ abstract class UIBackend extends LazyLogging with ApplicationInfoJsonSupport { case Cookie(cookies) => cookies .filter(_.name == "session-id") - .flatMap(cookiePair => Session.current(cookiePair.value).map(cookiePair.value -> _)) + .flatMap(cookiePair => + Session.current(cookiePair.value).map(cookiePair.value -> _).toList) .headOption case _ => None diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/config/Config.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/config/Config.scala index 5df504c9f2..f555b4a52a 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/config/Config.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/config/Config.scala @@ -22,12 +22,11 @@ import scalaz.Tag final case class UserConfig(password: Option[String], party: PartyState, role: Option[String]) /* The configuration has an empty map as default list of users because you can login as party too */ -@SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) final case class Config(users: Map[String, UserConfig] = Map.empty[String, UserConfig]) { def userIds: Set[String] = users.keySet - def roles: Set[String] = users.values.flatMap(_.role)(collection.breakOut) + def roles: Set[String] = users.values.flatMap(_.role.toList)(collection.breakOut) def parties: Set[PartyState] = users.values.map(_.party)(collection.breakOut) } @@ -45,7 +44,7 @@ sealed abstract class ConfigOption { final case class DefaultConfig(path: Path) extends ConfigOption final case class ExplicitConfig(path: Path) extends ConfigOption -@SuppressWarnings(Array("org.wartremover.warts.Any", "org.wartremover.warts.Option2Iterable")) +@SuppressWarnings(Array("org.wartremover.warts.Any")) object Config { private[this] val logger = LoggerFactory.getLogger(this.getClass) diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/AsciiTable.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/AsciiTable.scala index dcf8393372..db707e1a9e 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/AsciiTable.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/AsciiTable.scala @@ -71,8 +71,7 @@ object Maths { * <- 7 -> * */ -@SuppressWarnings( - Array("org.wartremover.warts.Option2Iterable", "org.wartremover.warts.StringPlusAny")) +@SuppressWarnings(Array("org.wartremover.warts.StringPlusAny")) final class AsciiTable { private var header: Option[Seq[String]] = None private val streamBuilder = new StreamBuilder[Seq[String]] diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Exercise.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Exercise.scala index 5e10e76743..4d5438474b 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Exercise.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Exercise.scala @@ -19,11 +19,7 @@ import scala.concurrent.{Await, ExecutionContext, Future} import scala.concurrent.duration._ import scala.util.Try -@SuppressWarnings( - Array( - "org.wartremover.warts.Product", - "org.wartremover.warts.Option2Iterable", - "org.wartremover.warts.Serializable")) +@SuppressWarnings(Array("org.wartremover.warts.Product", "org.wartremover.warts.Serializable")) case object Exercise extends SimpleCommand { def name: String = "exercise" diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Info.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Info.scala index 1963c9b700..48902ecc1e 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Info.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/console/commands/Info.scala @@ -6,7 +6,6 @@ package com.digitalasset.navigator.console.commands import java.util.concurrent.TimeUnit import com.digitalasset.ledger.api.refinements.ApiTypes -import com.digitalasset.ledger.api.tls.TlsConfiguration import com.digitalasset.navigator.console._ import com.digitalasset.navigator.store.Store._ import com.digitalasset.navigator.time.TimeProviderType @@ -17,7 +16,6 @@ import scala.concurrent.Await import scala.concurrent.duration._ import scala.util.Try -@SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) case object Info extends SimpleCommand { def name: String = "info" @@ -114,19 +112,6 @@ case object Info extends SimpleCommand { } yield (state, getBanner(state) + "\n" + Pretty.yaml(prettyInfo(info, state))) } - private def tlsInfo(info: Option[TlsConfiguration]): String = { - info - .map(c => - if (c.enabled) { - val crt = c.keyCertChainFile.map(_ => "CRT") - val pem = c.keyFile.map(_ => "PEM") - val cacrt = c.trustCertCollectionFile.map(_ => "CACRT") - val options = List(crt, pem, cacrt).flatten - s"Enabled, using ${options.mkString(", ")}." - } else "Disabled.") - .getOrElse("Not set.") - } - def getBanner(state: State): String = { s"Navigator version: ${state.applicationInfo.version}" } diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/graphql/GraphQLSchema.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/graphql/GraphQLSchema.scala index 0635fd9605..d1684a77a7 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/graphql/GraphQLSchema.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/graphql/GraphQLSchema.scala @@ -41,11 +41,7 @@ case class UserFacingError(message: String) } /** Schema definition for the UI backend GraphQL API. */ -@SuppressWarnings( - Array( - "org.wartremover.warts.Any", - "org.wartremover.warts.Option2Iterable", - "org.wartremover.warts.JavaSerializable")) +@SuppressWarnings(Array("org.wartremover.warts.Any", "org.wartremover.warts.JavaSerializable")) final class GraphQLSchema(customEndpoints: Set[CustomEndpoint[_]]) { implicit private val actorTimeout: Timeout = Timeout(60, TimeUnit.SECONDS) @@ -586,27 +582,27 @@ final class GraphQLSchema(customEndpoints: Set[CustomEndpoint[_]]) { case ContractType.name => ids .map(id => ApiTypes.ContractId(id.toString)) - .flatMap(ledger.contract(_, context.ctx.templates)) + .flatMap(ledger.contract(_, context.ctx.templates).toList) .toSeq case TemplateType.name => ids .map(id => TemplateStringId(id.toString)) - .flatMap(context.ctx.templates.templateByStringId) + .flatMap(context.ctx.templates.templateByStringId(_).toList) .toSeq case CommandType.name => ids .map(id => ApiTypes.CommandId(id.toString)) - .flatMap(context.ctx.ledger.command(_, context.ctx.templates)) + .flatMap(context.ctx.ledger.command(_, context.ctx.templates).toList) .toSeq case EventType.name => ids .map(id => ApiTypes.EventId(id.toString)) - .flatMap(context.ctx.ledger.event(_, context.ctx.templates)) + .flatMap(context.ctx.ledger.event(_, context.ctx.templates).toList) .toSeq case TransactionType.name => ids .map(id => ApiTypes.TransactionId(id.toString)) - .flatMap(context.ctx.ledger.transaction(_, context.ctx.templates)) + .flatMap(context.ctx.ledger.transaction(_, context.ctx.templates).toList) .toSeq case _ => Seq.empty[Node[_]] } diff --git a/navigator/backend/src/main/scala/com/digitalasset/navigator/model/Ledger.scala b/navigator/backend/src/main/scala/com/digitalasset/navigator/model/Ledger.scala index bb52edcbd1..f6ea757d37 100644 --- a/navigator/backend/src/main/scala/com/digitalasset/navigator/model/Ledger.scala +++ b/navigator/backend/src/main/scala/com/digitalasset/navigator/model/Ledger.scala @@ -10,7 +10,6 @@ import com.typesafe.scalalogging.LazyLogging import scala.util.{Failure, Success, Try} /** In-memory projection of ledger events. */ -@SuppressWarnings(Array("org.wartremover.warts.Option2Iterable")) case class Ledger( private val forParty: ApiTypes.Party, private val lastTransaction: Option[Transaction], @@ -178,14 +177,6 @@ case class Ledger( } } - private def contractsByTemplateIdWithout(contractId: ApiTypes.ContractId) = { - val entryWithoutContract = for { - contract <- contractById.get(contractId) - templateContracts <- contractsByTemplateId.get(contract.template.id) - } yield contract.template.id -> (templateContracts - contract) - contractsByTemplateId ++ entryWithoutContract.toMap - } - def allContractsCount: Int = { if (useDatabase) { logErrorAndDefaultTo(db.contractCount(), 0)