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
}