Fix class type parameter erasure within $default methods

This commit is contained in:
Chris Smowton
2022-10-05 14:45:09 +01:00
parent be655432d6
commit 3452dcbced
6 changed files with 200 additions and 5 deletions

View File

@@ -661,10 +661,17 @@ open class KotlinUsesExtractor(
private fun isOnDeclarationStackWithoutTypeParameters(f: IrFunction) =
this is KotlinFileExtractor && this.declarationStack.findOverriddenAttributes(f)?.typeParameters?.isEmpty() == true
private fun isStaticFunctionOnStackBeforeClass(c: IrClass) =
this is KotlinFileExtractor && (this.declarationStack.findFirst { it.first == c || it.second?.isStatic == true })?.second?.isStatic == true
private fun isUnavailableTypeParameter(t: IrType) =
t is IrSimpleType && t.classifier.owner.let { owner ->
owner is IrTypeParameter && owner.parent.let { parent ->
parent is IrFunction && isOnDeclarationStackWithoutTypeParameters(parent)
when (parent) {
is IrFunction -> isOnDeclarationStackWithoutTypeParameters(parent)
is IrClass -> isStaticFunctionOnStackBeforeClass(parent)
else -> false
}
}
}