@@ -72,36 +72,40 @@ class ExtractSemanticDB extends Phase:
72
72
/** The symbol occurrences generated so far, as a set */
73
73
private val generated = new mutable.HashSet [SymbolOccurrence ]
74
74
75
- /** Definitions of this symbol should be excluded from semanticdb */
75
+ /** Definitions of this symbol should be excluded from semanticdb, assumes sym exists */
76
76
private def excludeDef (sym : Symbol )(using Context ): Boolean =
77
- ! sym.exists
78
- || sym.isLocalDummy
77
+ sym.isLocalDummy
79
78
|| sym.is(Synthetic )
80
79
|| sym.isSetter
81
80
|| excludeDefOrUse(sym)
82
81
82
+ /** assumes sym exists */
83
83
private def excludeDefOrUse (sym : Symbol )(using Context ): Boolean =
84
84
sym.name.is(NameKinds .DefaultGetterName )
85
85
|| sym.isConstructor && (sym.owner.is(ModuleClass ) || ! sym.isGlobal)
86
86
|| excludeSymbol(sym)
87
87
88
+ /** assumes sym exists */
88
89
private def excludeSymbol (sym : Symbol )(using Context ): Boolean =
89
90
sym.name.isWildcard
90
91
|| excludeQual(sym)
91
92
93
+ /** assumes sym exists */
92
94
private def excludeQual (sym : Symbol )(using Context ): Boolean =
93
95
sym.isAnonymousFunction
94
96
|| sym.isAnonymousModuleVal
95
97
|| sym.name.isEmptyNumbered
96
98
99
+ /** assumes sym exists */
97
100
private def excludeChildren (sym : Symbol )(using Context ): Boolean =
98
101
sym.isAllOf(HigherKinded | Param )
99
102
100
- /** Uses of this symbol where the reference has given span should be excluded from semanticdb */
103
+ /** Uses of this symbol where the reference has given span should be excluded from semanticdb, assumes sym and qualifier exist */
101
104
private def excludeUse (qualifier : Option [Symbol ], sym : Symbol )(using Context ): Boolean =
102
105
excludeDefOrUse(sym)
103
106
|| sym.isConstructor && sym.owner.isAnnotation
104
107
|| sym == defn.Any_typeCast
108
+ || sym.owner == defn.OpsPackageClass
105
109
|| qualifier.exists(excludeQual)
106
110
107
111
private def traverseAnnotsOfDefinition (sym : Symbol )(using Context ): Unit =
@@ -112,6 +116,15 @@ class ExtractSemanticDB extends Phase:
112
116
case tree : Typed => () // hack for inline code
113
117
case tree => traverse(tree)
114
118
119
+
120
+ // guarded entrypoints
121
+ private inline def excludeSymbol0 (sym : Symbol )(using Context ) = ! sym.exists || excludeSymbol(sym)
122
+ private inline def excludeChildren0 (sym : Symbol )(using Context ) = ! sym.exists || excludeChildren(sym)
123
+ private inline def excludeDef0 (sym : Symbol )(using Context ) = ! sym.exists || excludeDef(sym)
124
+
125
+ /** assumes qualSym has been checked to exist already */
126
+ private inline def excludeUse0 (qualSym : Option [Symbol ], sym : Symbol )(using Context ) = ! sym.exists || excludeUse(qualSym, sym)
127
+
115
128
override def traverse (tree : Tree )(using Context ): Unit =
116
129
117
130
tree match
@@ -122,7 +135,7 @@ class ExtractSemanticDB extends Phase:
122
135
123
136
tree match
124
137
case tree : PackageDef =>
125
- if ! excludeDef (tree.pid.symbol)
138
+ if ! excludeDef0 (tree.pid.symbol)
126
139
&& tree.pid.span.hasLength
127
140
tree.pid match
128
141
case tree : Select =>
@@ -133,13 +146,13 @@ class ExtractSemanticDB extends Phase:
133
146
case tree : NamedDefTree =>
134
147
if tree.symbol.isAllOf(ModuleValCreationFlags )
135
148
return
136
- if ! excludeDef (tree.symbol)
149
+ if ! excludeDef0 (tree.symbol)
137
150
&& tree.span.hasLength
138
151
registerDefinition(tree.symbol, tree.adjustedNameSpan, symbolKinds(tree), tree.source)
139
152
val privateWithin = tree.symbol.privateWithin
140
153
if privateWithin.exists
141
154
registerUseGuarded(None , privateWithin, spanOfSymbol(privateWithin, tree.span, tree.source), tree.source)
142
- else if ! excludeSymbol (tree.symbol)
155
+ else if ! excludeSymbol0 (tree.symbol)
143
156
registerSymbol(tree.symbol, symbolName(tree.symbol), symbolKinds(tree))
144
157
tree match
145
158
case tree : ValDef
@@ -170,11 +183,11 @@ class ExtractSemanticDB extends Phase:
170
183
traverse(rhs)
171
184
PatternValDef .collectPats(pat).foreach(traverse)
172
185
case tree =>
173
- if ! excludeChildren (tree.symbol)
186
+ if ! excludeChildren0 (tree.symbol)
174
187
traverseChildren(tree)
175
188
case tree : Template =>
176
189
val ctorSym = tree.constr.symbol
177
- if ! excludeDef (ctorSym)
190
+ if ! excludeDef0 (ctorSym)
178
191
traverseAnnotsOfDefinition(ctorSym)
179
192
registerDefinition(ctorSym, tree.constr.span, Set .empty, tree.source)
180
193
ctorParams(tree.constr.vparamss, tree.body)
@@ -198,7 +211,7 @@ class ExtractSemanticDB extends Phase:
198
211
case _ => traverse(arg)
199
212
case tree : Assign =>
200
213
val qualSym = condOpt(tree.lhs) { case Select (qual, _) if qual.symbol.exists => qual.symbol }
201
- if ! excludeUse (qualSym, tree.lhs.symbol)
214
+ if ! excludeUse0 (qualSym, tree.lhs.symbol)
202
215
val lhs = tree.lhs.symbol
203
216
val setter = lhs.matchingSetter.orElse(lhs)
204
217
tree.lhs match
@@ -467,7 +480,7 @@ class ExtractSemanticDB extends Phase:
467
480
generated += occ
468
481
469
482
private def registerUseGuarded (qualSym : Option [Symbol ], sym : Symbol , span : Span , treeSource : SourceFile )(using Context ) =
470
- if ! excludeUse (qualSym, sym) then
483
+ if ! excludeUse0 (qualSym, sym) then
471
484
registerUse(sym, span, treeSource)
472
485
473
486
private def registerUse (sym : Symbol , span : Span , treeSource : SourceFile )(using Context ): Unit =
@@ -571,7 +584,7 @@ class ExtractSemanticDB extends Phase:
571
584
vparams <- vparamss
572
585
vparam <- vparams
573
586
do
574
- if ! excludeSymbol (vparam.symbol)
587
+ if ! excludeSymbol0 (vparam.symbol)
575
588
traverseAnnotsOfDefinition(vparam.symbol)
576
589
val symkinds =
577
590
getters.get(vparam.name).fold(SymbolKind .emptySet)(getter =>
0 commit comments