PSI2IR: copy isPropertyWithPlatformField to GeneratorExtensions

This commit is contained in:
pyos
2019-11-25 15:00:34 +01:00
committed by Alexander Udalov
parent 3cae90dd26
commit a950df3c80
5 changed files with 13 additions and 5 deletions
@@ -65,6 +65,9 @@ object JvmGeneratorExtensions : GeneratorExtensions() {
descriptor.visibility
else
null
override fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean =
descriptor.hasJvmFieldAnnotation()
}
class JvmStubGeneratorExtensions : StubGeneratorExtensions() {
@@ -29,4 +29,6 @@ open class GeneratorExtensions {
}
open fun computeFieldVisibility(descriptor: PropertyDescriptor): Visibility? = null
open fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean = false
}
@@ -102,6 +102,9 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
DelegatedPropertyGenerator(declarationGenerator)
.generateDelegatedProperty(ktProperty, ktDelegate, propertyDescriptor)
private fun PropertyDescriptor.actuallyHasBackingField(bindingContext: BindingContext) =
hasBackingField(bindingContext) || context.extensions.isPropertyWithPlatformField(this)
private fun generateSimpleProperty(ktProperty: KtProperty, propertyDescriptor: PropertyDescriptor): IrProperty =
context.symbolTable.declareProperty(
ktProperty.startOffsetSkippingComments, ktProperty.endOffset,
@@ -110,7 +113,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
isDelegated = false
).buildWithScope { irProperty ->
irProperty.backingField =
if (propertyDescriptor.hasBackingField(context.bindingContext))
if (propertyDescriptor.actuallyHasBackingField(context.bindingContext))
generatePropertyBackingField(ktProperty, propertyDescriptor) { irField ->
ktProperty.initializer?.let { ktInitializer ->
val compileTimeConst = propertyDescriptor.compileTimeInitializer
@@ -139,11 +142,11 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
val endOffset = ktElement.pureEndOffsetOrUndefined
val backingField =
if (propertyDescriptor.hasBackingField(context.bindingContext) && propertyDescriptor.fieldVisibility.admitsFakeOverride)
if (propertyDescriptor.actuallyHasBackingField(context.bindingContext) && propertyDescriptor.fieldVisibility.admitsFakeOverride)
context.symbolTable.declareFieldWithOverrides(
startOffset, endOffset, IrDeclarationOrigin.FAKE_OVERRIDE,
propertyDescriptor, propertyDescriptor.type.toIrType()
) { it.hasBackingField(context.bindingContext) }
) { it.actuallyHasBackingField(context.bindingContext) }
else
null
+1 -1
View File
@@ -15,7 +15,7 @@ open class B : A() {
open class C : B() {
fun test(): String {
return super.publicField + super.internalField + super.protectedfield
return publicField + super.internalField + super.protectedfield
}
}
@@ -11,7 +11,7 @@ open class B : A()
open class C : B() {
fun test(): String {
return super.publicField + super.internalField + super.protectedfield
return publicField + super.internalField + super.protectedfield
}
}