From fab9ee47f923e78baca71e90fce2a921fbf33609 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Mon, 29 Jun 2020 15:51:01 -0700 Subject: [PATCH] FIR deserializer: proper annotation loading for value parameter of property setter --- .../parameters/ExtensionPropertySetter.txt | 2 +- .../parameters/PropertySetterInClass.txt | 2 +- .../deserialization/FirMemberDeserializer.kt | 19 +++++-------------- 3 files changed, 7 insertions(+), 16 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/ExtensionPropertySetter.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/ExtensionPropertySetter.txt index 997f3fd76be..36b166a2d19 100644 --- a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/ExtensionPropertySetter.txt +++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/ExtensionPropertySetter.txt @@ -6,7 +6,7 @@ public final annotation class A : R|kotlin/Annotation| { public final class Class : R|kotlin/Any| { public final var R|kotlin/Int|.foo: R|kotlin/Int| public get(): R|kotlin/Int| - public set(value: R|kotlin/Int|): R|kotlin/Unit| + public set(@R|test/A|() value: R|kotlin/Int|): R|kotlin/Unit| public constructor(): R|test/Class| diff --git a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/PropertySetterInClass.txt b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/PropertySetterInClass.txt index 329880ad087..b2270f18e2c 100644 --- a/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/PropertySetterInClass.txt +++ b/compiler/fir/analysis-tests/testData/loadCompiledKotlin/annotations/parameters/PropertySetterInClass.txt @@ -6,7 +6,7 @@ public final annotation class A : R|kotlin/Annotation| { public final class Class : R|kotlin/Any| { public final var foo: R|kotlin/Int| public get(): R|kotlin/Int| - public set(value: R|kotlin/Int|): R|kotlin/Unit| + public set(@R|test/A|() value: R|kotlin/Int|): R|kotlin/Unit| public constructor(): R|test/Class| diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt index 3b816f294c6..5866904f61b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/deserialization/FirMemberDeserializer.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.protobuf.MessageLite import org.jetbrains.kotlin.serialization.deserialization.ProtoEnumFlags import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol @@ -233,19 +232,11 @@ class FirMemberDeserializer(private val c: FirDeserializationContext) { c.containerSource, proto, local.nameResolver, local.typeTable, setterFlags ) this.symbol = FirPropertyAccessorSymbol() - valueParameters += proto.setterValueParameter.let { - val parameterFlags = if (it.hasFlags()) it.flags else 0 - buildValueParameter { - session = c.session - origin = FirDeclarationOrigin.Library - this.returnTypeRef = returnTypeRef - name = if (it.hasName()) c.nameResolver.getName(it.name) else Name.special("") - this.symbol = FirVariableSymbol(CallableId(FqName.ROOT, name)) - isCrossinline = Flags.IS_CROSSINLINE.get(parameterFlags) - isNoinline = Flags.IS_NOINLINE.get(parameterFlags) - isVararg = it.hasVarargElementType() - } - } + valueParameters += local.memberDeserializer.valueParameters( + listOf(proto.setterValueParameter), + proto, + AbstractAnnotationDeserializer.CallableKind.PROPERTY_SETTER + ) } } else { FirDefaultPropertySetter(null, c.session, FirDeclarationOrigin.Library, returnTypeRef, visibility)