From 78834527dffb89408142047d9a3a8bb5b56caa95 Mon Sep 17 00:00:00 2001 From: Guillaume Martres Date: Mon, 13 Aug 2018 01:03:22 +0900 Subject: [PATCH] xsbti.Position: add startOffset and endOffset A position now has a start, an end, and a point (the existing `offset`), just like it does in the Scala compiler. This information is especially useful for displaying squiggly lines in an IDE. This commit and the next one are required for https://github.com/sbt/zinc/pull/571 --- build.sbt | 2 ++ .../src/main/java/xsbti/Position.java | 4 +++ .../main/scala/sbt/util/InterfaceUtil.scala | 30 +++++++++++++++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/build.sbt b/build.sbt index 1896a4191..7a2d78ce6 100644 --- a/build.sbt +++ b/build.sbt @@ -124,6 +124,8 @@ lazy val utilLogging = (project in internalPath / "util-logging") exclude[DirectMissingMethodProblem]("sbt.internal.util.SuccessEvent.copy*"), exclude[DirectMissingMethodProblem]("sbt.internal.util.TraceEvent.copy*"), exclude[DirectMissingMethodProblem]("sbt.internal.util.StringEvent.copy*"), + // Private final class constructor changed + exclude[DirectMissingMethodProblem]("sbt.util.InterfaceUtil#ConcretePosition.this"), ), ) .configure(addSbtIO) diff --git a/internal/util-interface/src/main/java/xsbti/Position.java b/internal/util-interface/src/main/java/xsbti/Position.java index be0239046..0f27e295e 100644 --- a/internal/util-interface/src/main/java/xsbti/Position.java +++ b/internal/util-interface/src/main/java/xsbti/Position.java @@ -18,4 +18,8 @@ public interface Position Optional sourcePath(); Optional sourceFile(); + + // Default values to avoid breaking binary compatibility + default Optional startOffset() { return Optional.empty(); } + default Optional endOffset() { return Optional.empty(); } } 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 dc956ecbf..a2d705600 100644 --- a/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala +++ b/internal/util-logging/src/main/scala/sbt/util/InterfaceUtil.scala @@ -36,6 +36,7 @@ object InterfaceUtil { case None => Optional.empty[A]() } + // Overload to preserve binary compatibility def position( line0: Option[Integer], content: String, @@ -45,7 +46,28 @@ object InterfaceUtil { sourcePath0: Option[String], sourceFile0: Option[File] ): Position = - new ConcretePosition(line0, content, offset0, pointer0, pointerSpace0, sourcePath0, sourceFile0) + position(line0, content, offset0, pointer0, pointerSpace0, sourcePath0, sourceFile0, None, None) + + def position( + line0: Option[Integer], + content: String, + offset0: Option[Integer], + pointer0: Option[Integer], + pointerSpace0: Option[String], + sourcePath0: Option[String], + sourceFile0: Option[File], + startOffset0: Option[Integer], + endOffset0: Option[Integer] + ): Position = + new ConcretePosition(line0, + content, + offset0, + pointer0, + pointerSpace0, + sourcePath0, + sourceFile0, + startOffset0, + endOffset0) def problem(cat: String, pos: Position, msg: String, sev: Severity): Problem = new ConcreteProblem(cat, pos, msg, sev) @@ -75,7 +97,9 @@ object InterfaceUtil { pointer0: Option[Integer], pointerSpace0: Option[String], sourcePath0: Option[String], - sourceFile0: Option[File] + sourceFile0: Option[File], + startOffset0: Option[Integer], + endOffset0: Option[Integer] ) extends Position { val line = o2jo(line0) val lineContent = content @@ -84,6 +108,8 @@ object InterfaceUtil { val pointerSpace = o2jo(pointerSpace0) val sourcePath = o2jo(sourcePath0) val sourceFile = o2jo(sourceFile0) + override val startOffset = o2jo(startOffset0) + override val endOffset = o2jo(endOffset0) } private final class ConcreteProblem(