[FIR] Handle more cases of implicit types in FirNoImplicitTypesHandler
This commit is contained in:
+23
-1
@@ -6,8 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.test.frontend.fir.handlers
|
package org.jetbrains.kotlin.test.frontend.fir.handlers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
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.render
|
||||||
|
import org.jetbrains.kotlin.fir.types.FirErrorTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef
|
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.fir.visitors.FirDefaultVisitor
|
||||||
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
|
import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact
|
||||||
import org.jetbrains.kotlin.test.model.TestModule
|
import org.jetbrains.kotlin.test.model.TestModule
|
||||||
@@ -38,12 +42,30 @@ class FirNoImplicitTypesHandler(testServices: TestServices) : FirAnalysisHandler
|
|||||||
}
|
}
|
||||||
|
|
||||||
private inner class Visitor : FirDefaultVisitor<Unit, FirElement>() {
|
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) {
|
override fun visitElement(element: FirElement, data: FirElement) {
|
||||||
element.acceptChildren(this, element)
|
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) {
|
override fun visitImplicitTypeRef(implicitTypeRef: FirImplicitTypeRef, data: FirElement) {
|
||||||
detectedImplicitTypesParents += data
|
detectedImplicitTypesParents += data
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user