@@ -179,9 +179,9 @@ class CycleChecker(cache: Cache) {
179
179
def cacheConstructorDependencies (constr : Symbol , deps : List [Dependency ])(using Context ): Unit =
180
180
Util .traceIndented(" deps for " + constr.show + " = " + deps.map(_.show), init)
181
181
summaryCache(constr) = deps
182
- val cls = constr.owner
182
+ val cls = constr.owner.asClass
183
183
184
- if cls.is( Flags . Module ) && cls.isStatic then
184
+ if isStaticObjectClass( cls) then
185
185
objectsInCurrentRun += cls.sourceModule
186
186
187
187
private def instanceDependencies (sym : Symbol , instanceClass : ClassSymbol )(using Context ): List [Dependency ] =
@@ -236,6 +236,9 @@ class CycleChecker(cache: Cache) {
236
236
def isStaticObjectRef (sym : Symbol )(using Context ) =
237
237
sym.isTerm && ! sym.is(Flags .Package ) && sym.is(Flags .Module ) && sym.isStatic
238
238
239
+ def isStaticObjectClass (cls : ClassSymbol )(using Context ) =
240
+ cls.is(Flags .Module ) && cls.isStatic
241
+
239
242
private def analyzeClass (cls : ClassSymbol , instanceClass : ClassSymbol )(using Context ): List [Dependency ] = {
240
243
val cdef = cls.defTree.asInstanceOf [TypeDef ]
241
244
val tpl = cdef.rhs.asInstanceOf [Template ]
@@ -263,13 +266,10 @@ class CycleChecker(cache: Cache) {
263
266
deps += InstanceUsage (cls, cls)(Vector (tree))
264
267
deps += StaticCall (cls, tree.symbol)(Vector (tree))
265
268
266
- case tree @ Select (qual, name) if name.isTermName && isStaticObjectRef(qual.symbol) =>
267
- val cls = qual.symbol.moduleClass.asClass
268
- deps += ObjectAccess (qual.symbol)(Vector (tree))
269
- deps += StaticCall (cls, tree.symbol)(Vector (tree))
270
- deps += ProxyUsage (cls, tree.symbol)(Vector (tree))
269
+ case tree @ Select (qual, name) if name.isTermName && qual.tpe.isStable =>
270
+ deps ++= analyzeType(tree.tpe, tree, exclude = cls)
271
271
272
- case tree : RefTree if tree.isTerm =>
272
+ case tree : Ident if tree.isTerm =>
273
273
deps ++= analyzeType(tree.tpe, tree, exclude = cls)
274
274
275
275
case tree : This =>
@@ -296,6 +296,12 @@ class CycleChecker(cache: Cache) {
296
296
deps.toList
297
297
}
298
298
299
+ private def useObjectMember (obj : Symbol , member : Symbol , source : Tree )(using Context ): List [Dependency ] =
300
+ val cls = obj.moduleClass.asClass
301
+ ObjectAccess (obj)(Vector (source)) ::
302
+ StaticCall (cls, member)(Vector (source)) ::
303
+ ProxyUsage (cls, member)(Vector (source)) :: Nil
304
+
299
305
private def analyzeType (tp : Type , source : Tree , exclude : Symbol )(using Context ): List [Dependency ] = tp match {
300
306
case (_ : ConstantType ) | NoPrefix => Nil
301
307
@@ -305,11 +311,11 @@ class CycleChecker(cache: Cache) {
305
311
ObjectAccess (obj)(Vector (source)) :: InstanceUsage (cls, cls)(Vector (source)) :: Nil
306
312
307
313
case tmref @ TermRef (prefix : TermRef , _) if isStaticObjectRef(prefix.symbol) =>
308
- val obj = prefix.symbol
309
- val cls = obj.moduleClass.asClass
310
- ObjectAccess (obj)( Vector (source)) ::
311
- StaticCall (cls, tmref.symbol)( Vector (source)) ::
312
- ProxyUsage (cls , tmref.symbol)( Vector ( source)) :: Nil
314
+ useObjectMember( prefix.symbol, tmref.symbol, source)
315
+
316
+ case tmref @ TermRef ( prefix : ThisType , _) if isStaticObjectClass(prefix.cls) && prefix.cls != exclude =>
317
+ val obj = prefix.cls.sourceModule
318
+ useObjectMember(obj , tmref.symbol, source)
313
319
314
320
case tmref : TermRef =>
315
321
analyzeType(tmref.prefix, source, exclude)
0 commit comments