IR: check IrClassReference.classType in ScopeValidator
This commit is contained in:
+11
-5
@@ -142,6 +142,17 @@ class ScopeValidator(
|
|||||||
super.visitTypeOperator(expression)
|
super.visitTypeOperator(expression)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun visitClassReference(expression: IrClassReference) {
|
||||||
|
// classType should only contain star projections, but check it to be sure.
|
||||||
|
visitTypeAccess(expression, expression.classType)
|
||||||
|
super.visitClassReference(expression)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun visitExpression(expression: IrExpression) {
|
||||||
|
visitTypeAccess(expression, expression.type)
|
||||||
|
super.visitExpression(expression)
|
||||||
|
}
|
||||||
|
|
||||||
private fun visitTypeAccess(element: IrElement, type: IrType) {
|
private fun visitTypeAccess(element: IrElement, type: IrType) {
|
||||||
if (type !is IrSimpleType) return
|
if (type !is IrSimpleType) return
|
||||||
if (type.classifier is IrTypeParameterSymbol && type.classifier.owner !in accessibleTypeParameters) {
|
if (type.classifier is IrTypeParameterSymbol && type.classifier.owner !in accessibleTypeParameters) {
|
||||||
@@ -154,11 +165,6 @@ class ScopeValidator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitExpression(expression: IrExpression) {
|
|
||||||
visitTypeAccess(expression, expression.type)
|
|
||||||
super.visitExpression(expression)
|
|
||||||
}
|
|
||||||
|
|
||||||
private inline fun handleTypeParameterContainer(typeParameters: List<IrTypeParameter>, block: () -> Unit) {
|
private inline fun handleTypeParameterContainer(typeParameters: List<IrTypeParameter>, block: () -> Unit) {
|
||||||
accessibleTypeParameters.addAll(typeParameters)
|
accessibleTypeParameters.addAll(typeParameters)
|
||||||
block()
|
block()
|
||||||
|
|||||||
Reference in New Issue
Block a user