mirror of https://github.com/sbt/sbt.git
Merge pull request #175 from smarter/followup-range
Follow-up to the fields added in #173, and add Problem#rendered
This commit is contained in:
commit
94cb6bfbb7
|
|
@ -33,7 +33,7 @@ val mimaSettings = Def settings (
|
||||||
mimaPreviousArtifacts := Set(
|
mimaPreviousArtifacts := Set(
|
||||||
"1.0.0", "1.0.1", "1.0.2", "1.0.3",
|
"1.0.0", "1.0.1", "1.0.2", "1.0.3",
|
||||||
"1.1.0", "1.1.1", "1.1.2", "1.1.3",
|
"1.1.0", "1.1.1", "1.1.2", "1.1.3",
|
||||||
"1.2.0",
|
"1.2.0", "1.2.1"
|
||||||
) map (version =>
|
) map (version =>
|
||||||
organization.value %% moduleName.value % version
|
organization.value %% moduleName.value % version
|
||||||
cross (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled)
|
cross (if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled)
|
||||||
|
|
@ -54,7 +54,7 @@ lazy val utilRoot: Project = (project in file("."))
|
||||||
.settings(
|
.settings(
|
||||||
inThisBuild(
|
inThisBuild(
|
||||||
Seq(
|
Seq(
|
||||||
git.baseVersion := "1.2.1",
|
git.baseVersion := "1.2.2",
|
||||||
version := {
|
version := {
|
||||||
val v = version.value
|
val v = version.value
|
||||||
if (v contains "SNAPSHOT") git.baseVersion.value + "-SNAPSHOT"
|
if (v contains "SNAPSHOT") git.baseVersion.value + "-SNAPSHOT"
|
||||||
|
|
@ -124,8 +124,9 @@ lazy val utilLogging = (project in internalPath / "util-logging")
|
||||||
exclude[DirectMissingMethodProblem]("sbt.internal.util.SuccessEvent.copy*"),
|
exclude[DirectMissingMethodProblem]("sbt.internal.util.SuccessEvent.copy*"),
|
||||||
exclude[DirectMissingMethodProblem]("sbt.internal.util.TraceEvent.copy*"),
|
exclude[DirectMissingMethodProblem]("sbt.internal.util.TraceEvent.copy*"),
|
||||||
exclude[DirectMissingMethodProblem]("sbt.internal.util.StringEvent.copy*"),
|
exclude[DirectMissingMethodProblem]("sbt.internal.util.StringEvent.copy*"),
|
||||||
// Private final class constructor changed
|
// Private final class constructors changed
|
||||||
exclude[DirectMissingMethodProblem]("sbt.util.InterfaceUtil#ConcretePosition.this"),
|
exclude[DirectMissingMethodProblem]("sbt.util.InterfaceUtil#ConcretePosition.this"),
|
||||||
|
exclude[DirectMissingMethodProblem]("sbt.util.InterfaceUtil#ConcreteProblem.this"),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.configure(addSbtIO)
|
.configure(addSbtIO)
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,20 @@
|
||||||
*/
|
*/
|
||||||
package xsbti;
|
package xsbti;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public interface Problem
|
public interface Problem
|
||||||
{
|
{
|
||||||
String category();
|
String category();
|
||||||
Severity severity();
|
Severity severity();
|
||||||
String message();
|
String message();
|
||||||
Position position();
|
Position position();
|
||||||
|
|
||||||
|
// Default value to avoid breaking binary compatibility
|
||||||
|
/**
|
||||||
|
* If present, the string shown to the user when displaying this Problem.
|
||||||
|
* Otherwise, the Problem will be shown in an implementation-defined way
|
||||||
|
* based on the values of its other fields.
|
||||||
|
*/
|
||||||
|
default Optional<String> rendered() { return Optional.empty(); }
|
||||||
}
|
}
|
||||||
|
|
@ -16,6 +16,12 @@ type Position {
|
||||||
pointerSpace: String
|
pointerSpace: String
|
||||||
sourcePath: String
|
sourcePath: String
|
||||||
sourceFile: java.io.File
|
sourceFile: java.io.File
|
||||||
|
startOffset: Int
|
||||||
|
endOffset: Int
|
||||||
|
startLine: Int
|
||||||
|
startColumn: Int
|
||||||
|
endLine: Int
|
||||||
|
endColumn: Int
|
||||||
}
|
}
|
||||||
|
|
||||||
type Problem {
|
type Problem {
|
||||||
|
|
@ -23,4 +29,5 @@ type Problem {
|
||||||
severity: Severity!
|
severity: Severity!
|
||||||
message: String!
|
message: String!
|
||||||
position: Position!
|
position: Position!
|
||||||
|
rendered: String
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -19,6 +19,13 @@ trait PositionFormats { self: sjsonnew.BasicJsonProtocol =>
|
||||||
val pointerSpace0 = unbuilder.readField[Optional[String]]("pointerSpace")
|
val pointerSpace0 = unbuilder.readField[Optional[String]]("pointerSpace")
|
||||||
val sourcePath0 = unbuilder.readField[Optional[String]]("sourcePath")
|
val sourcePath0 = unbuilder.readField[Optional[String]]("sourcePath")
|
||||||
val sourceFile0 = unbuilder.readField[Optional[java.io.File]]("sourceFile")
|
val sourceFile0 = unbuilder.readField[Optional[java.io.File]]("sourceFile")
|
||||||
|
val startOffset0 = unbuilder.readField[Optional[java.lang.Integer]]("startOffset")
|
||||||
|
val endOffset0 = unbuilder.readField[Optional[java.lang.Integer]]("endOffset")
|
||||||
|
val startLine0 = unbuilder.readField[Optional[java.lang.Integer]]("startLine")
|
||||||
|
val startColumn0 = unbuilder.readField[Optional[java.lang.Integer]]("startColumn")
|
||||||
|
val endLine0 = unbuilder.readField[Optional[java.lang.Integer]]("endLine")
|
||||||
|
val endColumn0 = unbuilder.readField[Optional[java.lang.Integer]]("endColumn")
|
||||||
|
|
||||||
unbuilder.endObject()
|
unbuilder.endObject()
|
||||||
new Position() {
|
new Position() {
|
||||||
override val line = line0
|
override val line = line0
|
||||||
|
|
@ -28,6 +35,13 @@ trait PositionFormats { self: sjsonnew.BasicJsonProtocol =>
|
||||||
override val pointerSpace = pointerSpace0
|
override val pointerSpace = pointerSpace0
|
||||||
override val sourcePath = sourcePath0
|
override val sourcePath = sourcePath0
|
||||||
override val sourceFile = sourceFile0
|
override val sourceFile = sourceFile0
|
||||||
|
override val startOffset = startOffset0
|
||||||
|
override val endOffset = endOffset0
|
||||||
|
override val startLine = startLine0
|
||||||
|
override val startColumn = startColumn0
|
||||||
|
override val endLine = endLine0
|
||||||
|
override val endColumn = endColumn0
|
||||||
|
|
||||||
}
|
}
|
||||||
case None =>
|
case None =>
|
||||||
deserializationError("Expected JsObject but found None")
|
deserializationError("Expected JsObject but found None")
|
||||||
|
|
@ -42,6 +56,13 @@ trait PositionFormats { self: sjsonnew.BasicJsonProtocol =>
|
||||||
builder.addField("pointerSpace", obj.pointerSpace)
|
builder.addField("pointerSpace", obj.pointerSpace)
|
||||||
builder.addField("sourcePath", obj.sourcePath)
|
builder.addField("sourcePath", obj.sourcePath)
|
||||||
builder.addField("sourceFile", obj.sourceFile)
|
builder.addField("sourceFile", obj.sourceFile)
|
||||||
|
builder.addField("startOffset", obj.startOffset)
|
||||||
|
builder.addField("endOffset", obj.endOffset)
|
||||||
|
builder.addField("startLine", obj.startLine)
|
||||||
|
builder.addField("startColumn", obj.startColumn)
|
||||||
|
builder.addField("endLine", obj.endLine)
|
||||||
|
builder.addField("endColumn", obj.endColumn)
|
||||||
|
|
||||||
builder.endObject()
|
builder.endObject()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@
|
||||||
package sbt.internal.util.codec
|
package sbt.internal.util.codec
|
||||||
|
|
||||||
import xsbti.{ Problem, Severity, Position }
|
import xsbti.{ Problem, Severity, Position }
|
||||||
import sbt.util.InterfaceUtil.problem
|
|
||||||
import _root_.sjsonnew.{ deserializationError, Builder, JsonFormat, Unbuilder }
|
import _root_.sjsonnew.{ deserializationError, Builder, JsonFormat, Unbuilder }
|
||||||
|
import java.util.Optional
|
||||||
|
|
||||||
trait ProblemFormats { self: SeverityFormats with PositionFormats with sjsonnew.BasicJsonProtocol =>
|
trait ProblemFormats { self: SeverityFormats with PositionFormats with sjsonnew.BasicJsonProtocol =>
|
||||||
implicit lazy val ProblemFormat: JsonFormat[Problem] = new JsonFormat[Problem] {
|
implicit lazy val ProblemFormat: JsonFormat[Problem] = new JsonFormat[Problem] {
|
||||||
|
|
@ -13,12 +13,20 @@ trait ProblemFormats { self: SeverityFormats with PositionFormats with sjsonnew.
|
||||||
jsOpt match {
|
jsOpt match {
|
||||||
case Some(js) =>
|
case Some(js) =>
|
||||||
unbuilder.beginObject(js)
|
unbuilder.beginObject(js)
|
||||||
val category = unbuilder.readField[String]("category")
|
val category0 = unbuilder.readField[String]("category")
|
||||||
val severity = unbuilder.readField[Severity]("severity")
|
val severity0 = unbuilder.readField[Severity]("severity")
|
||||||
val message = unbuilder.readField[String]("message")
|
val message0 = unbuilder.readField[String]("message")
|
||||||
val position = unbuilder.readField[Position]("position")
|
val position0 = unbuilder.readField[Position]("position")
|
||||||
|
val rendered0 = unbuilder.readField[Optional[String]]("rendered")
|
||||||
|
|
||||||
unbuilder.endObject()
|
unbuilder.endObject()
|
||||||
problem(category, position, message, severity)
|
new Problem {
|
||||||
|
override val category = category0
|
||||||
|
override val position = position0
|
||||||
|
override val message = message0
|
||||||
|
override val severity = severity0
|
||||||
|
override val rendered = rendered0
|
||||||
|
}
|
||||||
case None =>
|
case None =>
|
||||||
deserializationError("Expected JsObject but found None")
|
deserializationError("Expected JsObject but found None")
|
||||||
}
|
}
|
||||||
|
|
@ -29,6 +37,7 @@ trait ProblemFormats { self: SeverityFormats with PositionFormats with sjsonnew.
|
||||||
builder.addField("severity", obj.severity)
|
builder.addField("severity", obj.severity)
|
||||||
builder.addField("message", obj.message)
|
builder.addField("message", obj.message)
|
||||||
builder.addField("position", obj.position)
|
builder.addField("position", obj.position)
|
||||||
|
builder.addField("rendered", obj.rendered)
|
||||||
builder.endObject()
|
builder.endObject()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ object InterfaceUtil {
|
||||||
case None => Optional.empty[A]()
|
case None => Optional.empty[A]()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Overload to preserve binary compatibility
|
@deprecated("Use the overload of this method with more arguments", "1.2.2")
|
||||||
def position(
|
def position(
|
||||||
line0: Option[Integer],
|
line0: Option[Integer],
|
||||||
content: String,
|
content: String,
|
||||||
|
|
@ -89,8 +89,16 @@ object InterfaceUtil {
|
||||||
endLine0,
|
endLine0,
|
||||||
endColumn0)
|
endColumn0)
|
||||||
|
|
||||||
|
@deprecated("Use the overload of this method with more arguments", "1.2.2")
|
||||||
def problem(cat: String, pos: Position, msg: String, sev: Severity): Problem =
|
def problem(cat: String, pos: Position, msg: String, sev: Severity): Problem =
|
||||||
new ConcreteProblem(cat, pos, msg, sev)
|
problem(cat, pos, msg, sev, None)
|
||||||
|
|
||||||
|
def problem(cat: String,
|
||||||
|
pos: Position,
|
||||||
|
msg: String,
|
||||||
|
sev: Severity,
|
||||||
|
rendered: Option[String]): Problem =
|
||||||
|
new ConcreteProblem(cat, pos, msg, sev, rendered)
|
||||||
|
|
||||||
private final class ConcreteT2[A1, A2](a1: A1, a2: A2) extends T2[A1, A2] {
|
private final class ConcreteT2[A1, A2](a1: A1, a2: A2) extends T2[A1, A2] {
|
||||||
val get1: A1 = a1
|
val get1: A1 = a1
|
||||||
|
|
@ -144,12 +152,14 @@ object InterfaceUtil {
|
||||||
cat: String,
|
cat: String,
|
||||||
pos: Position,
|
pos: Position,
|
||||||
msg: String,
|
msg: String,
|
||||||
sev: Severity
|
sev: Severity,
|
||||||
|
rendered0: Option[String]
|
||||||
) extends Problem {
|
) extends Problem {
|
||||||
val category = cat
|
val category = cat
|
||||||
val position = pos
|
val position = pos
|
||||||
val message = msg
|
val message = msg
|
||||||
val severity = sev
|
val severity = sev
|
||||||
|
override val rendered = o2jo(rendered0)
|
||||||
override def toString = s"[$severity] $pos: $message"
|
override def toString = s"[$severity] $pos: $message"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,7 @@ object Logger {
|
||||||
def jo2o[A](o: Optional[A]): Option[A] = InterfaceUtil.jo2o(o)
|
def jo2o[A](o: Optional[A]): Option[A] = InterfaceUtil.jo2o(o)
|
||||||
def o2jo[A](o: Option[A]): Optional[A] = InterfaceUtil.o2jo(o)
|
def o2jo[A](o: Option[A]): Optional[A] = InterfaceUtil.o2jo(o)
|
||||||
|
|
||||||
|
@deprecated("Use InterfaceUtil.position", "1.2.2")
|
||||||
def position(
|
def position(
|
||||||
line0: Option[Integer],
|
line0: Option[Integer],
|
||||||
content: String,
|
content: String,
|
||||||
|
|
@ -116,6 +117,7 @@ object Logger {
|
||||||
sourceFile0
|
sourceFile0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@deprecated("Use InterfaceUtil.problem", "1.2.2")
|
||||||
def problem(cat: String, pos: Position, msg: String, sev: Severity): Problem =
|
def problem(cat: String, pos: Position, msg: String, sev: Severity): Problem =
|
||||||
InterfaceUtil.problem(cat, pos, msg, sev)
|
InterfaceUtil.problem(cat, pos, msg, sev)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue