Generate parameter declarations for fake overrides
This commit is contained in:
@@ -65,7 +65,7 @@ class ClassGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGe
|
||||
|
||||
generateMembersDeclaredInClassBody(irClass, ktClassOrObject)
|
||||
|
||||
generateFakeOverrideMemberDeclarations(irClass)
|
||||
generateFakeOverrideMemberDeclarations(irClass, ktClassOrObject)
|
||||
|
||||
if (descriptor.isData) {
|
||||
generateAdditionalMembersForDataClass(irClass, ktClassOrObject)
|
||||
@@ -77,7 +77,7 @@ class ClassGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGe
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateFakeOverrideMemberDeclarations(irClass: IrClass) {
|
||||
private fun generateFakeOverrideMemberDeclarations(irClass: IrClass, ktClassOrObject: KtClassOrObject) {
|
||||
irClass.descriptor.unsubstitutedMemberScope.getContributedDescriptors()
|
||||
.mapNotNull {
|
||||
it.safeAs<CallableMemberDescriptor>().takeIf {
|
||||
@@ -86,7 +86,7 @@ class ClassGenerator(declarationGenerator: DeclarationGenerator) : DeclarationGe
|
||||
}
|
||||
.sortedWith(StableCallableMembersComparator)
|
||||
.forEach { fakeOverride ->
|
||||
irClass.addMember(declarationGenerator.generateFakeOverrideDeclaration(fakeOverride))
|
||||
irClass.addMember(declarationGenerator.generateFakeOverrideDeclaration(fakeOverride, ktClassOrObject))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -87,7 +87,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
fun generateInitializerBody(scopeOwnerSymbol: IrSymbol, ktBody: KtExpression): IrExpressionBody =
|
||||
createBodyGenerator(scopeOwnerSymbol).generateExpressionBody(ktBody)
|
||||
|
||||
fun generateFakeOverrideDeclaration(memberDescriptor: CallableMemberDescriptor, ktElement: KtElement? = null): IrDeclaration {
|
||||
fun generateFakeOverrideDeclaration(memberDescriptor: CallableMemberDescriptor, ktElement: KtElement): IrDeclaration {
|
||||
assert(memberDescriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||
"Fake override expected: $memberDescriptor"
|
||||
}
|
||||
@@ -101,7 +101,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtElement?): IrProperty =
|
||||
private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtElement): IrProperty =
|
||||
IrPropertyImpl(
|
||||
ktElement.startOffsetOrUndefined, ktElement.endOffsetOrUndefined,
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
@@ -117,12 +117,8 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
propertyDescriptor.setter?.let { generateFakeOverrideFunction(it, ktElement) }
|
||||
)
|
||||
|
||||
private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtElement?): IrFunction =
|
||||
context.symbolTable.declareSimpleFunction(
|
||||
ktElement.startOffsetOrUndefined, ktElement.endOffsetOrUndefined,
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
functionDescriptor
|
||||
)
|
||||
private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtElement): IrFunction =
|
||||
FunctionGenerator(this).generateFakeOverrideFunction(functionDescriptor, ktElement)
|
||||
}
|
||||
|
||||
abstract class DeclarationGeneratorExtension(val declarationGenerator: DeclarationGenerator) : Generator {
|
||||
|
||||
+9
-1
@@ -54,6 +54,14 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
generateLambdaBody(ktFunction)
|
||||
}
|
||||
|
||||
fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtElement): IrFunction =
|
||||
context.symbolTable.declareSimpleFunction(
|
||||
ktElement.startOffsetOrUndefined, ktElement.endOffsetOrUndefined,
|
||||
IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||
functionDescriptor
|
||||
).buildWithScope { irFunction ->
|
||||
generateFunctionParameterDeclarations(irFunction, ktElement, null)
|
||||
}
|
||||
|
||||
private inline fun declareSimpleFunction(
|
||||
ktFunction: KtFunction,
|
||||
@@ -71,7 +79,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
||||
|
||||
fun generateFunctionParameterDeclarations(
|
||||
irFunction: IrFunction,
|
||||
ktParameterOwner: KtElement,
|
||||
ktParameterOwner: KtElement?,
|
||||
ktReceiverParameterElement: KtElement?
|
||||
) {
|
||||
declarationGenerator.generateTypeParameterDeclarations(irFunction, irFunction.descriptor.typeParameters)
|
||||
|
||||
Reference in New Issue
Block a user