[WIP][IR] Another approach for fixing type parameter validation KT-69305
diff --git a/compiler/ir/ir.validation/src/org/jetbrains/kotlin/ir/validation/checkers/type/IrTypeParameterScopeChecker.kt b/compiler/ir/ir.validation/src/org/jetbrains/kotlin/ir/validation/checkers/type/IrTypeParameterScopeChecker.kt index 354f042..a823e9f 100644 --- a/compiler/ir/ir.validation/src/org/jetbrains/kotlin/ir/validation/checkers/type/IrTypeParameterScopeChecker.kt +++ b/compiler/ir/ir.validation/src/org/jetbrains/kotlin/ir/validation/checkers/type/IrTypeParameterScopeChecker.kt
@@ -6,6 +6,7 @@ package org.jetbrains.kotlin.ir.validation.checkers.type import org.jetbrains.kotlin.ir.IrElement +import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol import org.jetbrains.kotlin.ir.types.IrSimpleType import org.jetbrains.kotlin.ir.types.IrType @@ -34,15 +35,21 @@ private fun checkTypeParameterReference( context: CheckerContext, - element: IrElement, + container: IrElement, typeParameterSymbol: IrTypeParameterSymbol, ) { - if (!context.typeParameterScopeStack.isVisibleInCurrentScope(typeParameterSymbol)) { + if ( + !context.typeParameterScopeStack.isVisibleInCurrentScope(typeParameterSymbol) && + !typeParameterSymbol.isIntroducedBy(container) + ) { context.error( - element, + container, "The following element references a type parameter '${typeParameterSymbol.owner.render()}' that is not available " + "in the current scope." ) } } -} \ No newline at end of file + + private fun IrTypeParameterSymbol.isIntroducedBy(container: IrElement): Boolean = + container is IrTypeParametersContainer && container.typeParameters.any { it.symbol == this } +}