FIR serializer: special version requirement for @JvmField property in interface companion
This commit is contained in:
committed by
Mikhail Glukhikh
parent
dc2226b42f
commit
c8170702c6
+29
-20
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.FirSession
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.*
|
||||||
|
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.serialization.FirElementSerializer
|
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
||||||
@@ -260,34 +261,42 @@ class FirJvmSerializerExtension(
|
|||||||
proto.setExtension(JvmProtoBuf.propertySignature, signature)
|
proto.setExtension(JvmProtoBuf.propertySignature, signature)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
if (property.isJvmFieldPropertyInInterfaceCompanion() && versionRequirementTable != null) {
|
||||||
// if (property.isJvmFieldPropertyInInterfaceCompanion() && versionRequirementTable != null) {
|
proto.setExtension(JvmProtoBuf.flags, JvmFlags.getPropertyFlags(true))
|
||||||
// proto.setExtension(JvmProtoBuf.flags, JvmFlags.getPropertyFlags(true))
|
|
||||||
//
|
proto.addVersionRequirement(
|
||||||
// proto.addVersionRequirement(
|
DescriptorSerializer.writeVersionRequirement(
|
||||||
// DescriptorSerializer.writeVersionRequirement(
|
1,
|
||||||
// 1,
|
2,
|
||||||
// 2,
|
70,
|
||||||
// 70,
|
ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION,
|
||||||
// ProtoBuf.VersionRequirement.VersionKind.COMPILER_VERSION,
|
versionRequirementTable
|
||||||
// versionRequirementTable
|
)
|
||||||
// )
|
)
|
||||||
// )
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
if (getter?.needsInlineParameterNullCheckRequirement() == true || setter?.needsInlineParameterNullCheckRequirement() == true) {
|
if (getter?.needsInlineParameterNullCheckRequirement() == true || setter?.needsInlineParameterNullCheckRequirement() == true) {
|
||||||
versionRequirementTable?.writeInlineParameterNullCheckRequirement(proto::addVersionRequirement)
|
versionRequirementTable?.writeInlineParameterNullCheckRequirement(proto::addVersionRequirement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun PropertyDescriptor.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
private fun FirProperty.isJvmFieldPropertyInInterfaceCompanion(): Boolean {
|
||||||
if (!DescriptorsJvmAbiUtil.hasJvmFieldAnnotation(this)) return false
|
if (!hasJvmFieldAnnotation) return false
|
||||||
|
|
||||||
val container = containingDeclaration
|
val container =
|
||||||
if (!DescriptorUtils.isCompanionObject(container)) return false
|
symbol.callableId.classId?.let {
|
||||||
|
session.firProvider.getFirClassifierByFqName(it) as? FirRegularClass
|
||||||
|
}
|
||||||
|
if (container == null || !container.isCompanion) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
val grandParent = (container as ClassDescriptor).containingDeclaration
|
val grandParent =
|
||||||
return DescriptorUtils.isInterface(grandParent) || DescriptorUtils.isAnnotationClass(grandParent)
|
container.classId.outerClassId?.let {
|
||||||
|
session.firProvider.getFirClassifierByFqName(it) as? FirRegularClass
|
||||||
|
}
|
||||||
|
return grandParent != null &&
|
||||||
|
(grandParent.classKind == ClassKind.INTERFACE || grandParent.classKind == ClassKind.ANNOTATION_CLASS)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun serializeErrorType(type: ConeKotlinErrorType, builder: ProtoBuf.Type.Builder) {
|
override fun serializeErrorType(type: ConeKotlinErrorType, builder: ProtoBuf.Type.Builder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user