@@ -46,12 +46,11 @@ class CheckUnused extends MiniPhase:
46
46
*/
47
47
private val _key = Property .Key [UnusedData ]
48
48
49
- extension (k : Property .Key [UnusedData ])
50
- private def unusedDataApply [U ](f : UnusedData => U )(using Context ): Context =
51
- ctx.property(_key).foreach(f)
52
- ctx
53
- private def getUnusedData (using Context ): Option [UnusedData ] =
54
- ctx.property(_key)
49
+ private def unusedDataApply [U ](f : UnusedData => U )(using Context ): Context =
50
+ ctx.property(_key).foreach(f)
51
+ ctx
52
+ private def getUnusedData (using Context ): Option [UnusedData ] =
53
+ ctx.property(_key)
55
54
56
55
override def phaseName : String = CheckUnused .phaseName
57
56
@@ -71,7 +70,7 @@ class CheckUnused extends MiniPhase:
71
70
// ========== END + REPORTING ==========
72
71
73
72
override def transformUnit (tree : tpd.Tree )(using Context ): tpd.Tree =
74
- _key. unusedDataApply(ud => reportUnused(ud.getUnused))
73
+ unusedDataApply(ud => reportUnused(ud.getUnused))
75
74
tree
76
75
77
76
// ========== MiniPhase Prepare ==========
@@ -81,15 +80,15 @@ class CheckUnused extends MiniPhase:
81
80
ctx
82
81
83
82
override def prepareForIdent (tree : tpd.Ident )(using Context ): Context =
84
- if tree.symbol.exists then
85
- _key. unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
83
+ if tree.symbol.exists then
84
+ unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
86
85
else if tree.hasType then
87
- _key. unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some (tree.name)))
86
+ unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some (tree.name)))
88
87
else
89
88
ctx
90
89
91
90
override def prepareForSelect (tree : tpd.Select )(using Context ): Context =
92
- _key. unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
91
+ unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
93
92
94
93
override def prepareForBlock (tree : tpd.Block )(using Context ): Context =
95
94
pushInBlockTemplatePackageDef(tree)
@@ -101,33 +100,33 @@ class CheckUnused extends MiniPhase:
101
100
pushInBlockTemplatePackageDef(tree)
102
101
103
102
override def prepareForValDef (tree : tpd.ValDef )(using Context ): Context =
104
- _key. unusedDataApply{ud =>
103
+ unusedDataApply{ud =>
105
104
// do not register the ValDef generated for `object`
106
105
if ! tree.symbol.is(Module ) then
107
106
ud.registerDef(tree)
108
107
ud.addIgnoredUsage(tree.symbol)
109
108
}
110
109
111
110
override def prepareForDefDef (tree : tpd.DefDef )(using Context ): Context =
112
- _key. unusedDataApply{ ud =>
111
+ unusedDataApply{ ud =>
113
112
import ud .registerTrivial
114
113
tree.registerTrivial
115
114
ud.registerDef(tree)
116
115
ud.addIgnoredUsage(tree.symbol)
117
116
}
118
117
119
118
override def prepareForTypeDef (tree : tpd.TypeDef )(using Context ): Context =
120
- _key. unusedDataApply{ ud =>
119
+ unusedDataApply{ ud =>
121
120
if ! tree.symbol.is(Param ) then // Ignore type parameter (as Scala 2)
122
121
ud.registerDef(tree)
123
122
ud.addIgnoredUsage(tree.symbol)
124
123
}
125
124
126
125
override def prepareForBind (tree : tpd.Bind )(using Context ): Context =
127
- _key. unusedDataApply(_.registerPatVar(tree))
126
+ unusedDataApply(_.registerPatVar(tree))
128
127
129
128
override def prepareForTypeTree (tree : tpd.TypeTree )(using Context ): Context =
130
- typeTraverser(_key. unusedDataApply).traverse(tree.tpe)
129
+ if ! tree. isInstanceOf [tpd. InferredTypeTree ] then typeTraverser(unusedDataApply).traverse(tree.tpe)
131
130
ctx
132
131
133
132
// ========== MiniPhase Transform ==========
@@ -145,27 +144,27 @@ class CheckUnused extends MiniPhase:
145
144
tree
146
145
147
146
override def transformValDef (tree : tpd.ValDef )(using Context ): tpd.Tree =
148
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
147
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
149
148
tree
150
149
151
150
override def transformDefDef (tree : tpd.DefDef )(using Context ): tpd.Tree =
152
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
151
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
153
152
tree
154
153
155
154
override def transformTypeDef (tree : tpd.TypeDef )(using Context ): tpd.Tree =
156
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
155
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
157
156
tree
158
157
159
158
// ---------- MiniPhase HELPERS -----------
160
159
161
160
private def pushInBlockTemplatePackageDef (tree : tpd.Block | tpd.Template | tpd.PackageDef )(using Context ): Context =
162
- _key. unusedDataApply { ud =>
161
+ unusedDataApply { ud =>
163
162
ud.pushScope(UnusedData .ScopeType .fromTree(tree))
164
163
}
165
164
ctx
166
165
167
166
private def popOutBlockTemplatePackageDef ()(using Context ): Context =
168
- _key. unusedDataApply { ud =>
167
+ unusedDataApply { ud =>
169
168
ud.popScope()
170
169
}
171
170
ctx
@@ -188,7 +187,7 @@ class CheckUnused extends MiniPhase:
188
187
val newCtx = if tree.symbol.exists then ctx.withOwner(tree.symbol) else ctx
189
188
tree match
190
189
case imp: tpd.Import =>
191
- _key. unusedDataApply(_.registerImport(imp))
190
+ unusedDataApply(_.registerImport(imp))
192
191
traverseChildren(tree)(using newCtx)
193
192
case ident : Ident =>
194
193
prepareForIdent(ident)
@@ -198,7 +197,7 @@ class CheckUnused extends MiniPhase:
198
197
traverseChildren(tree)(using newCtx)
199
198
case _ : (tpd.Block | tpd.Template | tpd.PackageDef ) =>
200
199
// ! DIFFERS FROM MINIPHASE
201
- _key. unusedDataApply { ud =>
200
+ unusedDataApply { ud =>
202
201
ud.inNewScope(ScopeType .fromTree(tree))(traverseChildren(tree)(using newCtx))
203
202
}
204
203
case t: tpd.ValDef =>
@@ -216,9 +215,10 @@ class CheckUnused extends MiniPhase:
216
215
case t : tpd.Bind =>
217
216
prepareForBind(t)
218
217
traverseChildren(tree)(using newCtx)
218
+ case _ : tpd.InferredTypeTree =>
219
219
case t@ tpd.TypeTree () =>
220
220
// ! DIFFERS FROM MINIPHASE
221
- typeTraverser(_key. unusedDataApply).traverse(t.tpe)
221
+ typeTraverser(unusedDataApply).traverse(t.tpe)
222
222
traverseChildren(tree)(using newCtx)
223
223
case _ =>
224
224
// ! DIFFERS FROM MINIPHASE
@@ -228,9 +228,14 @@ class CheckUnused extends MiniPhase:
228
228
229
229
/** This is a type traverser which catch some special Types not traversed by the term traverser above */
230
230
private def typeTraverser (dt : (UnusedData => Any ) => Unit )(using Context ) = new TypeTraverser :
231
- override def traverse (tp : Type ): Unit = tp match
232
- case AnnotatedType (_, annot) => dt(_.registerUsed(annot.symbol, None ))
233
- case _ => traverseChildren(tp)
231
+ override def traverse (tp : Type ): Unit =
232
+ if tp.typeSymbol.exists then dt(_.registerUsed(tp.typeSymbol, Some (tp.typeSymbol.name)))
233
+ tp match
234
+ case AnnotatedType (_, annot) =>
235
+ dt(_.registerUsed(annot.symbol, None ))
236
+ traverseChildren(tp)
237
+ case _ =>
238
+ traverseChildren(tp)
234
239
235
240
/** Do the actual reporting given the result of the anaylsis */
236
241
private def reportUnused (res : UnusedData .UnusedResult )(using Context ): Unit =
0 commit comments