From 98b057f4954fab33f9d78005be44f7f19b9d0f5e Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 28 Jul 2015 12:51:47 +0300 Subject: [PATCH] Don't look for classes with empty or special name in deserialized scope Fix EA-59962, EA-64281, EA-65698. No new tests added because the only repro reported as KT-8187 now fails with another (much more understandable though) exception #KT-8187 Open --- .../src/org/jetbrains/kotlin/name/SpecialNames.java | 4 ++++ .../descriptors/DeserializedPackageMemberScope.kt | 6 +++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java index b2f826fec40..2511301a5df 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java +++ b/core/descriptors/src/org/jetbrains/kotlin/name/SpecialNames.java @@ -36,5 +36,9 @@ public class SpecialNames { return name != null && !name.isSpecial() ? name : SAFE_IDENTIFIER_FOR_NO_NAME; } + public static boolean isSafeIdentifier(@NotNull Name name) { + return !name.asString().isEmpty() && !name.isSpecial(); + } + private SpecialNames() {} } diff --git a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt index 55c647defef..55257348f95 100644 --- a/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt +++ b/core/deserialization/src/org/jetbrains/kotlin/serialization/deserialization/descriptors/DeserializedPackageMemberScope.kt @@ -16,11 +16,13 @@ package org.jetbrains.kotlin.serialization.deserialization.descriptors +import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.serialization.ProtoBuf import org.jetbrains.kotlin.serialization.deserialization.DeserializationComponents @@ -43,7 +45,9 @@ public open class DeserializedPackageMemberScope( override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean) = computeDescriptors(kindFilter, nameFilter) - override fun getClassDescriptor(name: Name) = c.components.deserializeClass(ClassId(packageFqName, name)) + override fun getClassDescriptor(name: Name): ClassDescriptor? = + if (SpecialNames.isSafeIdentifier(name)) c.components.deserializeClass(ClassId(packageFqName, name)) + else null override fun addClassDescriptors(result: MutableCollection, nameFilter: (Name) -> Boolean) { for (className in classNames) {