From aa9537502969a73c4029a191f1c61ea4c801952f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 5 Oct 2015 14:30:06 +0300 Subject: [PATCH] Fix incorrect copy-paste during proto messages refactoring Annotations on properties should be loaded not when the message is Property (this happens for getters/setters as well), but when the kind is explicitly set to PROPERTY. Also restore construction of JVM signatures for constructors --- ...tBinaryClassAnnotationAndConstantLoader.kt | 37 ++++++++++--------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt index b2b6666a1bd..6e0045b2922 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/kotlin/AbstractBinaryClassAnnotationAndConstantLoader.kt @@ -84,28 +84,26 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader { - return when (proto) { - is ProtoBuf.Constructor, is ProtoBuf.Function -> { - val signature = getCallableSignature(proto, container.nameResolver, kind) ?: return emptyList() - transformAnnotations(findClassAndLoadMemberAnnotations(container, proto, signature)) - } - is ProtoBuf.Property -> { - val nameResolver = container.nameResolver - val syntheticFunctionSignature = getPropertySignature(proto, nameResolver, synthetic = true) - val fieldSignature = getPropertySignature(proto, nameResolver, field = true) + if (kind == AnnotatedCallableKind.PROPERTY) { + proto as ProtoBuf.Property - val propertyAnnotations = syntheticFunctionSignature?.let { sig -> - findClassAndLoadMemberAnnotations(container, proto, sig) - } ?: listOf() + val nameResolver = container.nameResolver + val syntheticFunctionSignature = getPropertySignature(proto, nameResolver, synthetic = true) + val fieldSignature = getPropertySignature(proto, nameResolver, field = true) - val fieldAnnotations = fieldSignature?.let { sig -> - findClassAndLoadMemberAnnotations(container, proto, sig, isStaticFieldInOuter(proto)) - } ?: listOf() + val propertyAnnotations = syntheticFunctionSignature?.let { sig -> + findClassAndLoadMemberAnnotations(container, proto, sig) + }.orEmpty() - loadPropertyAnnotations(propertyAnnotations, fieldAnnotations) - } - else -> emptyList() + val fieldAnnotations = fieldSignature?.let { sig -> + findClassAndLoadMemberAnnotations(container, proto, sig, isStaticFieldInOuter(proto)) + }.orEmpty() + + return loadPropertyAnnotations(propertyAnnotations, fieldAnnotations) } + + val signature = getCallableSignature(proto, container.nameResolver, kind) ?: return emptyList() + return transformAnnotations(findClassAndLoadMemberAnnotations(container, proto, signature)) } protected abstract fun loadPropertyAnnotations(propertyAnnotations: List, fieldAnnotations: List): List @@ -299,6 +297,9 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader { + MemberSignature.fromMethod(nameResolver, proto.getExtension(constructorSignature)) + } proto is ProtoBuf.Function && proto.hasExtension(methodSignature) -> { MemberSignature.fromMethod(nameResolver, proto.getExtension(methodSignature)) }