Skip to content

Commit d5065ec

Browse files
committed
Parse TextDocuments instead of using com.google.protobuf
1 parent a414fae commit d5065ec

File tree

2 files changed

+89
-37
lines changed

2 files changed

+89
-37
lines changed

compiler/src/dotty/tools/dotc/semanticdb/ExtractSemanticDB.scala

Lines changed: 6 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,6 @@ import dotty.tools.io.{AbstractFile, JarArchive}
3030
import dotty.tools.dotc.util.Property
3131
import dotty.tools.dotc.semanticdb.DiagnosticOps.*
3232
import scala.util.{Using, Failure, Success}
33-
import com.google.protobuf.Empty
34-
import com.google.protobuf.UnknownFieldSet
35-
import com.google.protobuf.UnknownFieldSet.Field
3633
import java.io.ByteArrayOutputStream
3734
import java.io.BufferedOutputStream
3835

@@ -147,43 +144,15 @@ object ExtractSemanticDB:
147144
val path = semanticdbPath(source)
148145
Using.Manager { use =>
149146
val in = use(Files.newInputStream(path))
150-
// val sin = internal.SemanticdbInputStream.newInstance(in)
151-
val textDocuments = Empty.parseFrom(in)
152-
val docsBytes = textDocuments.getUnknownFields().getField(TextDocuments.DOCUMENTS_FIELD_NUMBER).getLengthDelimitedList()
153-
val docFields = Empty.parseFrom(docsBytes.get(0)).getUnknownFields()
154-
if (source.file.name == "ValPattern.scala")
155-
println(docFields)
156-
//docMap.put(7, )
157-
158-
// val docs = TextDocuments.parseFrom(sin)
159-
160-
val bos = use(new ByteArrayOutputStream())
161-
val sbos = internal.SemanticdbOutputStream.newInstance(bos)
162-
val doc = TextDocument(diagnostics = diagnostics)
163-
doc.writeTo(sbos)
164-
sbos.flush()
165-
val diagnosticsOnly = Empty.parseFrom(bos.toByteArray()).getUnknownFields()
166-
167-
val merged = docFields.toBuilder().mergeFrom(diagnosticsOnly).build()
168-
// println(merged)
169-
val field = Field.newBuilder().addLengthDelimited(merged.toByteString()).build()
170-
171-
val fields = textDocuments.getUnknownFields().toBuilder().mergeField(TextDocuments.DOCUMENTS_FIELD_NUMBER, field).build()
172-
// println(fields)
173-
val updated = textDocuments.toBuilder().setUnknownFields(fields).build()
174-
if (source.file.name == "ValPattern.scala")
175-
println(updated)
147+
val sin = internal.SemanticdbInputStream.newInstance(in)
148+
val docs = TextDocuments.parseFrom(sin)
176149

177150
val out = use(Files.newOutputStream(path))
178-
val bout = new BufferedOutputStream(out)
179-
updated.writeTo(bout)
180-
bout.flush()
181-
// val sout = internal.SemanticdbOutputStream.newInstance(out)
182-
// TextDocuments(docs.documents.map(_.withDiagnostics(diagnostics))).writeTo(sout)
151+
val sout = internal.SemanticdbOutputStream.newInstance(out)
152+
TextDocuments(docs.documents.map(_.withDiagnostics(diagnostics))).writeTo(sout)
153+
sout.flush()
183154
} match
184-
case Failure(ex) =>
185-
println(ex.getMessage())
186-
// failed somehow, should we say something?
155+
case Failure(ex) => // failed somehow, should we say something?
187156
case Success(_) => // success to update semanticdb, say nothing
188157
end appendDiagnostics
189158

tests/semanticdb/metac.expect

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Text => empty
88
Language => Scala
99
Symbols => 9 entries
1010
Occurrences => 18 entries
11+
Diagnostics => 2 entries
1112

1213
Symbols:
1314
example/Access# => class Access extends Object { self: Access => +8 decls }
@@ -40,6 +41,10 @@ Occurrences:
4041
[9:6..9:8): m7 <- example/Access#m7().
4142
[9:11..9:14): ??? -> scala/Predef.`???`().
4243

44+
Diagnostics:
45+
[3:14..3:16): [warning] unused private member
46+
[4:20..4:22): [warning] unused private member
47+
4348
expect/Advanced.scala
4449
---------------------
4550

@@ -50,6 +55,7 @@ Text => empty
5055
Language => Scala
5156
Symbols => 61 entries
5257
Occurrences => 138 entries
58+
Diagnostics => 1 entries
5359
Synthetics => 3 entries
5460

5561
Symbols:
@@ -255,6 +261,9 @@ Occurrences:
255261
[53:37..53:38): x -> advanced/HKClass#foo().(x)
256262
[53:39..53:47): toString -> scala/Tuple2#toString().
257263

264+
Diagnostics:
265+
[40:12..40:15): [warning] unused local definition
266+
258267
Synthetics:
259268
[27:12..27:16):s.s1 => reflectiveSelectable(*)
260269
[29:12..29:16):s.s2 => reflectiveSelectable(*)
@@ -270,6 +279,7 @@ Text => empty
270279
Language => Scala
271280
Symbols => 23 entries
272281
Occurrences => 52 entries
282+
Diagnostics => 2 entries
273283

274284
Symbols:
275285
annot/Alias. => final object Alias extends Object { self: Alias.type => +2 decls }
@@ -350,6 +360,10 @@ Occurrences:
350360
[39:11..39:26): ClassAnnotation -> com/javacp/annot/ClassAnnotation#
351361
[39:28..39:33): param -> scala/annotation/meta/param#
352362

363+
Diagnostics:
364+
[7:67..7:68): [warning] unused explicit parameter
365+
[21:33..21:34): [warning] unused explicit parameter
366+
353367
expect/Anonymous.scala
354368
----------------------
355369

@@ -360,6 +374,7 @@ Text => empty
360374
Language => Scala
361375
Symbols => 23 entries
362376
Occurrences => 47 entries
377+
Diagnostics => 1 entries
363378
Synthetics => 2 entries
364379

365380
Symbols:
@@ -436,6 +451,9 @@ Occurrences:
436451
[23:33..23:39): String -> scala/Predef.String#
437452
[23:42..23:45): ??? -> scala/Predef.`???`().
438453

454+
Diagnostics:
455+
[14:8..14:9): [warning] unused local definition
456+
439457
Synthetics:
440458
[10:2..10:9):locally => *[Unit]
441459
[13:2..13:9):locally => *[Unit]
@@ -474,6 +492,7 @@ Text => empty
474492
Language => Scala
475493
Symbols => 108 entries
476494
Occurrences => 114 entries
495+
Diagnostics => 4 entries
477496
Synthetics => 2 entries
478497

479498
Symbols:
@@ -702,6 +721,12 @@ Occurrences:
702721
[53:4..53:9): local -> local4
703722
[53:10..53:11): + -> scala/Int#`+`(+4).
704723

724+
Diagnostics:
725+
[18:9..18:10): [warning] unused explicit parameter
726+
[20:27..20:28): [warning] unused explicit parameter
727+
[22:27..22:28): [warning] unused explicit parameter
728+
[24:10..24:11): [warning] unused explicit parameter
729+
705730
Synthetics:
706731
[51:16..51:27):List(1).map => *[Int]
707732
[51:16..51:20):List => *.apply[Int]
@@ -716,6 +741,7 @@ Text => empty
716741
Language => Scala
717742
Symbols => 3 entries
718743
Occurrences => 6 entries
744+
Diagnostics => 1 entries
719745

720746
Symbols:
721747
_empty_/Deprecated. => final object Deprecated extends Object { self: Deprecated.type => +3 decls }
@@ -730,6 +756,9 @@ Occurrences:
730756
[2:6..2:10): main <- _empty_/Deprecated.main().
731757
[2:13..2:29): deprecatedMethod -> _empty_/Deprecated.deprecatedMethod().
732758

759+
Diagnostics:
760+
[2:13..2:29): [warning] method deprecatedMethod in object Deprecated is deprecated
761+
733762
expect/Empty.scala
734763
------------------
735764

@@ -787,6 +816,7 @@ Text => empty
787816
Language => Scala
788817
Symbols => 30 entries
789818
Occurrences => 46 entries
819+
Diagnostics => 3 entries
790820

791821
Symbols:
792822
endmarkers/Container# => class Container extends Object { self: Container => +5 decls }
@@ -868,6 +898,11 @@ Occurrences:
868898
[64:14..64:20): String -> scala/Predef.String#
869899
[67:4..67:14): endmarkers -> endmarkers/
870900

901+
Diagnostics:
902+
[38:8..38:16): [warning] unused local definition
903+
[42:8..42:16): [warning] unused local definition
904+
[46:8..46:16): [warning] unused local definition
905+
871906
expect/EndMarkers2.scala
872907
------------------------
873908

@@ -947,6 +982,7 @@ Text => empty
947982
Language => Scala
948983
Symbols => 181 entries
949984
Occurrences => 148 entries
985+
Diagnostics => 2 entries
950986
Synthetics => 6 entries
951987

952988
Symbols:
@@ -1282,6 +1318,10 @@ Occurrences:
12821318
[68:9..68:16): Neptune <- _empty_/Enums.Planet.Neptune.
12831319
[68:25..68:31): Planet -> _empty_/Enums.Planet#
12841320

1321+
Diagnostics:
1322+
[30:12..30:17): [warning] unused explicit parameter
1323+
[48:13..48:13): [warning] `:` after symbolic operator is deprecated; use backticks around operator instead
1324+
12851325
Synthetics:
12861326
[52:9..52:13):Refl => *.unapply[Option[B]]
12871327
[52:31..52:50):identity[Option[B]] => *[Function1[A, Option[B]]]
@@ -1334,6 +1374,7 @@ Text => empty
13341374
Language => Scala
13351375
Symbols => 5 entries
13361376
Occurrences => 23 entries
1377+
Diagnostics => 1 entries
13371378

13381379
Symbols:
13391380
example/Example. => final object Example extends Object { self: Example.type => +3 decls }
@@ -1367,6 +1408,9 @@ Occurrences:
13671408
[9:24..9:32): classTag -> scala/reflect/package.classTag().
13681409
[9:33..9:36): Int -> scala/Int#
13691410

1411+
Diagnostics:
1412+
[2:24..2:30): [warning] unused import
1413+
13701414
expect/Extension.scala
13711415
----------------------
13721416

@@ -1561,6 +1605,7 @@ Text => empty
15611605
Language => Scala
15621606
Symbols => 29 entries
15631607
Occurrences => 65 entries
1608+
Diagnostics => 1 entries
15641609
Synthetics => 3 entries
15651610

15661611
Symbols:
@@ -1661,6 +1706,11 @@ Occurrences:
16611706
[26:57..26:58): A -> a/b/Givens.foo().(A)
16621707
[26:59..26:64): empty -> a/b/Givens.Monoid#empty().
16631708

1709+
Diagnostics:
1710+
[24:53..24:63): [warning] An inline given alias with a function value as right-hand side can significantly increase
1711+
generated code size. You should either drop the `inline` or rewrite the given with an
1712+
explicit `apply` method.
1713+
16641714
Synthetics:
16651715
[12:17..12:25):sayHello => *[Int]
16661716
[13:19..13:29):sayGoodbye => *[Int]
@@ -1775,6 +1825,7 @@ Text => empty
17751825
Language => Scala
17761826
Symbols => 2 entries
17771827
Occurrences => 16 entries
1828+
Diagnostics => 1 entries
17781829

17791830
Symbols:
17801831
_empty_/Imports$package. => final package object _empty_ extends Object { self: _empty_.type => +2 decls }
@@ -1798,6 +1849,9 @@ Occurrences:
17981849
[3:25..3:28): Int -> scala/Int#
17991850
[3:30..3:33): Int -> scala/Int#
18001851

1852+
Diagnostics:
1853+
[0:26..0:34): [warning] unused import
1854+
18011855
expect/InstrumentTyper.scala
18021856
----------------------------
18031857

@@ -3522,6 +3576,7 @@ Text => empty
35223576
Language => Scala
35233577
Symbols => 22 entries
35243578
Occurrences => 44 entries
3579+
Diagnostics => 3 entries
35253580
Synthetics => 11 entries
35263581

35273582
Symbols:
@@ -3594,6 +3649,11 @@ Occurrences:
35943649
[39:10..39:17): leftVar -> local3
35953650
[40:10..40:18): rightVar -> local4
35963651

3652+
Diagnostics:
3653+
[30:11..30:18): [warning] unset local variable
3654+
[30:20..30:28): [warning] unset local variable
3655+
[31:15..31:25): [warning] unset local variable
3656+
35973657
Synthetics:
35983658
[5:6..5:10):Some => *.unapply[Int]
35993659
[6:4..6:8):Some => *.apply[Int]
@@ -3617,6 +3677,7 @@ Text => empty
36173677
Language => Scala
36183678
Symbols => 42 entries
36193679
Occurrences => 128 entries
3680+
Diagnostics => 1 entries
36203681

36213682
Symbols:
36223683
example/ValUsages. => final object ValUsages extends Object { self: ValUsages.type => +2 decls }
@@ -3792,6 +3853,9 @@ Occurrences:
37923853
[49:2..49:3): v -> example/ValUsages.v.
37933854
[49:3..49:18): .explicitSetter -> example/Vals#`explicitSetter_=`().
37943855

3856+
Diagnostics:
3857+
[2:20..2:21): [warning] unused explicit parameter
3858+
37953859
expect/Vararg.scala
37963860
-------------------
37973861

@@ -3833,6 +3897,7 @@ Text => empty
38333897
Language => Scala
38343898
Symbols => 8 entries
38353899
Occurrences => 18 entries
3900+
Diagnostics => 1 entries
38363901

38373902
Symbols:
38383903
_empty_/Test_depmatch. => final object Test_depmatch extends Object { self: Test_depmatch.type => +4 decls }
@@ -3864,6 +3929,9 @@ Occurrences:
38643929
[6:19..6:20): U -> local0
38653930
[6:24..6:27): ??? -> scala/Predef.`???`().
38663931

3932+
Diagnostics:
3933+
[6:8..6:9): [warning] unused local definition
3934+
38673935
expect/example-dir/FileInDir.scala
38683936
----------------------------------
38693937

@@ -4139,6 +4207,7 @@ Text => empty
41394207
Language => Scala
41404208
Symbols => 7 entries
41414209
Occurrences => 8 entries
4210+
Diagnostics => 1 entries
41424211

41434212
Symbols:
41444213
i9727/Test# => class Test extends Object { self: Test => +2 decls }
@@ -4159,6 +4228,9 @@ Occurrences:
41594228
[4:4..4:5): b <- i9727/i9727$package.b.
41604229
[4:12..4:16): Test -> i9727/Test#
41614230

4231+
Diagnostics:
4232+
[2:11..2:12): [warning] unused explicit parameter
4233+
41624234
expect/i9782.scala
41634235
------------------
41644236

@@ -4543,6 +4615,7 @@ Text => empty
45434615
Language => Scala
45444616
Symbols => 50 entries
45454617
Occurrences => 73 entries
4618+
Diagnostics => 4 entries
45464619
Synthetics => 2 entries
45474620

45484621
Symbols:
@@ -4672,6 +4745,12 @@ Occurrences:
46724745
[25:27..25:28): t <- local1
46734746
[25:33..25:36): ??? -> scala/Predef.`???`().
46744747

4748+
Diagnostics:
4749+
[9:30..9:31): [warning] unused explicit parameter
4750+
[9:36..9:37): [warning] unused explicit parameter
4751+
[9:42..9:43): [warning] unused explicit parameter
4752+
[21:11..21:12): [warning] unused explicit parameter
4753+
46754754
Synthetics:
46764755
[23:6..23:10):List => *.unapplySeq[Nothing]
46774756
[24:19..24:23):List => *.unapplySeq[Nothing]
@@ -4686,6 +4765,7 @@ Text => empty
46864765
Language => Scala
46874766
Symbols => 143 entries
46884767
Occurrences => 228 entries
4768+
Diagnostics => 1 entries
46894769
Synthetics => 1 entries
46904770

46914771
Symbols:
@@ -5063,6 +5143,9 @@ Occurrences:
50635143
[119:32..119:38): Option -> scala/Option#
50645144
[119:39..119:42): Int -> scala/Int#
50655145

5146+
Diagnostics:
5147+
[5:13..5:14): [warning] unused explicit parameter
5148+
50665149
Synthetics:
50675150
[68:20..68:24):@ann => *[Int]
50685151

0 commit comments

Comments
 (0)