diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirNoImplicitTypesHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirNoImplicitTypesHandler.kt index 3d629f5cb7c..0250bc55c9b 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirNoImplicitTypesHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/frontend/fir/handlers/FirNoImplicitTypesHandler.kt @@ -6,8 +6,12 @@ package org.jetbrains.kotlin.test.frontend.fir.handlers import org.jetbrains.kotlin.fir.FirElement +import org.jetbrains.kotlin.fir.expressions.FirLoop +import org.jetbrains.kotlin.fir.expressions.FirLoopJump import org.jetbrains.kotlin.fir.render +import org.jetbrains.kotlin.fir.types.FirErrorTypeRef import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact import org.jetbrains.kotlin.test.model.TestModule @@ -38,12 +42,30 @@ class FirNoImplicitTypesHandler(testServices: TestServices) : FirAnalysisHandler } private inner class Visitor : FirDefaultVisitor() { - val detectedImplicitTypesParents = mutableListOf() + val detectedImplicitTypesParents = mutableSetOf() + val visitedLoopTargets = mutableSetOf() override fun visitElement(element: FirElement, data: FirElement) { element.acceptChildren(this, element) } + override fun visitResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: FirElement) { + super.visitResolvedTypeRef(resolvedTypeRef, data) + resolvedTypeRef.delegatedTypeRef?.let { visitElement(it, data) } + } + + override fun visitErrorTypeRef(errorTypeRef: FirErrorTypeRef, data: FirElement) { + super.visitErrorTypeRef(errorTypeRef, data) + errorTypeRef.delegatedTypeRef?.let { visitElement(it, data) } + } + + override fun visitLoopJump(loopJump: FirLoopJump, data: FirElement) { + super.visitLoopJump(loopJump, data) + if (visitedLoopTargets.add(loopJump.target.labeledElement)) { + visitElement(loopJump.target.labeledElement, data) + } + } + override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: FirElement) { detectedImplicitTypesParents += data }