FIR deserializer: signature-aware annotation loading for property accessors

This commit is contained in:
Jinseong Jeon
2020-06-09 12:51:57 -07:00
committed by Mikhail Glukhikh
parent 2d55b8db07
commit fd32e918d5
7 changed files with 160 additions and 13 deletions
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.metadata.ProtoBuf.Annotation.Argument.Value.Type.*
import org.jetbrains.kotlin.metadata.deserialization.Flags
import org.jetbrains.kotlin.metadata.deserialization.NameResolver
import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.serialization.deserialization.getClassId
import org.jetbrains.kotlin.serialization.deserialization.getName
@@ -56,7 +57,8 @@ abstract class AbstractAnnotationDeserializer(
return annotations.map { deserializeAnnotation(it, nameResolver) }
}
fun loadPropertyGetterAnnotations(
open fun loadPropertyGetterAnnotations(
containerSource: DeserializedContainerSource?,
propertyProto: ProtoBuf.Property,
nameResolver: NameResolver,
getterFlags: Int
@@ -66,7 +68,8 @@ abstract class AbstractAnnotationDeserializer(
return annotations.map { deserializeAnnotation(it, nameResolver) }
}
fun loadPropertySetterAnnotations(
open fun loadPropertySetterAnnotations(
containerSource: DeserializedContainerSource?,
propertyProto: ProtoBuf.Property,
nameResolver: NameResolver,
setterFlags: Int
@@ -195,7 +195,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
this.returnTypeRef = returnTypeRef
isGetter = true
status = FirDeclarationStatusImpl(visibility, modality)
annotations += c.annotationDeserializer.loadPropertyGetterAnnotations(proto, local.nameResolver, getterFlags)
annotations +=
c.annotationDeserializer.loadPropertyGetterAnnotations(c.containerSource, proto, local.nameResolver, getterFlags)
this.symbol = FirPropertyAccessorSymbol()
}
} else {
@@ -216,7 +217,8 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) {
this.returnTypeRef = FirImplicitUnitTypeRef(source)
isGetter = false
status = FirDeclarationStatusImpl(visibility, modality)
annotations += c.annotationDeserializer.loadPropertySetterAnnotations(proto, local.nameResolver, setterFlags)
annotations +=
c.annotationDeserializer.loadPropertySetterAnnotations(c.containerSource, proto, local.nameResolver, setterFlags)
this.symbol = FirPropertyAccessorSymbol()
valueParameters += proto.setterValueParameter.let {
val parameterFlags = if (it.hasFlags()) it.flags else 0