IR. Do not generate invisible fakes
This commit is contained in:
@@ -128,7 +128,7 @@ class ClassGenerator(
|
|||||||
}
|
}
|
||||||
.sortedWith(StableDescriptorsComparator)
|
.sortedWith(StableDescriptorsComparator)
|
||||||
.forEach { fakeOverride ->
|
.forEach { fakeOverride ->
|
||||||
irClass.addMember(declarationGenerator.generateFakeOverrideDeclaration(fakeOverride, ktClassOrObject))
|
declarationGenerator.generateFakeOverrideDeclaration(fakeOverride, ktClassOrObject)?.let { irClass.declarations.add(it) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-3
@@ -141,7 +141,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
|||||||
fun generateInitializerBody(scopeOwnerSymbol: IrSymbol, ktBody: KtExpression): IrExpressionBody =
|
fun generateInitializerBody(scopeOwnerSymbol: IrSymbol, ktBody: KtExpression): IrExpressionBody =
|
||||||
createBodyGenerator(scopeOwnerSymbol).generateExpressionBody(ktBody)
|
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) {
|
assert(memberDescriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
||||||
"Fake override expected: $memberDescriptor"
|
"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)
|
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)
|
FunctionGenerator(this).generateFakeOverrideFunction(functionDescriptor, ktElement)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+7
-4
@@ -57,10 +57,13 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
generateLambdaBody(ktFunction)
|
generateLambdaBody(ktFunction)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction =
|
fun generateFakeOverrideFunction(functionDescriptor: FunctionDescriptor, ktElement: KtPureElement): IrSimpleFunction? =
|
||||||
declareSimpleFunctionInner(functionDescriptor, ktElement, IrDeclarationOrigin.FAKE_OVERRIDE).buildWithScope { irFunction ->
|
functionDescriptor.takeIf { it.visibility != Visibilities.INVISIBLE_FAKE }
|
||||||
generateFunctionParameterDeclarationsAndReturnType(irFunction, ktElement, null)
|
?.let {
|
||||||
}
|
declareSimpleFunctionInner(it, ktElement, IrDeclarationOrigin.FAKE_OVERRIDE).buildWithScope { irFunction ->
|
||||||
|
generateFunctionParameterDeclarationsAndReturnType(irFunction, ktElement, null)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private inline fun declareSimpleFunction(
|
private inline fun declareSimpleFunction(
|
||||||
ktFunction: KtFunction,
|
ktFunction: KtFunction,
|
||||||
|
|||||||
+4
-1
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.psi2ir.generators
|
package org.jetbrains.kotlin.psi2ir.generators
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
import org.jetbrains.kotlin.ir.declarations.impl.IrPropertyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
@@ -129,7 +130,9 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
irProperty.setter = generateSetterIfRequired(ktProperty, propertyDescriptor)
|
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 startOffset = ktElement.pureStartOffsetOrUndefined
|
||||||
val endOffset = ktElement.pureEndOffsetOrUndefined
|
val endOffset = ktElement.pureEndOffsetOrUndefined
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user