Skip to content

Commit 25f0782

Browse files
committed
More refined analysis for calls on objects
1 parent 6546e2d commit 25f0782

File tree

1 file changed

+19
-3
lines changed

1 file changed

+19
-3
lines changed

compiler/src/dotty/tools/dotc/transform/init/CycleChecker.scala

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,9 +196,12 @@ class CycleChecker(cache: Cache) {
196196
private def methodDependencies(call: StaticCall)(using Context): List[Dependency] = trace("dependencies of " + call.symbol.show, init, _.asInstanceOf[List[Dependency]].map(_.show).toString) {
197197
if (summaryCache.contains(call.symbol)) summaryCache(call.symbol)
198198
else trace("summary for " + call.symbol.show) {
199-
val deps = analyzeMethod(call)
200-
summaryCache(call.symbol) = deps
201-
deps
199+
if call.symbol.isOneOf(Flags.Method | Flags.Lazy) then
200+
val deps = analyzeMethod(call)
201+
summaryCache(call.symbol) = deps
202+
deps
203+
else
204+
Nil
202205
}
203206
}
204207

@@ -260,6 +263,12 @@ class CycleChecker(cache: Cache) {
260263
deps += InstanceUsage(cls, cls)(Vector(tree))
261264
deps += StaticCall(cls, tree.symbol)(Vector(tree))
262265

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))
271+
263272
case tree: RefTree if tree.isTerm =>
264273
deps ++= analyzeType(tree.tpe, tree, exclude = cls)
265274

@@ -295,6 +304,13 @@ class CycleChecker(cache: Cache) {
295304
val cls = obj.moduleClass.asClass
296305
ObjectAccess(obj)(Vector(source)) :: InstanceUsage(cls, cls)(Vector(source)) :: Nil
297306

307+
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
313+
298314
case tmref: TermRef =>
299315
analyzeType(tmref.prefix, source, exclude)
300316

0 commit comments

Comments
 (0)