diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt index 02e28a51cd2..0510a30cc7b 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.fileClasses +import com.google.protobuf.MessageLite import com.intellij.psi.util.CachedValueProvider import com.intellij.psi.util.CachedValuesManager import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor @@ -25,6 +26,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.serialization.ProtoBuf +import org.jetbrains.kotlin.serialization.deserialization.NameResolver import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf @@ -68,15 +70,24 @@ public object JvmFileClassUtil { @JvmStatic public fun getImplClassName(callable: DeserializedCallableMemberDescriptor): Name? = - with(callable) { - val proto = proto - when (proto) { - is ProtoBuf.Constructor -> null - is ProtoBuf.Function -> proto.getExtension(JvmProtoBuf.methodImplClassName) - is ProtoBuf.Property -> proto.getExtension(JvmProtoBuf.propertyImplClassName) - else -> error("Unknown message: $proto") - }?.let { nameResolver.getName(it) } - } + getImplClassName(callable.proto, callable.nameResolver) + + @JvmStatic + public fun getImplClassName(proto: MessageLite, nameResolver: NameResolver): Name? = + when (proto) { + is ProtoBuf.Constructor -> + null + is ProtoBuf.Function -> + if (proto.hasExtension(JvmProtoBuf.methodImplClassName)) + proto.getExtension(JvmProtoBuf.methodImplClassName) + else null + is ProtoBuf.Property -> + if (proto.hasExtension(JvmProtoBuf.propertyImplClassName)) + proto.getExtension(JvmProtoBuf.propertyImplClassName) + else null + else -> + error("Unknown message: $proto") + }?.let { nameResolver.getName(it) } @JvmStatic public fun getHiddenPartFqName(file: JetFile, jvmFileClassAnnotations: ParsedJmvFileClassAnnotations): FqName = diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt index 8b6534181de..febb72378a4 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/kotlin/incremental/IncrementalPackageFragmentProvider.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentProvider import org.jetbrains.kotlin.descriptors.impl.PackageFragmentDescriptorImpl +import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.load.kotlin.ModuleMapping import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache @@ -37,7 +38,6 @@ import org.jetbrains.kotlin.serialization.PackageData import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedPackageMemberScope -import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil import org.jetbrains.kotlin.storage.NotNullLazyValue import org.jetbrains.kotlin.storage.StorageManager @@ -167,28 +167,22 @@ public class IncrementalPackageFragmentProvider( this@IncrementalPackageFragment, packageData.packageProto, packageData.nameResolver, deserializationComponents, { listOf() } ) { - override fun filteredFunctionProtos(protos: Collection): Collection { - return filteredMemberProtos(protos) { - it.getExtension(JvmProtoBuf.methodImplClassName)?.let { packageData.nameResolver.getName(it) } - } - } + override fun filteredFunctionProtos(protos: Collection): Collection = + filteredMemberProtos(protos) - override fun filteredPropertyProtos(protos: Collection): Collection { - return filteredMemberProtos(protos) { - it.getExtension(JvmProtoBuf.propertyImplClassName)?.let { packageData.nameResolver.getName(it) } - } - } + override fun filteredPropertyProtos(protos: Collection): Collection = + filteredMemberProtos(protos) + + private fun filteredMemberProtos(allMemberProtos: Collection): Collection { + fun getPackagePart(callable: MessageLite): Name? = + JvmFileClassUtil.getImplClassName(callable, packageData.nameResolver) - private fun filteredMemberProtos( - allMemberProtos: Collection, - getPackagePart: (M) -> Name? - ): Collection { fun shouldSkipPackagePart(name: Name) = JvmClassName.byFqNameWithoutInnerClasses(fqName.child(name)).internalName in obsoletePackageParts if (LOG.isDebugEnabled) { val allPackageParts = allMemberProtos - .map(getPackagePart) + .map(::getPackagePart) .filterNotNull() .toSet() val skippedPackageParts = allPackageParts.filter { shouldSkipPackagePart(it) } diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt index cdaea82a188..aae537f13fa 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/BuiltInsAnnotationAndConstantLoader.kt @@ -79,6 +79,7 @@ class BuiltInsAnnotationAndConstantLoader( proto: ProtoBuf.Property, expectedType: JetType ): ConstantValue<*>? { + if (!proto.hasExtension(BuiltInsProtoBuf.compileTimeValue)) return null val value = proto.getExtension(BuiltInsProtoBuf.compileTimeValue) return deserializer.resolveValue(expectedType, value, container.nameResolver) } diff --git a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptAnnotationAndConstantLoader.kt b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptAnnotationAndConstantLoader.kt index 9ac2c9bff0b..7c98269d939 100644 --- a/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptAnnotationAndConstantLoader.kt +++ b/js/js.serializer/src/org/jetbrains/kotlin/serialization/js/KotlinJavascriptAnnotationAndConstantLoader.kt @@ -79,6 +79,7 @@ class KotlinJavascriptAnnotationAndConstantLoader( proto: ProtoBuf.Property, expectedType: JetType ): ConstantValue<*>? { + if (!proto.hasExtension(JsProtoBuf.compileTimeValue)) return null val value = proto.getExtension(JsProtoBuf.compileTimeValue) return deserializer.resolveValue(expectedType, value, container.nameResolver) }