Skip to content

Commit 6bd672b

Browse files
committed
sbt.internal.inc.Position: add startOffset and endOffset
1 parent 7cd8be0 commit 6bd672b

File tree

5 files changed

+29
-14
lines changed

5 files changed

+29
-14
lines changed

internal/compiler-bridge/src/main/scala/xsbt/DelegatingReporter.scala

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ package xsbt
1010
import java.io.File
1111
import java.util.Optional
1212

13-
import scala.reflect.internal.util.{ FakePos, NoPosition, Position }
13+
import scala.reflect.internal.util.{ FakePos, NoPosition, Position, RangePosition }
1414
// Left for compatibility
1515
import Compat._
1616

@@ -24,7 +24,9 @@ private object DelegatingReporter {
2424
lineContent0: String,
2525
offset0: Option[Int],
2626
pointer0: Option[Int],
27-
pointerSpace0: Option[String])
27+
pointerSpace0: Option[String],
28+
startOffset0: Option[Int],
29+
endOffset0: Option[Int])
2830
extends xsbti.Position {
2931
val line = o2oi(line0)
3032
val lineContent = lineContent0
@@ -33,6 +35,8 @@ private object DelegatingReporter {
3335
val sourceFile = o2jo(sourceFile0)
3436
val pointer = o2oi(pointer0)
3537
val pointerSpace = o2jo(pointerSpace0)
38+
override val startOffset = o2oi(startOffset0)
39+
override val endOffset = o2oi(endOffset0)
3640
override def toString =
3741
(sourcePath0, line0) match {
3842
case (Some(s), Some(l)) => s + ":" + l
@@ -42,7 +46,7 @@ private object DelegatingReporter {
4246
}
4347

4448
object PositionImpl {
45-
def empty: PositionImpl = new PositionImpl(None, None, None, "", None, None, None)
49+
def empty: PositionImpl = new PositionImpl(None, None, None, "", None, None, None, None, None)
4650
}
4751

4852
import java.lang.{ Integer => I }
@@ -81,13 +85,18 @@ private object DelegatingReporter {
8185
case '\t' => '\t'
8286
case _ => ' '
8387
}
88+
val isRange = pos.isInstanceOf[RangePosition]
89+
val startOffset = if (isRange) Some(pos.start) else None
90+
val endOffset = if (isRange) Some(pos.end) else None
8491
new PositionImpl(Option(sourcePath),
8592
Option(sourceFile),
8693
Option(line),
8794
lineContent,
8895
Option(offset),
8996
Option(pointer),
90-
Option(pointerSpace.mkString))
97+
Option(pointerSpace.mkString),
98+
startOffset,
99+
endOffset)
91100
}
92101

93102
cleanPos(dirtyPos) match {

internal/zinc-compile-core/src/main/scala/sbt/internal/inc/javac/DiagnosticsReporter.scala

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import java.util.Optional
1515
import java.io.File
1616
import javax.tools.{ Diagnostic, JavaFileObject, DiagnosticListener }
1717
import sbt.io.IO
18-
import sbt.util.InterfaceUtil.o2jo
18+
import sbt.util.InterfaceUtil.{ o2jo, jo2o }
1919
import xsbti.{ Severity, Reporter }
2020
import javax.tools.Diagnostic.NOPOS
2121

@@ -59,8 +59,8 @@ object DiagnosticsReporter {
5959
override val line: Optional[Integer],
6060
override val lineContent: String,
6161
override val offset: Optional[Integer],
62-
val startPosition: Option[Long],
63-
val endPosition: Option[Long]
62+
override val startOffset: Optional[Integer],
63+
override val endOffset: Optional[Integer]
6464
) extends xsbti.Position {
6565
override val sourcePath: Optional[String] = o2jo(sourceUri)
6666
override val sourceFile: Optional[File] = o2jo(sourceUri.map(new File(_)))
@@ -98,8 +98,8 @@ object DiagnosticsReporter {
9898
val sourcePath: Option[String] = source map (obj => IO.toFile(obj.toUri).getAbsolutePath)
9999
val line: Optional[Integer] = o2jo(checkNoPos(d.getLineNumber) map (_.toInt))
100100
val offset: Optional[Integer] = o2jo(checkNoPos(d.getPosition) map (_.toInt))
101-
val startPosition: Option[Long] = checkNoPos(d.getStartPosition)
102-
val endPosition: Option[Long] = checkNoPos(d.getEndPosition)
101+
val startOffset: Optional[Integer] = o2jo(checkNoPos(d.getStartPosition) map (_.toInt))
102+
val endOffset: Optional[Integer] = o2jo(checkNoPos(d.getEndPosition) map (_.toInt))
103103

104104
def lineContent: String = {
105105
def getDiagnosticLine: Option[String] =
@@ -127,17 +127,17 @@ object DiagnosticsReporter {
127127
source match {
128128
case None => ""
129129
case Some(source) =>
130-
(Option(source.getCharContent(true)), startPosition, endPosition) match {
130+
(Option(source.getCharContent(true)), jo2o(startOffset), jo2o(endOffset)) match {
131131
case (Some(cc), Some(start), Some(end)) =>
132-
cc.subSequence(start.toInt, end.toInt).toString
132+
cc.subSequence(start, end).toString
133133
case _ => ""
134134
}
135135
}
136136

137137
getDiagnosticLine.getOrElse(getExpression)
138138
}
139139

140-
new PositionImpl(sourcePath, line, lineContent, offset, startPosition, endPosition)
140+
new PositionImpl(sourcePath, line, lineContent, offset, startOffset, endOffset)
141141
}
142142

143143
}

internal/zinc-persist/src/main/protobuf/schema.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ message Position {
6666
string pointerSpace = 5;
6767
string sourcePath = 6;
6868
string sourceFilepath = 7;
69+
sint32 startOffset = 8;
70+
sint32 endOffset = 9;
6971
}
7072

7173
message Problem {

internal/zinc-persist/src/main/scala/sbt/internal/inc/binary/converters/ProtobufReaders.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ final class ProtobufReaders(mapper: ReadMapper) {
127127
pointer0 = fromInt(position.pointer),
128128
pointerSpace0 = fromString(position.pointerSpace),
129129
sourcePath0 = fromString(position.sourcePath),
130-
sourceFile0 = fromString(position.sourceFilepath).map(fromPathString)
130+
sourceFile0 = fromString(position.sourceFilepath).map(fromPathString),
131+
startOffset0 = fromInt(position.startOffset),
132+
endOffset0 = fromInt(position.endOffset),
131133
)
132134
}
133135

internal/zinc-persist/src/main/scala/sbt/internal/inc/binary/converters/ProtobufWriters.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,9 @@ final class ProtobufWriters(mapper: WriteMapper) {
130130
pointer = position.pointer.toOption.fold(MissingInt)(_.toInt),
131131
pointerSpace = position.pointerSpace.toOption.getOrElse(MissingString),
132132
sourcePath = position.sourcePath.toOption.getOrElse(MissingString),
133-
sourceFilepath = position.sourceFile.toOption.fold(MissingString)(toStringPath)
133+
sourceFilepath = position.sourceFile.toOption.fold(MissingString)(toStringPath),
134+
startOffset = position.startOffset.toOption.fold(MissingInt)(_.toInt),
135+
endOffset = position.endOffset.toOption.fold(MissingInt)(_.toInt),
134136
)
135137
}
136138

0 commit comments

Comments
 (0)