[IR BE] Fix inline class lowering

- provide additional type parameters from context when transforming
 constructor into static function.
 - fix KT-41771
 - add test
This commit is contained in:
Roman Artemev
2020-09-22 17:57:55 +03:00
parent 5954db18cb
commit 76ed09482f
9 changed files with 63 additions and 1 deletions
@@ -255,8 +255,24 @@ class InlineClassLowering(val context: CommonBackendContext) {
else -> Name.identifier(asString() + INLINE_CLASS_IMPL_SUFFIX)
}
private fun collectTypeParameters(declaration: IrTypeParametersContainer): List<IrTypeParameter> {
val result = mutableListOf<IrTypeParameter>()
fun collectImpl(declaration: IrDeclaration) {
if (declaration is IrTypeParametersContainer) result.addAll(declaration.typeParameters)
if (declaration is IrClass && declaration.isInner) collectImpl(declaration.parent as IrDeclaration)
}
collectImpl(declaration)
return result
}
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction =
context.irFactory.createStaticFunctionWithReceivers(
function.parent, function.name.toInlineClassImplementationName(), function
function.parent,
function.name.toInlineClassImplementationName(),
function,
typeParametersFromContext = collectTypeParameters(function.parentAsClass)
)
}