Skip to content

Commit f0c3556

Browse files
committed
flatten AnnotationTree and replace Annotation with it in SymbolInformation
1 parent d252f98 commit f0c3556

File tree

4 files changed

+44
-40
lines changed

4 files changed

+44
-40
lines changed

lsif-semanticdb/src/main/java/com/sourcegraph/lsif_semanticdb/SignatureFormatter.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,29 +249,32 @@ private String formatAnnotations(SymbolInformation symInfo) {
249249
.collect(Collectors.joining("\n"));
250250
}
251251

252-
private String formatAnnotation(Annotation annotation) {
252+
private String formatAnnotation(AnnotationTree annotation) {
253253
StringBuilder b = new StringBuilder();
254254
b.append('@');
255255
b.append(formatType(annotation.getTpe()));
256256
if (annotation.getParametersCount() > 0) {
257257
b.append('(');
258-
Annotation.ParameterPair firstParam = annotation.getParameters(0);
258+
AssignTree firstParam = annotation.getParameters(0).getAssignTree();
259259
// if only 1 parameter, and its LHS is named 'value', we can omit the 'value = '
260-
// docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.7.3
260+
// https://docs.oracle.com/javase/specs/jls/se8/html/jls-9.html#jls-9.7.3
261261
if (annotation.getParametersCount() == 1
262-
&& SymbolDescriptor.parseFromSymbol(firstParam.getKey())
262+
&& SymbolDescriptor.parseFromSymbol(firstParam.getLhs().getIdTree().getSymbol())
263263
.descriptor
264264
.name
265265
.equals("value")) {
266-
b.append(formatTree(firstParam.getValue()));
266+
b.append(formatTree(firstParam.getRhs()));
267267
} else {
268268
String parameter =
269269
annotation.getParametersList().stream()
270270
.map(
271271
p ->
272-
SymbolDescriptor.parseFromSymbol(p.getKey()).descriptor.name
272+
SymbolDescriptor.parseFromSymbol(
273+
p.getAssignTree().getLhs().getIdTree().getSymbol())
274+
.descriptor
275+
.name
273276
+ " = "
274-
+ formatTree(p.getValue()))
277+
+ formatTree(p.getAssignTree().getRhs()))
275278
.collect(Collectors.joining(", "));
276279
b.append(parameter);
277280
}
@@ -292,7 +295,7 @@ private String formatTree(Tree tree) {
292295
.descriptor
293296
.name;
294297
} else if (tree.hasAnnotationTree()) {
295-
return formatAnnotation(tree.getAnnotationTree().getAnnotation());
298+
return formatAnnotation(tree.getAnnotationTree());
296299
} else if (tree.hasApplyTree()) {
297300
if (tree.getApplyTree().getFunction().hasIdTree()
298301
&& tree.getApplyTree().getFunction().getIdTree().getSymbol().equals(ARRAY_SYMBOL)) {

semanticdb-java/src/main/protobuf/semanticdb.proto

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -103,24 +103,15 @@ message SymbolInformation {
103103
Kind kind = 3;
104104
int32 properties = 4;
105105
string display_name = 5;
106-
repeated Annotation annotations = 13;
106+
// -- OUT OF SPEC -- //
107+
repeated AnnotationTree annotations = 13;
108+
// -- OUT OF SPEC -- //
107109
Signature signature = 17;
108110
Access access = 18;
109111
repeated string overridden_symbols = 19;
110112
Documentation documentation = 20;
111113
}
112114

113-
message Annotation {
114-
Type tpe = 1;
115-
// -- OUT OF SPEC -- //
116-
message ParameterPair {
117-
string key = 1;
118-
Tree value = 2;
119-
}
120-
repeated ParameterPair parameters = 2;
121-
// -- OUT OF SPEC -- //
122-
}
123-
124115
message Access {
125116
oneof sealed_value {
126117
PrivateAccess private_access = 1;
@@ -200,7 +191,8 @@ message Tree {
200191
OriginalTree original_tree = 6;
201192
SelectTree select_tree = 7;
202193
// -- OUT OF SPEC -- //
203-
AnnotationTree annotation_tree = 8;
194+
AnnotationTree annotation_tree = 9;
195+
AssignTree assign_tree = 10;
204196
// -- OUT OF SPEC -- //
205197
}
206198
}
@@ -227,9 +219,17 @@ message SelectTree {
227219
IdTree id = 2;
228220
}
229221

222+
// -- OUT OF SPEC -- //
230223
message AnnotationTree {
231-
Annotation annotation = 1;
224+
Type tpe = 1;
225+
repeated Tree parameters = 2;
226+
}
227+
228+
message AssignTree {
229+
Tree lhs = 1;
230+
Tree rhs = 2;
232231
}
232+
// -- OUT OF SPEC -- //
233233

234234
message Constant {
235235
oneof sealed_value {

semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbVisitor.java

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolInformation.Property;
1414
import com.sourcegraph.semanticdb_javac.Semanticdb.SymbolOccurrence.Role;
1515

16-
import javax.lang.model.type.PrimitiveType;
17-
import javax.lang.model.type.TypeKind;
1816
import javax.lang.model.util.Elements;
1917
import java.io.IOException;
2018
import java.nio.file.Path;
@@ -91,7 +89,7 @@ private void emitSymbolInformation(Symbol sym, JCTree tree) {
9189
if (documentation != null) builder.setDocumentation(documentation);
9290
Semanticdb.Signature signature = semanticdbSignature(sym);
9391
if (signature != null) builder.setSignature(signature);
94-
List<Semanticdb.Annotation> annotations = semanticdbAnnotations(tree);
92+
List<Semanticdb.AnnotationTree> annotations = semanticdbAnnotations(tree);
9593
if (annotations != null) builder.addAllAnnotations(annotations);
9694

9795
builder
@@ -311,12 +309,12 @@ private String semanticdbMd5() {
311309
}
312310
}
313311

314-
private List<Semanticdb.Annotation> semanticdbAnnotations(JCTree node) {
312+
private List<Semanticdb.AnnotationTree> semanticdbAnnotations(JCTree node) {
315313
if (!(node instanceof JCTree.JCClassDecl)
316314
&& !(node instanceof JCTree.JCVariableDecl)
317315
&& !(node instanceof JCTree.JCMethodDecl)) return null;
318316

319-
List<Semanticdb.Annotation> annotations = new ArrayList<>();
317+
List<Semanticdb.AnnotationTree> annotations = new ArrayList<>();
320318

321319
JCTree.JCModifiers mods;
322320
if (node instanceof JCTree.JCClassDecl) {
@@ -334,26 +332,31 @@ private List<Semanticdb.Annotation> semanticdbAnnotations(JCTree node) {
334332
return annotations;
335333
}
336334

337-
private Semanticdb.Annotation.Builder semanticdbAnnotation(JCTree.JCAnnotation annotation) {
338-
Semanticdb.Annotation.Builder builder = Semanticdb.Annotation.newBuilder();
339-
builder.setTpe(new SemanticdbTypeVisitor(globals, locals).visit(annotation.type));
335+
private Semanticdb.AnnotationTree.Builder semanticdbAnnotation(JCTree.JCAnnotation annotation) {
336+
Semanticdb.AnnotationTree.Builder annotationBuilder = Semanticdb.AnnotationTree.newBuilder();
337+
annotationBuilder.setTpe(new SemanticdbTypeVisitor(globals, locals).visit(annotation.type));
340338

341339
for (JCTree.JCExpression param : annotation.args) {
342-
Semanticdb.Annotation.ParameterPair.Builder parameterBuilder =
343-
Semanticdb.Annotation.ParameterPair.newBuilder();
340+
Semanticdb.AssignTree.Builder parameterBuilder = Semanticdb.AssignTree.newBuilder();
344341

345342
// anecdotally always JCAssign
346343
JCTree.JCAssign assign = (JCTree.JCAssign) param;
347344
JCTree.JCExpression assignValue = assign.rhs;
348345

349-
parameterBuilder.setKey(globals.semanticdbSymbol(((JCTree.JCIdent) assign.lhs).sym, locals));
346+
parameterBuilder.setLhs(
347+
Semanticdb.Tree.newBuilder()
348+
.setIdTree(
349+
Semanticdb.IdTree.newBuilder()
350+
.setSymbol(
351+
globals.semanticdbSymbol(((JCTree.JCIdent) assign.lhs).sym, locals))
352+
.build()));
350353

351-
parameterBuilder.setValue(semanticdbAnnotationParameter(assignValue));
354+
parameterBuilder.setRhs(semanticdbAnnotationParameter(assignValue));
352355

353-
builder.addParameters(parameterBuilder);
356+
annotationBuilder.addParameters(Semanticdb.Tree.newBuilder().setAssignTree(parameterBuilder));
354357
}
355358

356-
return builder;
359+
return annotationBuilder;
357360
}
358361

359362
private Semanticdb.Tree.Builder semanticdbAnnotationParameter(JCTree.JCExpression expr) {
@@ -457,9 +460,7 @@ private Semanticdb.Tree.Builder semanticdbAnnotationParameter(JCTree.JCExpressio
457460
return Semanticdb.Tree.newBuilder().setLiteralTree(literalBuilder);
458461
} else if (expr instanceof JCTree.JCAnnotation) {
459462
return Semanticdb.Tree.newBuilder()
460-
.setAnnotationTree(
461-
Semanticdb.AnnotationTree.newBuilder()
462-
.setAnnotation(semanticdbAnnotation((JCTree.JCAnnotation) expr)));
463+
.setAnnotationTree(semanticdbAnnotation((JCTree.JCAnnotation) expr));
463464
} else if (expr instanceof JCTree.JCIdent) {
464465
return Semanticdb.Tree.newBuilder()
465466
.setIdTree(

tests/snapshots/src/main/generated/minimized/Annotations.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,4 @@
6060
String format() default "";
6161
//^^^^^^ reference java/lang/String#
6262
// ^^^^^^ definition minimized/Annotations#format(). public abstract String format()
63-
}
63+
}

0 commit comments

Comments
 (0)