FIR: fix serialization of JvmField-properties of local classes

#KT-48175 Fixed
This commit is contained in:
Mikhail Glukhikh
2021-08-09 17:47:52 +03:00
parent 2e2edf398c
commit f6413c41a0
4 changed files with 27 additions and 5 deletions
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
import org.jetbrains.kotlin.fir.resolve.toFirRegularClass
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
import org.jetbrains.kotlin.fir.types.*
@@ -259,11 +260,9 @@ class FirJvmSerializerExtension(
private fun FirProperty.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
if (!hasJvmFieldAnnotation) return false
val container =
dispatchReceiverType?.classId?.let {
session.firProvider.getFirClassifierByFqName(it) as? FirRegularClass
}
if (container == null || !container.isCompanion) {
val container = (dispatchReceiverType as? ConeClassLikeType)?.lookupTag?.toFirRegularClass(session)
// Note: companions are anyway forbidden in local classes
if (container == null || !container.isCompanion || container.isLocal) {
return false
}
@@ -16034,6 +16034,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt");
}
@Test
@TestMetadata("jvmFieldInLocalClass.kt")
public void testJvmFieldInLocalClass() throws Exception {
runTest("compiler/testData/codegen/box/fir/jvmFieldInLocalClass.kt");
}
@Test
@TestMetadata("KotlinDocumentationProvider.kt")
public void testKotlinDocumentationProvider() throws Exception {
@@ -0,0 +1,11 @@
// TARGET_BACKEND: JVM_IR
// WITH_RUNTIME
fun box(): String {
class Bean {
@JvmField
val a: String = "OK"
}
return Bean().a
}
@@ -16034,6 +16034,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt");
}
@Test
@TestMetadata("jvmFieldInLocalClass.kt")
public void testJvmFieldInLocalClass() throws Exception {
runTest("compiler/testData/codegen/box/fir/jvmFieldInLocalClass.kt");
}
@Test
@TestMetadata("KotlinDocumentationProvider.kt")
public void testKotlinDocumentationProvider() throws Exception {