@@ -47,12 +47,11 @@ class CheckUnused extends MiniPhase:
47
47
*/
48
48
private val _key = Property .Key [UnusedData ]
49
49
50
- extension (k : Property .Key [UnusedData ])
51
- private def unusedDataApply [U ](f : UnusedData => U )(using Context ): Context =
52
- ctx.property(_key).foreach(f)
53
- ctx
54
- private def getUnusedData (using Context ): Option [UnusedData ] =
55
- ctx.property(_key)
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)
56
55
57
56
override def phaseName : String = CheckUnused .phaseName
58
57
@@ -72,7 +71,7 @@ class CheckUnused extends MiniPhase:
72
71
// ========== END + REPORTING ==========
73
72
74
73
override def transformUnit (tree : tpd.Tree )(using Context ): tpd.Tree =
75
- _key. unusedDataApply(ud => reportUnused(ud.getUnused))
74
+ unusedDataApply(ud => reportUnused(ud.getUnused))
76
75
tree
77
76
78
77
// ========== MiniPhase Prepare ==========
@@ -83,14 +82,14 @@ class CheckUnused extends MiniPhase:
83
82
84
83
override def prepareForIdent (tree : tpd.Ident )(using Context ): Context =
85
84
if tree.symbol.exists then
86
- _key. unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
85
+ unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
87
86
else if tree.hasType then
88
- _key. unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some (tree.name)))
87
+ unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some (tree.name)))
89
88
else
90
89
ctx
91
90
92
91
override def prepareForSelect (tree : tpd.Select )(using Context ): Context =
93
- _key. unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
92
+ unusedDataApply(_.registerUsed(tree.symbol, Some (tree.name)))
94
93
95
94
override def prepareForBlock (tree : tpd.Block )(using Context ): Context =
96
95
pushInBlockTemplatePackageDef(tree)
@@ -102,7 +101,7 @@ class CheckUnused extends MiniPhase:
102
101
pushInBlockTemplatePackageDef(tree)
103
102
104
103
override def prepareForValDef (tree : tpd.ValDef )(using Context ): Context =
105
- _key. unusedDataApply{ud =>
104
+ unusedDataApply{ud =>
106
105
// do not register the ValDef generated for `object`
107
106
traverseAnnotations(tree.symbol)
108
107
if ! tree.symbol.is(Module ) then
@@ -111,7 +110,7 @@ class CheckUnused extends MiniPhase:
111
110
}
112
111
113
112
override def prepareForDefDef (tree : tpd.DefDef )(using Context ): Context =
114
- _key. unusedDataApply{ ud =>
113
+ unusedDataApply{ ud =>
115
114
import ud .registerTrivial
116
115
tree.registerTrivial
117
116
traverseAnnotations(tree.symbol)
@@ -120,7 +119,7 @@ class CheckUnused extends MiniPhase:
120
119
}
121
120
122
121
override def prepareForTypeDef (tree : tpd.TypeDef )(using Context ): Context =
123
- _key. unusedDataApply{ ud =>
122
+ unusedDataApply{ ud =>
124
123
if ! tree.symbol.is(Param ) then // Ignore type parameter (as Scala 2)
125
124
traverseAnnotations(tree.symbol)
126
125
ud.registerDef(tree)
@@ -129,10 +128,10 @@ class CheckUnused extends MiniPhase:
129
128
130
129
override def prepareForBind (tree : tpd.Bind )(using Context ): Context =
131
130
traverseAnnotations(tree.symbol)
132
- _key. unusedDataApply(_.registerPatVar(tree))
131
+ unusedDataApply(_.registerPatVar(tree))
133
132
134
133
override def prepareForTypeTree (tree : tpd.TypeTree )(using Context ): Context =
135
- typeTraverser(_key. unusedDataApply).traverse(tree.tpe)
134
+ if ! tree. isInstanceOf [tpd. InferredTypeTree ] then typeTraverser(unusedDataApply).traverse(tree.tpe)
136
135
ctx
137
136
138
137
// ========== MiniPhase Transform ==========
@@ -150,27 +149,27 @@ class CheckUnused extends MiniPhase:
150
149
tree
151
150
152
151
override def transformValDef (tree : tpd.ValDef )(using Context ): tpd.Tree =
153
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
152
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
154
153
tree
155
154
156
155
override def transformDefDef (tree : tpd.DefDef )(using Context ): tpd.Tree =
157
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
156
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
158
157
tree
159
158
160
159
override def transformTypeDef (tree : tpd.TypeDef )(using Context ): tpd.Tree =
161
- _key. unusedDataApply(_.removeIgnoredUsage(tree.symbol))
160
+ unusedDataApply(_.removeIgnoredUsage(tree.symbol))
162
161
tree
163
162
164
163
// ---------- MiniPhase HELPERS -----------
165
164
166
165
private def pushInBlockTemplatePackageDef (tree : tpd.Block | tpd.Template | tpd.PackageDef )(using Context ): Context =
167
- _key. unusedDataApply { ud =>
166
+ unusedDataApply { ud =>
168
167
ud.pushScope(UnusedData .ScopeType .fromTree(tree))
169
168
}
170
169
ctx
171
170
172
171
private def popOutBlockTemplatePackageDef ()(using Context ): Context =
173
- _key. unusedDataApply { ud =>
172
+ unusedDataApply { ud =>
174
173
ud.popScope()
175
174
}
176
175
ctx
@@ -193,7 +192,7 @@ class CheckUnused extends MiniPhase:
193
192
val newCtx = if tree.symbol.exists then ctx.withOwner(tree.symbol) else ctx
194
193
tree match
195
194
case imp: tpd.Import =>
196
- _key. unusedDataApply(_.registerImport(imp))
195
+ unusedDataApply(_.registerImport(imp))
197
196
traverseChildren(tree)(using newCtx)
198
197
case ident : Ident =>
199
198
prepareForIdent(ident)
@@ -203,7 +202,7 @@ class CheckUnused extends MiniPhase:
203
202
traverseChildren(tree)(using newCtx)
204
203
case _ : (tpd.Block | tpd.Template | tpd.PackageDef ) =>
205
204
// ! DIFFERS FROM MINIPHASE
206
- _key. unusedDataApply { ud =>
205
+ unusedDataApply { ud =>
207
206
ud.inNewScope(ScopeType .fromTree(tree))(traverseChildren(tree)(using newCtx))
208
207
}
209
208
case t: tpd.ValDef =>
@@ -221,9 +220,10 @@ class CheckUnused extends MiniPhase:
221
220
case t : tpd.Bind =>
222
221
prepareForBind(t)
223
222
traverseChildren(tree)(using newCtx)
223
+ case _ : tpd.InferredTypeTree =>
224
224
case t@ tpd.TypeTree () =>
225
225
// ! DIFFERS FROM MINIPHASE
226
- typeTraverser(_key. unusedDataApply).traverse(t.tpe)
226
+ typeTraverser(unusedDataApply).traverse(t.tpe)
227
227
traverseChildren(tree)(using newCtx)
228
228
case _ =>
229
229
// ! DIFFERS FROM MINIPHASE
@@ -233,9 +233,14 @@ class CheckUnused extends MiniPhase:
233
233
234
234
/** This is a type traverser which catch some special Types not traversed by the term traverser above */
235
235
private def typeTraverser (dt : (UnusedData => Any ) => Unit )(using Context ) = new TypeTraverser :
236
- override def traverse (tp : Type ): Unit = tp match
237
- case AnnotatedType (_, annot) => dt(_.registerUsed(annot.symbol, None ))
238
- case _ => traverseChildren(tp)
236
+ override def traverse (tp : Type ): Unit =
237
+ if tp.typeSymbol.exists then dt(_.registerUsed(tp.typeSymbol, Some (tp.typeSymbol.name)))
238
+ tp match
239
+ case AnnotatedType (_, annot) =>
240
+ dt(_.registerUsed(annot.symbol, None ))
241
+ traverseChildren(tp)
242
+ case _ =>
243
+ traverseChildren(tp)
239
244
240
245
/** This traverse the annotations of the symbol */
241
246
private def traverseAnnotations (sym : Symbol )(using Context ): Unit =
0 commit comments