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.render
import org.jetbrains.kotlin.fir.resolve.firProvider import org.jetbrains.kotlin.fir.resolve.firProvider
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType 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.FirElementSerializer
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
@@ -259,11 +260,9 @@ class FirJvmSerializerExtension(
private fun FirProperty.isJvmFieldPropertyInInterfaceCompanion(): Boolean { private fun FirProperty.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
if (!hasJvmFieldAnnotation) return false if (!hasJvmFieldAnnotation) return false
val container = val container = (dispatchReceiverType as? ConeClassLikeType)?.lookupTag?.toFirRegularClass(session)
dispatchReceiverType?.classId?.let { // Note: companions are anyway forbidden in local classes
session.firProvider.getFirClassifierByFqName(it) as? FirRegularClass if (container == null || !container.isCompanion || container.isLocal) {
}
if (container == null || !container.isCompanion) {
return false return false
} }
@@ -16034,6 +16034,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/fir/IrBuiltIns.kt"); 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 @Test
@TestMetadata("KotlinDocumentationProvider.kt") @TestMetadata("KotlinDocumentationProvider.kt")
public void testKotlinDocumentationProvider() throws Exception { 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"); 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 @Test
@TestMetadata("KotlinDocumentationProvider.kt") @TestMetadata("KotlinDocumentationProvider.kt")
public void testKotlinDocumentationProvider() throws Exception { public void testKotlinDocumentationProvider() throws Exception {