IR: handle MemberAccessExpression type parameters in RemapTypes

This commit is contained in:
Georgy Bronnikov
2020-09-15 17:48:35 +03:00
parent 3041a2815c
commit 728c55973a
2 changed files with 15 additions and 0 deletions
@@ -123,6 +123,13 @@ class ScopeValidator(
super.visitVariableAccess(expression)
}
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
for (i in 0 until expression.typeArgumentsCount) {
expression.getTypeArgument(i)?.let { visitTypeAccess(expression, it) }
}
super.visitMemberAccess(expression)
}
override fun visitCatch(aCatch: IrCatch) {
// catchParameter only has scope over result expression
handleValuesContainer(emptyList()) {
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.util
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
import org.jetbrains.kotlin.ir.expressions.IrTypeOperatorCall
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
@@ -70,6 +71,13 @@ private class RemapTypesHelper(private val typeRemapper: TypeRemapper) : IrEleme
super.visitExpression(expression)
}
override fun visitMemberAccess(expression: IrMemberAccessExpression<*>) {
for (i in 0 until expression.typeArgumentsCount) {
expression.getTypeArgument(i)?.let { expression.putTypeArgument(i, typeRemapper.remapType(it)) }
}
super.visitMemberAccess(expression)
}
override fun visitTypeOperator(expression: IrTypeOperatorCall) {
expression.typeOperand = typeRemapper.remapType(expression.typeOperand)
super.visitTypeOperator(expression)