From ac92be12c698f60018e687f2ddb863c996e83a7d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 6 Apr 2016 15:26:40 +0300 Subject: [PATCH] Minor, take ProtoContainer in AnnotationAndConstantLoader#loadClassAnnotations --- .../AbstractBinaryClassAnnotationAndConstantLoader.kt | 7 +++---- .../deserialization/AnnotationAndConstantLoader.kt | 3 +-- .../deserialization/AnnotationAndConstantLoaderImpl.kt | 9 +++------ .../serialization/deserialization/MemberDeserializer.kt | 4 +--- .../descriptors/DeserializedClassDescriptor.kt | 9 +++++---- .../common/AnnotationLoaderForStubBuilderImpl.kt | 6 ++---- .../idea/decompiler/stubBuilder/ClassClsStubBuilder.kt | 2 +- 7 files changed, 16 insertions(+), 24 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 d57e177e2f9..9edefdb9491 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 @@ -66,13 +66,12 @@ abstract class AbstractBinaryClassAnnotationAndConstantLoader { - val classId = nameResolver.getClassId(classProto.fqName) - val kotlinClass = kotlinClassFinder.findKotlinClass(classId) + override fun loadClassAnnotations(container: ProtoContainer.Class): List { + val kotlinClass = kotlinClassFinder.findKotlinClass(container.classId) if (kotlinClass == null) { // This means that the resource we're constructing the descriptor from is no longer present: KotlinClassFinder had found the // class earlier, but it can't now - errorReporter.reportLoadingError("Kotlin class for loading class annotations is not found: ${classId.asSingleFqName()}", null) + errorReporter.reportLoadingError("Kotlin class for loading class annotations is not found: ${container.debugFqName()}", null) return listOf() } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt index 4d1dda930e2..f8c5c237fb7 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoader.kt @@ -24,8 +24,7 @@ import org.jetbrains.kotlin.types.KotlinType // TODO: simplify this interface interface AnnotationAndConstantLoader { fun loadClassAnnotations( - classProto: ProtoBuf.Class, - nameResolver: NameResolver + container: ProtoContainer.Class ): List fun loadCallableAnnotations( diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt index 410f1fa441a..e3f56bd14e1 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/AnnotationAndConstantLoaderImpl.kt @@ -32,12 +32,9 @@ class AnnotationAndConstantLoaderImpl( ) : AnnotationAndConstantLoader, AnnotationWithTarget> { private val deserializer = AnnotationDeserializer(module, notFoundClasses) - override fun loadClassAnnotations( - classProto: ProtoBuf.Class, - nameResolver: NameResolver - ): List { - val annotations = classProto.getExtension(protocol.classAnnotation).orEmpty() - return annotations.map { proto -> deserializer.deserializeAnnotation(proto, nameResolver) } + override fun loadClassAnnotations(container: ProtoContainer.Class): List { + val annotations = container.classProto.getExtension(protocol.classAnnotation).orEmpty() + return annotations.map { proto -> deserializer.deserializeAnnotation(proto, container.nameResolver) } } override fun loadCallableAnnotations( diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt index a4430331d15..e0effb6a87b 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/MemberDeserializer.kt @@ -241,9 +241,7 @@ class MemberDeserializer(private val c: DeserializationContext) { private fun DeclarationDescriptor.asProtoContainer(): ProtoContainer? = when (this) { is PackageFragmentDescriptor -> ProtoContainer.Package(fqName, c.nameResolver, c.typeTable, c.packagePartSource) - is DeserializedClassDescriptor -> ProtoContainer.Class( - classProto, c.nameResolver, c.typeTable, (containingDeclaration as? ClassDescriptor)?.kind - ) + is DeserializedClassDescriptor -> thisAsProtoContainer else -> null // TODO: support annotations on lambdas and their parameters } } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt index 8421c173cae..2c02a52c0ff 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedClassDescriptor.kt @@ -73,12 +73,15 @@ class DeserializedClassDescriptor( private val constructors = c.storageManager.createLazyValue { computeConstructors() } private val companionObjectDescriptor = c.storageManager.createNullableLazyValue { computeCompanionObjectDescriptor() } + internal val thisAsProtoContainer = + ProtoContainer.Class(classProto, c.nameResolver, c.typeTable, (containingDeclaration as? ClassDescriptor)?.kind) + private val annotations = if (!Flags.HAS_ANNOTATIONS.get(classProto.flags)) { Annotations.EMPTY } else DeserializedAnnotations(c.storageManager) { - c.components.annotationAndConstantLoader.loadClassAnnotations(classProto, c.nameResolver) + c.components.annotationAndConstantLoader.loadClassAnnotations(thisAsProtoContainer) } override fun getContainingDeclaration(): DeclarationDescriptor = containingDeclaration @@ -284,8 +287,6 @@ class DeserializedClassDescriptor( private inner class EnumEntryClassDescriptors { private val enumEntryProtos = classProto.enumEntryList.associateBy { c.nameResolver.getName(it.name) } - private val protoContainer = - ProtoContainer.Class(classProto, c.nameResolver, c.typeTable, (containingDeclaration as? ClassDescriptor)?.kind) val enumEntryByName = c.storageManager.createMemoizedFunctionWithNullableValues { name -> @@ -294,7 +295,7 @@ class DeserializedClassDescriptor( EnumEntrySyntheticClassDescriptor.create( c.storageManager, this@DeserializedClassDescriptor, name, enumMemberNames, DeserializedAnnotations(c.storageManager) { - c.components.annotationAndConstantLoader.loadEnumEntryAnnotations(protoContainer, proto) + c.components.annotationAndConstantLoader.loadEnumEntryAnnotations(thisAsProtoContainer, proto) }, SourceElement.NO_SOURCE ) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt index a62d52ce181..c1e3a734ada 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/common/AnnotationLoaderForStubBuilderImpl.kt @@ -31,10 +31,8 @@ class AnnotationLoaderForStubBuilderImpl( private val protocol: SerializerExtensionProtocol ) : AnnotationAndConstantLoader { - override fun loadClassAnnotations( - classProto: ProtoBuf.Class, nameResolver: NameResolver - ): List = - classProto.getExtension(protocol.classAnnotation).orEmpty().map { nameResolver.getClassId(it.id) } + override fun loadClassAnnotations(container: ProtoContainer.Class): List = + container.classProto.getExtension(protocol.classAnnotation).orEmpty().map { container.nameResolver.getClassId(it.id) } override fun loadCallableAnnotations( container: ProtoContainer, diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt index 73f0e597cc3..576f242bd41 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/ClassClsStubBuilder.kt @@ -90,7 +90,7 @@ private class ClassClsStubBuilder( val classOrObjectStub = doCreateClassOrObjectStub() val modifierList = createModifierListForClass(classOrObjectStub) if (Flags.HAS_ANNOTATIONS.get(classProto.flags)) { - createAnnotationStubs(c.components.annotationLoader.loadClassAnnotations(classProto, c.nameResolver), modifierList) + createAnnotationStubs(c.components.annotationLoader.loadClassAnnotations(thisAsProtoContainer), modifierList) } return classOrObjectStub }