From d45709993e763aae9bb3ab4771120c404cc6ce7e Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 2 Mar 2021 15:09:18 +0300 Subject: [PATCH] [FIR] Support reading annotations of properties from interfaces in different jvm default modes --- .../JvmBinaryAnnotationDeserializer.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt index c9a8b148c8e..eb9e6392ae9 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/JvmBinaryAnnotationDeserializer.kt @@ -18,11 +18,13 @@ import org.jetbrains.kotlin.load.kotlin.MemberSignature import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf +import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmFlags import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.utils.addToStdlib.runIf class JvmBinaryAnnotationDeserializer( val session: FirSession, @@ -81,7 +83,14 @@ class JvmBinaryAnnotationDeserializer( ): List { val signature = getPropertySignature(propertyProto, nameResolver, typeTable, synthetic = true) ?: return emptyList() val classIsInterface = containingClassProto?.let { Flags.CLASS_KIND.get(it.flags) == ProtoBuf.Class.Kind.INTERFACE } ?: false - return findJvmBinaryClassAndLoadMemberAnnotations(signature, searchInDefaultImpls = classIsInterface).map { + val jvmClassFlags = runIf(containingClassProto?.hasExtension(JvmProtoBuf.jvmClassFlags) == true) { + containingClassProto?.getExtension(JvmProtoBuf.jvmClassFlags) + } + val allCompatibilityModeIsEnabled = jvmClassFlags?.let { JvmFlags.IS_ALL_COMPATIBILITY_MODE.get(it) } ?: true + return findJvmBinaryClassAndLoadMemberAnnotations( + signature, + searchInDefaultImpls = classIsInterface && allCompatibilityModeIsEnabled + ).map { buildAnnotationCall { annotationTypeRef = it.annotationTypeRef argumentList = it.argumentList