From 17dacb1efa70a675a7bd7043b9ff786862015031 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 4 May 2016 17:41:49 +0300 Subject: [PATCH] Revert "Minor, move SpecialNames.isSafeIdentifier check a little earlier" This reverts commit a3055edda9defc8fd19d8789747bb755f9ebbf10. It turns out, this re-introduces an AssertionError at ClassId. ("Class name must not be root") when LazyJavaPackageScope#getContributedClassifier is called during SAM constructor resolution below in LazyJavaPackageScope#computeNonDeclaredFunctions, which was overlooked at the time the commit was pushed --- .../load/java/lazy/descriptors/JvmPackageScope.kt | 3 --- .../java/lazy/descriptors/LazyJavaPackageScope.kt | 13 ++++++++----- .../descriptors/DeserializedPackageMemberScope.kt | 4 +++- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt index 9b7014fab38..9c1405f4998 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/JvmPackageScope.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.incremental.record import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.structure.JavaPackage import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.storage.getValue @@ -48,8 +47,6 @@ class JvmPackageScope( } override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { - if (!SpecialNames.isSafeIdentifier(name)) return null - recordLookup(location, name) val javaClassifier = javaScope.getContributedClassifier(name, location) diff --git a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt index 2dda9d0cbb7..33604b7254d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaPackageScope.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader 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.storage.NullableLazyValue @@ -102,17 +103,19 @@ class LazyJavaPackageScope( override fun hashCode() = name.hashCode() } - override fun getContributedClassifier(name: Name, location: LookupLocation): ClassDescriptor? { + override fun getContributedClassifier(name: Name, location: LookupLocation) = findClassifier(name, null) + + private fun findClassifier(name: Name, javaClass: JavaClass?): ClassDescriptor? { + if (!SpecialNames.isSafeIdentifier(name)) return null + val knownClassNamesInPackage = knownClassNamesInPackage() - if (knownClassNamesInPackage != null && name.asString() !in knownClassNamesInPackage) { + if (javaClass == null && knownClassNamesInPackage != null && name.asString() !in knownClassNamesInPackage) { return null } - return findClassifier(name, null) + return classes(FindClassRequest(name, javaClass)) } - private fun findClassifier(name: Name, javaClass: JavaClass?): ClassDescriptor? = classes(FindClassRequest(name, javaClass)) - internal fun findClassifierByJavaClass(javaClass: JavaClass) = findClassifier(javaClass.name, javaClass) override fun getContributedVariables(name: Name, location: LookupLocation): Collection = emptyList() 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 4de50db2e38..4862edee607 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 @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.incremental.components.NoLookupLocation 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 @@ -48,7 +49,8 @@ open class DeserializedPackageMemberScope( = computeDescriptors(kindFilter, nameFilter, NoLookupLocation.WHEN_GET_ALL_DESCRIPTORS) override fun getContributedClassifier(name: Name, location: LookupLocation): ClassifierDescriptor? { - if (name in classNames || c.components.fictitiousClassDescriptorFactory.shouldCreateClass(packageFqName, name)) { + if (SpecialNames.isSafeIdentifier(name) && + (name in classNames || c.components.fictitiousClassDescriptorFactory.shouldCreateClass(packageFqName, name))) { return getClassDescriptor(name) } return null