JVM IR: load fields for JvmField properties from dependencies
This is needed to properly lower JvmField property calls to field accesses.
This commit is contained in:
@@ -87,4 +87,7 @@ class JvmStubGeneratorExtensions : StubGeneratorExtensions() {
|
|||||||
classNameOverride[it] = facadeName
|
classNameOverride[it] = facadeName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean =
|
||||||
|
descriptor.hasJvmFieldAnnotation()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class IrLazyProperty(
|
|||||||
override val isFakeOverride: Boolean,
|
override val isFakeOverride: Boolean,
|
||||||
stubGenerator: DeclarationStubGenerator,
|
stubGenerator: DeclarationStubGenerator,
|
||||||
typeTranslator: TypeTranslator,
|
typeTranslator: TypeTranslator,
|
||||||
private val bindingContext: BindingContext? = null
|
bindingContext: BindingContext? = null
|
||||||
) :
|
) :
|
||||||
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
IrLazyDeclarationBase(startOffset, endOffset, origin, stubGenerator, typeTranslator),
|
||||||
IrProperty {
|
IrProperty {
|
||||||
@@ -72,11 +72,14 @@ class IrLazyProperty(
|
|||||||
symbol.bind(this)
|
symbol.bind(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private val hasBackingField: Boolean =
|
||||||
|
descriptor.hasBackingField(bindingContext) || stubGenerator.extensions.isPropertyWithPlatformField(descriptor)
|
||||||
|
|
||||||
override val descriptor: PropertyDescriptor
|
override val descriptor: PropertyDescriptor
|
||||||
get() = symbol.descriptor
|
get() = symbol.descriptor
|
||||||
|
|
||||||
override var backingField: IrField? by lazyVar {
|
override var backingField: IrField? by lazyVar {
|
||||||
if (descriptor.hasBackingField(bindingContext)) {
|
if (hasBackingField) {
|
||||||
stubGenerator.generateFieldStub(descriptor).apply {
|
stubGenerator.generateFieldStub(descriptor).apply {
|
||||||
correspondingPropertySymbol = this@IrLazyProperty.symbol
|
correspondingPropertySymbol = this@IrLazyProperty.symbol
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class DeclarationStubGenerator(
|
|||||||
val symbolTable: SymbolTable,
|
val symbolTable: SymbolTable,
|
||||||
languageVersionSettings: LanguageVersionSettings,
|
languageVersionSettings: LanguageVersionSettings,
|
||||||
private val irProviders: List<IrProvider> = emptyList(),
|
private val irProviders: List<IrProvider> = emptyList(),
|
||||||
private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
|
val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
|
||||||
) {
|
) {
|
||||||
private val lazyTable = symbolTable.lazyWrapper
|
private val lazyTable = symbolTable.lazyWrapper
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.ir.util
|
package org.jetbrains.kotlin.ir.util
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
|
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
@@ -15,6 +16,8 @@ open class StubGeneratorExtensions {
|
|||||||
|
|
||||||
open fun generateFacadeClass(source: DeserializedContainerSource): IrClass? = null
|
open fun generateFacadeClass(source: DeserializedContainerSource): IrClass? = null
|
||||||
|
|
||||||
|
open fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean = false
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmField
|
@JvmField
|
||||||
val EMPTY = StubGeneratorExtensions()
|
val EMPTY = StubGeneratorExtensions()
|
||||||
|
|||||||
-1
@@ -1,5 +1,4 @@
|
|||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND_MULTI_MODULE: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: 1.kt
|
// FILE: 1.kt
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user