Skip to content

Commit 03e2859

Browse files
committed
Upgrade SCIP bindings to 0.9
1 parent 5337b23 commit 03e2859

8 files changed

Lines changed: 187 additions & 55 deletions

File tree

MODULE.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ maven.install(
1010
artifacts = [
1111
"com.google.protobuf:protobuf-java-util:4.34.2",
1212
"org.projectlombok:lombok:1.18.46",
13-
"org.scip-code:scip-java-bindings:0.8.0",
13+
"org.scip-code:scip-java-bindings:0.9.0",
1414
],
1515
known_contributing_modules = ["protobuf"],
1616
repositories = ["https://repo1.maven.org/maven2"],

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ maven-plugin-api = "3.6.3"
1212
maven-project = "2.2.1"
1313
protobuf = "4.34.2"
1414
protobuf-plugin = "0.10.0"
15-
scip-bindings = "0.8.0"
15+
scip-bindings = "0.9.0"
1616
shadow = "9.4.3"
1717
spotless = "8.7.0"
1818
vanniktech-maven-publish = "0.35.0"

scip-aggregator/src/main/java/com/sourcegraph/scip_aggregator/ScipAggregator.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.sourcegraph.scip_aggregator;
22

33
import com.google.protobuf.CodedInputStream;
4+
import com.sourcegraph.scip.ScipRanges;
45
import com.sourcegraph.scip.ScipSymbols;
56
import java.io.IOException;
67
import java.nio.file.FileSystems;
@@ -153,12 +154,10 @@ private Document rewriteDocument(
153154
for (Occurrence occ : shard.getOccurrencesList()) {
154155
Occurrence.Builder rebuilt =
155156
Occurrence.newBuilder()
156-
.addAllRange(occ.getRangeList())
157157
.setSymbol(rewriter.rewrite(occ.getSymbol()))
158158
.setSymbolRoles(occ.getSymbolRoles());
159-
if (occ.getEnclosingRangeCount() > 0) {
160-
rebuilt.addAllEnclosingRange(occ.getEnclosingRangeList());
161-
}
159+
ScipRanges.copyRange(occ, rebuilt);
160+
ScipRanges.copyEnclosingRange(occ, rebuilt);
162161
out.addOccurrences(rebuilt);
163162
}
164163

scip-javac/src/main/java/com/sourcegraph/scip_javac/ScipVisitor.java

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.sourcegraph.scip.LocalSymbolsCache;
44
import com.sourcegraph.scip.ScipDocumentBuilder;
5+
import com.sourcegraph.scip.ScipRanges;
6+
import com.sourcegraph.scip.ScipRanges.Range;
57
import com.sourcegraph.scip.ScipSymbols;
68
import com.sun.source.tree.AnnotatedTypeTree;
79
import com.sun.source.tree.ClassTree;
@@ -182,7 +184,7 @@ private void resolveMethodTree(MethodTree node, TreePath treePath) {
182184
private void resolveVariableTree(VariableTree node, TreePath treePath) {
183185
Element sym = trees.getElement(treePath);
184186
if (sym == null) return;
185-
int[] range =
187+
Range range =
186188
emitDefinition(sym, node, sym.getSimpleName(), CompilerRange.FROM_POINT_WITH_TEXT_SEARCH);
187189
if (sym.getKind() == ElementKind.ENUM_CONSTANT) {
188190
TreePath typeTreePath = nodes.get(node.getInitializer());
@@ -246,8 +248,8 @@ private void resolveNewClassTree(NewClassTree node, TreePath treePath) {
246248
// =======================================
247249
// Occurrence + SymbolInformation emission
248250
// =======================================
249-
private int[] emitDefinition(Element sym, Tree tree, Name name, CompilerRange kind) {
250-
int[] range = computeRange(tree, kind, sym, name == null ? null : name.toString());
251+
private Range emitDefinition(Element sym, Tree tree, Name name, CompilerRange kind) {
252+
Range range = computeRange(tree, kind, sym, name == null ? null : name.toString());
251253
if (range == null) return null;
252254
emitOccurrence(sym, range, SymbolRole.Definition_VALUE, computeEnclosingRange(tree));
253255
declTrees.put(sym, tree);
@@ -256,18 +258,18 @@ private int[] emitDefinition(Element sym, Tree tree, Name name, CompilerRange ki
256258
}
257259

258260
private void emitReference(Element sym, Tree tree, Name name, CompilerRange kind) {
259-
int[] range = computeRange(tree, kind, sym, name == null ? null : name.toString());
261+
Range range = computeRange(tree, kind, sym, name == null ? null : name.toString());
260262
if (range == null) return;
261263
emitOccurrence(sym, range, 0 /* reference */, null);
262264
}
263265

264-
private void emitOccurrence(Element sym, int[] range, int role, int[] enclosingRange) {
266+
private void emitOccurrence(Element sym, Range range, int role, Range enclosingRange) {
265267
String symbol = scipSymbol(sym);
266268
if (symbol.isEmpty()) return;
267269
Occurrence.Builder b = Occurrence.newBuilder().setSymbol(symbol).setSymbolRoles(role);
268-
for (int v : range) b.addRange(v);
270+
ScipRanges.setRange(b, range);
269271
if (enclosingRange != null) {
270-
for (int v : enclosingRange) b.addEnclosingRange(v);
272+
ScipRanges.setEnclosingRange(b, enclosingRange);
271273
}
272274
documentBuilder.addOccurrence(b.build());
273275
}
@@ -360,7 +362,7 @@ private SymbolInformation.Kind scipKind(Element sym) {
360362
// =======================================
361363
// Source position / range computation
362364
// =======================================
363-
private int[] computeRange(Tree tree, CompilerRange kind, Element sym, String name) {
365+
private Range computeRange(Tree tree, CompilerRange kind, Element sym, String name) {
364366
if (sym == null) return null;
365367
SourcePositions sourcePositions = trees.getSourcePositions();
366368
int start = (int) sourcePositions.getStartPosition(compUnitTree, tree);
@@ -394,7 +396,7 @@ private int[] computeRange(Tree tree, CompilerRange kind, Element sym, String na
394396
return lineMapRange(start, end);
395397
}
396398

397-
private int[] computeEnclosingRange(Tree tree) {
399+
private Range computeEnclosingRange(Tree tree) {
398400
if (tree == null) return null;
399401
TreePath path = nodes.get(tree);
400402
if (path == null) return null;
@@ -413,7 +415,7 @@ private int[] computeEnclosingRange(Tree tree) {
413415
return lineMapRange(start, end);
414416
}
415417

416-
private int[] lineMapRange(int start, int end) {
418+
private Range lineMapRange(int start, int end) {
417419
if (start == Diagnostic.NOPOS || end == Diagnostic.NOPOS || end <= start) return null;
418420
LineMap lineMap = compUnitTree.getLineMap();
419421
int startLine = (int) lineMap.getLineNumber(start) - 1;
@@ -431,8 +433,8 @@ private int[] lineMapRange(int start, int end) {
431433
endChar -= count * 7;
432434
}
433435

434-
if (startLine == endLine) return new int[] {startLine, startChar, endChar};
435-
return new int[] {startLine, startChar, endLine, endChar};
436+
if (startLine == endLine) return ScipRanges.singleLineRange(startLine, startChar, endChar);
437+
return ScipRanges.range(startLine, startChar, endLine, endChar);
436438
}
437439

438440
// =======================================

scip-kotlinc/src/main/kotlin/com/sourcegraph/scip_kotlinc/ScipTextDocumentBuilder.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.sourcegraph.scip_kotlinc
22

33
import com.sourcegraph.scip.ScipDocumentBuilder
4+
import com.sourcegraph.scip.ScipRanges
5+
import com.sourcegraph.scip.ScipRanges.Range
46
import com.sourcegraph.scip.ScipShardPaths
57
import java.nio.file.Path
68
import java.nio.file.Paths
@@ -22,7 +24,6 @@ import org.scip_code.scip.Document
2224
import org.scip_code.scip.Occurrence
2325
import org.scip_code.scip.SymbolInformation
2426
import org.scip_code.scip.SymbolRole
25-
import org.scip_code.scip.occurrence
2627
import org.scip_code.scip.relationship
2728
import org.scip_code.scip.signature
2829
import org.scip_code.scip.symbolInformation
@@ -98,29 +99,29 @@ class ScipTextDocumentBuilder(
9899
element: KtSourceElement,
99100
isDefinition: Boolean,
100101
enclosingSource: KtSourceElement?,
101-
): Occurrence = occurrence {
102-
this.symbol = symbol.toString()
103-
if (isDefinition) symbolRoles = SymbolRole.Definition.number
104-
range += range(element).asIterable()
102+
): Occurrence {
103+
val builder = Occurrence.newBuilder().setSymbol(symbol.toString())
104+
if (isDefinition) builder.setSymbolRoles(SymbolRole.Definition.number)
105+
ScipRanges.setRange(builder, range(element))
105106
if (enclosingSource != null) {
106-
enclosingRange += enclosingRange(enclosingSource).asIterable()
107+
ScipRanges.setEnclosingRange(builder, enclosingRange(enclosingSource))
107108
}
109+
return builder.build()
108110
}
109111

110-
private fun range(element: KtSourceElement): IntArray {
112+
private fun range(element: KtSourceElement): Range {
111113
val line = lineMap.lineNumber(element) - 1
112114
val startCol = lineMap.startCharacter(element)
113115
val endCol = lineMap.endCharacter(element)
114-
return intArrayOf(line, startCol, endCol)
116+
return ScipRanges.singleLineRange(line, startCol, endCol)
115117
}
116118

117-
private fun enclosingRange(element: KtSourceElement): IntArray {
119+
private fun enclosingRange(element: KtSourceElement): Range {
118120
val startLine = lineMap.lineNumber(element) - 1
119121
val startCol = lineMap.startCharacter(element)
120122
val endLine = lineMap.lineNumberForOffset(element.endOffset) - 1
121123
val endCol = lineMap.columnForOffset(element.endOffset)
122-
return if (startLine == endLine) intArrayOf(startLine, startCol, endCol)
123-
else intArrayOf(startLine, startCol, endLine, endCol)
124+
return ScipRanges.range(startLine, startCol, endLine, endCol)
124125
}
125126

126127
private fun relativePath(): String =

scip-kotlinc/src/test/kotlin/com/sourcegraph/scip_kotlinc/test/ScipBuilders.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.sourcegraph.scip_kotlinc.test
22

3+
import com.sourcegraph.scip.ScipRanges
4+
import com.sourcegraph.scip.ScipRanges.Range
35
import org.scip_code.scip.Occurrence
46
import org.scip_code.scip.SymbolInformation
57
import org.scip_code.scip.SymbolRole
6-
import org.scip_code.scip.occurrence
78
import org.scip_code.scip.relationship
89
import org.scip_code.scip.signature
910
import org.scip_code.scip.symbolInformation
@@ -38,33 +39,32 @@ class ScipRangeBuilder {
3839
var endLine: Int = -1
3940
var endCharacter: Int = 0
4041

41-
internal fun toIntList(): List<Int> {
42+
internal fun toScipRange(): Range {
4243
val line = if (endLine < 0) startLine else endLine
43-
return if (line == startLine) listOf(startLine, startCharacter, endCharacter)
44-
else listOf(startLine, startCharacter, line, endCharacter)
44+
return ScipRanges.range(startLine, startCharacter, line, endCharacter)
4545
}
4646
}
4747

4848
@ScipBuilderDsl
4949
class ScipOccurrenceBuilder {
5050
var role: Int = REFERENCE
5151
var symbol: String = ""
52-
private var range: List<Int>? = null
53-
private var enclosingRange: List<Int>? = null
52+
private var range: Range? = null
53+
private var enclosingRange: Range? = null
5454

5555
fun range(block: ScipRangeBuilder.() -> Unit) {
56-
range = ScipRangeBuilder().apply(block).toIntList()
56+
range = ScipRangeBuilder().apply(block).toScipRange()
5757
}
5858

5959
fun enclosingRange(block: ScipRangeBuilder.() -> Unit) {
60-
enclosingRange = ScipRangeBuilder().apply(block).toIntList()
60+
enclosingRange = ScipRangeBuilder().apply(block).toScipRange()
6161
}
6262

63-
internal fun build(): Occurrence = occurrence {
64-
symbol = this@ScipOccurrenceBuilder.symbol
65-
symbolRoles = role
66-
this@ScipOccurrenceBuilder.range?.let { range += it }
67-
this@ScipOccurrenceBuilder.enclosingRange?.let { enclosingRange += it }
63+
internal fun build(): Occurrence {
64+
val builder = Occurrence.newBuilder().setSymbol(symbol).setSymbolRoles(role)
65+
range?.let { ScipRanges.setRange(builder, it) }
66+
enclosingRange?.let { ScipRanges.setEnclosingRange(builder, it) }
67+
return builder.build()
6868
}
6969
}
7070

scip-shared/src/main/java/com/sourcegraph/scip/ScipDocumentBuilder.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.sourcegraph.scip;
22

33
import java.util.ArrayList;
4-
import java.util.Collections;
54
import java.util.Comparator;
65
import java.util.LinkedHashMap;
76
import java.util.List;
@@ -21,8 +20,8 @@
2120
*/
2221
public final class ScipDocumentBuilder {
2322
private static final Comparator<Occurrence> OCCURRENCE_ORDER =
24-
Comparator.<Occurrence>comparingInt(o -> rangeStartLine(o))
25-
.thenComparingInt(o -> rangeStartCharacter(o));
23+
Comparator.<Occurrence>comparingInt(ScipRanges::rangeStartLine)
24+
.thenComparingInt(ScipRanges::rangeStartCharacter);
2625

2726
private final Map<OccurrenceKey, Occurrence> occurrences = new LinkedHashMap<>();
2827
private final Map<String, SymbolInformation> symbols = new LinkedHashMap<>();
@@ -49,21 +48,13 @@ public Document build(String language, String relativePath, String text) {
4948
.build();
5049
}
5150

52-
private static int rangeStartLine(Occurrence occurrence) {
53-
return occurrence.getRangeCount() > 0 ? occurrence.getRange(0) : 0;
54-
}
55-
56-
private static int rangeStartCharacter(Occurrence occurrence) {
57-
return occurrence.getRangeCount() > 1 ? occurrence.getRange(1) : 0;
58-
}
59-
6051
private static final class OccurrenceKey {
61-
private final List<Integer> range;
52+
private final ScipRanges.Range range;
6253
private final String symbol;
6354
private final int roles;
6455

6556
OccurrenceKey(Occurrence occurrence) {
66-
this.range = Collections.unmodifiableList(new ArrayList<>(occurrence.getRangeList()));
57+
this.range = ScipRanges.range(occurrence);
6758
this.symbol = occurrence.getSymbol();
6859
this.roles = occurrence.getSymbolRoles();
6960
}

0 commit comments

Comments
 (0)