[FIR] Handle more cases of implicit types in FirNoImplicitTypesHandler

This commit is contained in:
Ivan Kochurkin
2022-06-17 00:19:35 +03:00
committed by teamcity
parent 157eedca43
commit 02ac6110bd
@@ -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<Unit, FirElement>() {
val detectedImplicitTypesParents = mutableListOf<FirElement>()
val detectedImplicitTypesParents = mutableSetOf<FirElement>()
val visitedLoopTargets = mutableSetOf<FirLoop>()
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
}