diff --git a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/ProtoBufUtil.kt b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/ProtoBufUtil.kt index b655caa9a06..1dd12c765c8 100644 --- a/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/ProtoBufUtil.kt +++ b/core/metadata/src/org/jetbrains/kotlin/metadata/deserialization/ProtoBufUtil.kt @@ -10,3 +10,7 @@ import org.jetbrains.kotlin.protobuf.GeneratedMessageLite fun , T> GeneratedMessageLite.ExtendableMessage.getExtensionOrNull( extension: GeneratedMessageLite.GeneratedExtension ): T? = if (hasExtension(extension)) getExtension(extension) else null + +fun , T> GeneratedMessageLite.ExtendableMessage.getExtensionOrNull( + extension: GeneratedMessageLite.GeneratedExtension>, index: Int +): T? = if (index < getExtensionCount(extension)) getExtension(extension, index) else null diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt index 69a36d999fc..2a7e42fb815 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KClassImpl.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader +import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name @@ -209,9 +210,9 @@ internal class KClassImpl(override val jClass: Class) : KDeclaration } return (descriptor as? DeserializedClassDescriptor)?.let { descriptor -> - val proto = descriptor.classProto.getExtension(JvmProtoBuf.classLocalVariable, index) - val nameResolver = descriptor.c.nameResolver - deserializeToDescriptor(jClass, proto, nameResolver, descriptor.c.typeTable, MemberDeserializer::loadProperty) + descriptor.classProto.getExtensionOrNull(JvmProtoBuf.classLocalVariable, index)?.let { proto -> + deserializeToDescriptor(jClass, proto, descriptor.c.nameResolver, descriptor.c.typeTable, MemberDeserializer::loadProperty) + } } } diff --git a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt index 72ed5774a6d..97efeb45467 100644 --- a/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt +++ b/core/reflection.jvm/src/kotlin/reflect/jvm/internal/KPackageImpl.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.load.java.lazy.descriptors.LazyJavaPackageFragment import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryPackageSourceElement import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.metadata.deserialization.TypeTable +import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmNameResolver import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil @@ -103,8 +104,9 @@ internal class KPackageImpl( override fun getLocalProperty(index: Int): PropertyDescriptor? { return data().metadata?.let { (nameResolver, packageProto) -> - val proto = packageProto.getExtension(JvmProtoBuf.packageLocalVariable, index) - deserializeToDescriptor(jClass, proto, nameResolver, TypeTable(packageProto.typeTable), MemberDeserializer::loadProperty) + packageProto.getExtensionOrNull(JvmProtoBuf.packageLocalVariable, index)?.let { proto -> + deserializeToDescriptor(jClass, proto, nameResolver, TypeTable(packageProto.typeTable), MemberDeserializer::loadProperty) + } } }