Kotlin: Fix parent class lookup from field initializers

This commit is contained in:
Tamas Vajk
2022-05-16 12:14:28 +02:00
parent de133e80a9
commit 8ebdaf1fc2
2 changed files with 9 additions and 13 deletions

View File

@@ -8,6 +8,7 @@ import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.declarations.IrTypeParameter
import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
@@ -219,12 +220,18 @@ fun isUnspecialised(paramsContainer: IrTypeParametersContainer, args: List<IrTyp
} ?: false
}
val remainingArgs = args.drop(paramsContainer.typeParameters.size)
val parent = paramsContainer.parent as? IrTypeParametersContainer
val fieldParent = paramsContainer.parent as? IrField
val parent = if (fieldParent != null)
fieldParent.parent as? IrTypeParametersContainer
else
paramsContainer.parent as? IrTypeParametersContainer
val parentUnspecialised = when {
remainingArgs.isEmpty() -> true
parent == null -> false
parent !is IrClass -> false
else -> isUnspecialised(paramsContainer.parentAsClass, remainingArgs)
else -> isUnspecialised(parent as IrClass, remainingArgs)
}
return unspecialisedHere && parentUnspecialised
}