@@ -35,8 +35,8 @@ class ExtractSemanticDB extends Phase {
35
35
override def isCheckable : Boolean = false
36
36
37
37
override def run (implicit ctx : Context ): Unit = {
38
- val extract = Extractor ()
39
38
val unit = ctx.compilationUnit
39
+ val extract = Extractor ()
40
40
extract.traverse(unit.tpdTree)
41
41
ExtractSemanticDB .write(unit.source, extract.occurrences.toList)
42
42
}
@@ -54,11 +54,12 @@ class ExtractSemanticDB extends Phase {
54
54
override def default (key : Int ) = Set [Symbol ]()
55
55
}
56
56
57
- private val generated = new mutable.HashSet [SymbolOccurrence ]
58
-
59
57
/** The extracted symbol occurrences */
60
58
val occurrences = new mutable.ListBuffer [SymbolOccurrence ]()
61
59
60
+ /** The symbol occurrences generated so far, as a set */
61
+ private val generated = new mutable.HashSet [SymbolOccurrence ]
62
+
62
63
/** Add semanticdb name of the given symbol to string builder */
63
64
private def addSymName (b : StringBuilder , sym : Symbol )(given ctx : Context ): Unit =
64
65
@@ -83,7 +84,7 @@ class ExtractSemanticDB extends Phase {
83
84
if alts.tail.nonEmpty then
84
85
val idx = alts.indexOf(sym)
85
86
assert(idx >= 0 )
86
- b.append('+' ).append(idx.toString )
87
+ b.append('+' ).append(idx)
87
88
88
89
def addDescriptor (sym : Symbol ): Unit =
89
90
if sym.is(ModuleClass ) then
@@ -98,8 +99,7 @@ class ExtractSemanticDB extends Phase {
98
99
else if sym.isType then b.append('#' )
99
100
else if sym.isRealMethod then
100
101
b.append('(' ); addOverloadIdx(sym); b.append(" )." )
101
- else if sym.isTerm then b.append('.' )
102
- else throw new AssertionError (i " unhandled symbol: $sym: ${sym.info} with ${sym.flagsString}" )
102
+ else b.append('.' )
103
103
104
104
/** The index of local symbol `sym`. Symbols with the same name and
105
105
* the same starting position have the same index.
@@ -140,9 +140,11 @@ class ExtractSemanticDB extends Phase {
140
140
val (endLine, endCol) = lineCol(span.end)
141
141
Some (Range (startLine, startCol, endLine, endCol))
142
142
143
+ /** Definitions of this symbol should be excluded from semanticdb */
143
144
private def excludeDef (sym : Symbol )(given Context ): Boolean =
144
145
! sym.exists || sym.isLocalDummy || sym.is(Synthetic )
145
146
147
+ /** Uses of this symbol where the reference has given span should be excluded from semanticdb */
146
148
private def excludeUse (sym : Symbol , span : Span )(given Context ): Boolean =
147
149
excludeDef(sym) && span.start == span.end
148
150
@@ -157,7 +159,6 @@ class ExtractSemanticDB extends Phase {
157
159
registerOccurrence(sym, span, SymbolOccurrence .Role .REFERENCE )
158
160
159
161
override def traverse (tree : Tree )(given ctx : Context ): Unit =
160
- // println(i"reg $tree")
161
162
tree match
162
163
case tree : DefTree if ! excludeDef(tree.symbol) =>
163
164
registerOccurrence(tree.symbol, tree.span, SymbolOccurrence .Role .DEFINITION )
0 commit comments