From ee43b5f1e9a50164c88d36b5434a54da3a1e9c1f Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 17 Dec 2018 18:28:22 +0300 Subject: [PATCH] IR. Do not generate invisible fakes --- .../kotlin/psi2ir/generators/ClassGenerator.kt | 2 +- .../kotlin/psi2ir/generators/DeclarationGenerator.kt | 6 +++--- .../kotlin/psi2ir/generators/FunctionGenerator.kt | 11 +++++++---- .../kotlin/psi2ir/generators/PropertyGenerator.kt | 5 ++++- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index 0339a8a4ebe..d84882d0171 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -128,7 +128,7 @@ class ClassGenerator( } .sortedWith(StableDescriptorsComparator) .forEach { fakeOverride -> - irClass.addMember(declarationGenerator.generateFakeOverrideDeclaration(fakeOverride, ktClassOrObject)) + declarationGenerator.generateFakeOverrideDeclaration(fakeOverride, ktClassOrObject)?.let { irClass.declarations.add(it) } } } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt index d3dd9f20185..311427e7124 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DeclarationGenerator.kt @@ -141,7 +141,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator { fun generateInitializerBody(scopeOwnerSymbol: IrSymbol, ktBody: KtExpression): IrExpressionBody = createBodyGenerator(scopeOwnerSymbol).generateExpressionBody(ktBody) - fun generateFakeOverrideDeclaration(memberDescriptor: CallableMemberDescriptor, ktElement: KtPureElement): IrDeclaration { + fun generateFakeOverrideDeclaration(memberDescriptor: CallableMemberDescriptor, ktElement: KtPureElement): IrDeclaration? { assert(memberDescriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) { "Fake override expected: $memberDescriptor" } @@ -155,10 +155,10 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator { } } - private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty = + private fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty? = PropertyGenerator(this).generateFakeOverrideProperty(propertyDescriptor, ktElement) - private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction = + private fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction? = FunctionGenerator(this).generateFakeOverrideFunction(functionDescriptor, ktElement) } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt index c8cdca454e8..5bd2817c955 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/FunctionGenerator.kt @@ -57,10 +57,13 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio generateLambdaBody(ktFunction) } - fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction = - declareSimpleFunctionInner(functionDescriptor, ktElement, IrDeclarationOrigin.FAKE_OVERRIDE).buildWithScope { irFunction -> - generateFunctionParameterDeclarationsAndReturnType(irFunction, ktElement, null) - } + fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction? = + functionDescriptor.takeIf { it.visibility != Visibilities.INVISIBLE_FAKE } + ?.let { + declareSimpleFunctionInner(it, ktElement, IrDeclarationOrigin.FAKE_OVERRIDE).buildWithScope { irFunction -> + generateFunctionParameterDeclarationsAndReturnType(irFunction, ktElement, null) + } + } private inline fun declareSimpleFunction( ktFunction: KtFunction, diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt index c3da3ae244c..626ba29b7f2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.descriptors.PropertyDescriptor +import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl import org.jetbrains.kotlin.ir.expressions.IrExpressionBody @@ -129,7 +130,9 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio irProperty.setter = generateSetterIfRequired(ktProperty, propertyDescriptor) } - fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty { + fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty? { + if (propertyDescriptor.visibility == Visibilities.INVISIBLE_FAKE) return null + val startOffset = ktElement.pureStartOffsetOrUndefined val endOffset = ktElement.pureEndOffsetOrUndefined