From f76e3aa2bb27dd82c53d15acb4907b01da31455a Mon Sep 17 00:00:00 2001 From: Eugene Yokota Date: Wed, 25 Jan 2017 20:42:15 -0500 Subject: [PATCH] use java.util.Optional in Position --- .../src/main/java/xsbti/Position.java | 17 ++++--- .../sbt/internal/util/AbstractEntry.scala | 2 +- .../sbt/internal/util/ChannelLogEntry.scala | 2 +- .../util/codec/AbstractEntryFormats.scala | 2 +- .../util/codec/ChannelLogEntryFormats.scala | 2 +- .../internal/util/codec/JsonProtocol.scala | 2 +- .../src/main/contraband/interface.contra.txt | 19 +++++++ .../util/codecs/PositionFormats.scala | 49 +++++++++++++++++++ .../util/codecs/SeverityFormats.scala | 33 +++++++++++++ .../main/scala/sbt/util/InterfaceUtil.scala | 23 ++++++--- .../src/main/scala/sbt/util/Logger.scala | 3 ++ project/contraband.sbt | 2 +- 12 files changed, 137 insertions(+), 19 deletions(-) create mode 100644 internal/util-logging/src/main/contraband/interface.contra.txt create mode 100644 internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala create mode 100644 internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala diff --git a/internal/util-interface/src/main/java/xsbti/Position.java b/internal/util-interface/src/main/java/xsbti/Position.java index 96c60ebb2..be0239046 100644 --- a/internal/util-interface/src/main/java/xsbti/Position.java +++ b/internal/util-interface/src/main/java/xsbti/Position.java @@ -3,16 +3,19 @@ */ package xsbti; +import java.io.File; +import java.util.Optional; + public interface Position { - Maybe line(); + Optional line(); String lineContent(); - Maybe offset(); + Optional offset(); // pointer to the column position of the error/warning - Maybe pointer(); - Maybe pointerSpace(); + Optional pointer(); + Optional pointerSpace(); - Maybe sourcePath(); - Maybe sourceFile(); -} \ No newline at end of file + Optional sourcePath(); + Optional sourceFile(); +} diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala index 1c08e3cad..c20b78e1b 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/AbstractEntry.scala @@ -1,5 +1,5 @@ /** - * This code is generated using sbt-datatype. + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. */ // DO NOT EDIT MANUALLY diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ChannelLogEntry.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ChannelLogEntry.scala index b7350efee..ec3a282dc 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ChannelLogEntry.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/ChannelLogEntry.scala @@ -1,5 +1,5 @@ /** - * This code is generated using sbt-datatype. + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. */ // DO NOT EDIT MANUALLY diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/AbstractEntryFormats.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/AbstractEntryFormats.scala index b797af060..2711ef949 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/AbstractEntryFormats.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/AbstractEntryFormats.scala @@ -1,5 +1,5 @@ /** - * This code is generated using sbt-datatype. + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. */ // DO NOT EDIT MANUALLY diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/ChannelLogEntryFormats.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/ChannelLogEntryFormats.scala index 4c8d666d9..c8db52bec 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/ChannelLogEntryFormats.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/ChannelLogEntryFormats.scala @@ -1,5 +1,5 @@ /** - * This code is generated using sbt-datatype. + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. */ // DO NOT EDIT MANUALLY diff --git a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/JsonProtocol.scala b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/JsonProtocol.scala index a2bfe0f25..bd721cdfe 100644 --- a/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/JsonProtocol.scala +++ b/internal/util-logging/src/main/contraband-scala/sbt/internal/util/codec/JsonProtocol.scala @@ -1,5 +1,5 @@ /** - * This code is generated using sbt-datatype. + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. */ // DO NOT EDIT MANUALLY diff --git a/internal/util-logging/src/main/contraband/interface.contra.txt b/internal/util-logging/src/main/contraband/interface.contra.txt new file mode 100644 index 000000000..dd3091750 --- /dev/null +++ b/internal/util-logging/src/main/contraband/interface.contra.txt @@ -0,0 +1,19 @@ +package sbt.internal.util +@target(Java) +@codecPackage("sbt.internal.util.codec") +@fullCodec("JsonProtocol") + +enum Severity +{ + Info, Warn, Error +} + +type Position { + line: Int + lineContent: String! + offset: Int + pointer: Int + pointerSpace: String + sourcePath: String + sourceFile: java.io.File +} diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala new file mode 100644 index 000000000..d6ddf8049 --- /dev/null +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/PositionFormats.scala @@ -0,0 +1,49 @@ +/** + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +package sbt.internal.util.codec +import _root_.sjsonnew.{ deserializationError, Builder, JsonFormat, Unbuilder } +import xsbti.Position +import java.util.Optional + +trait PositionFormats { self: sjsonnew.BasicJsonProtocol => + implicit lazy val PositionFormat: JsonFormat[Position] = new JsonFormat[Position] { + override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Position = { + jsOpt match { + case Some(js) => + unbuilder.beginObject(js) + val line0 = unbuilder.readField[Optional[java.lang.Integer]]("line") + val lineContent0 = unbuilder.readField[String]("lineContent") + val offset0 = unbuilder.readField[Optional[java.lang.Integer]]("offset") + val pointer0 = unbuilder.readField[Optional[java.lang.Integer]]("pointer") + val pointerSpace0 = unbuilder.readField[Optional[String]]("pointerSpace") + val sourcePath0 = unbuilder.readField[Optional[String]]("sourcePath") + val sourceFile0 = unbuilder.readField[Optional[java.io.File]]("sourceFile") + unbuilder.endObject() + new Position() { + override val line = line0 + override val lineContent = lineContent0 + override val offset = offset0 + override val pointer = pointer0 + override val pointerSpace = pointerSpace0 + override val sourcePath = sourcePath0 + override val sourceFile = sourceFile0 + } + case None => + deserializationError("Expected JsObject but found None") + } + } + override def write[J](obj: Position, builder: Builder[J]): Unit = { + builder.beginObject() + builder.addField("line", obj.line) + builder.addField("lineContent", obj.lineContent) + builder.addField("offset", obj.offset) + builder.addField("pointer", obj.pointer) + builder.addField("pointerSpace", obj.pointerSpace) + builder.addField("sourcePath", obj.sourcePath) + builder.addField("sourceFile", obj.sourceFile) + builder.endObject() + } + } +} diff --git a/internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala new file mode 100644 index 000000000..7548a2ff1 --- /dev/null +++ b/internal/util-logging/src/main/scala/sbt/internal/util/codecs/SeverityFormats.scala @@ -0,0 +1,33 @@ +/** + * This code is generated using [[http://www.scala-sbt.org/contraband/ sbt-contraband]]. + */ + +package sbt.internal.util.codec + +import _root_.sjsonnew.{ deserializationError, Builder, JsonFormat, Unbuilder } +import xsbti.Severity; + +trait SeverityFormats { self: sjsonnew.BasicJsonProtocol => + implicit lazy val SeverityFormat: JsonFormat[Severity] = new JsonFormat[Severity] { + override def read[J](jsOpt: Option[J], unbuilder: Unbuilder[J]): Severity = { + jsOpt match { + case Some(js) => + unbuilder.readString(js) match { + case "Info" => Severity.Info + case "Warn" => Severity.Warn + case "Error" => Severity.Error + } + case None => + deserializationError("Expected JsString but found None") + } + } + override def write[J](obj: Severity, builder: Builder[J]): Unit = { + val str = obj match { + case Severity.Info => "Info" + case Severity.Warn => "Warn" + case Severity.Error => "Error" + } + builder.writeString(str) + } + } +} diff --git a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala index d88a93674..328ba8bc7 100644 --- a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala +++ b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala @@ -2,6 +2,7 @@ package sbt.util import xsbti.{ Maybe, F0, F1, T2, Position, Problem, Severity } import java.io.File +import java.util.Optional object InterfaceUtil { def f0[A](a: => A): F0[A] = new ConcreteF0[A](a) @@ -18,6 +19,16 @@ object InterfaceUtil { case None => Maybe.nothing() } + def jo2o[A](o: Optional[A]): Option[A] = + if (o.isPresent) Some(o.get) + else None + + def o2jo[A](o: Option[A]): Optional[A] = + o match { + case Some(v) => Optional.ofNullable(v) + case None => Optional.empty[A]() + } + def position(line0: Option[Integer], content: String, offset0: Option[Integer], pointer0: Option[Integer], pointerSpace0: Option[String], sourcePath0: Option[String], sourceFile0: Option[File]): Position = new ConcretePosition(line0, content, offset0, pointer0, pointerSpace0, sourcePath0, sourceFile0) @@ -61,13 +72,13 @@ object InterfaceUtil { sourcePath0: Option[String], sourceFile0: Option[File] ) extends Position { - val line = o2m(line0) + val line = o2jo(line0) val lineContent = content - val offset = o2m(offset0) - val pointer = o2m(pointer0) - val pointerSpace = o2m(pointerSpace0) - val sourcePath = o2m(sourcePath0) - val sourceFile = o2m(sourceFile0) + val offset = o2jo(offset0) + val pointer = o2jo(pointer0) + val pointerSpace = o2jo(pointerSpace0) + val sourcePath = o2jo(sourcePath0) + val sourceFile = o2jo(sourceFile0) } private final class ConcreteProblem( diff --git a/internal/util-logging/src/main/scala/sbt/util/Logger.scala b/internal/util-logging/src/main/scala/sbt/util/Logger.scala index 08945b379..fd5b34a60 100644 --- a/internal/util-logging/src/main/scala/sbt/util/Logger.scala +++ b/internal/util-logging/src/main/scala/sbt/util/Logger.scala @@ -9,6 +9,7 @@ import sys.process.ProcessLogger import sbt.internal.util.{ BufferedLogger, FullLogger } import java.io.File +import java.util.Optional /** * This is intended to be the simplest logging interface for use by code that wants to log. @@ -88,6 +89,8 @@ object Logger { def f0[A](a: => A): F0[A] = InterfaceUtil.f0[A](a) def m2o[A](m: Maybe[A]): Option[A] = InterfaceUtil.m2o(m) def o2m[A](o: Option[A]): Maybe[A] = InterfaceUtil.o2m(o) + def jo2o[A](o: Optional[A]): Option[A] = InterfaceUtil.jo2o(o) + def o2jo[A](o: Option[A]): Optional[A] = InterfaceUtil.o2jo(o) def position(line0: Option[Integer], content: String, offset0: Option[Integer], pointer0: Option[Integer], pointerSpace0: Option[String], sourcePath0: Option[String], sourceFile0: Option[File]): Position = InterfaceUtil.position(line0, content, offset0, pointer0, pointerSpace0, sourcePath0, sourceFile0) diff --git a/project/contraband.sbt b/project/contraband.sbt index 88961b8f9..8a80f6ea1 100644 --- a/project/contraband.sbt +++ b/project/contraband.sbt @@ -1 +1 @@ -addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.3.0-M3") +addSbtPlugin("org.scala-sbt" % "sbt-contraband" % "0.3.0-M4")