diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index 86167326578..9d070d6a85f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.resolve.calls.tower +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.contracts.EffectSystem @@ -466,7 +467,7 @@ class PSICallResolver( dispatchReceiver: ReceiverValueWithSmartCastInfo?, extensionReceiver: ReceiverValueWithSmartCastInfo? ): Collection { - return candidateInterceptor.interceptVariableCandidates( + val result = candidateInterceptor.interceptVariableCandidates( initialResults, this, context, @@ -477,6 +478,14 @@ class PSICallResolver( dispatchReceiver, extensionReceiver ) + if (name != StandardNames.ENUM_ENTRIES || languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries)) { + return result + } + return result.filter { + it !is PropertyDescriptor || !it.isSynthesized || + it.dispatchReceiverParameter != null || it.extensionReceiverParameter != null || + (it.containingDeclaration as? ClassDescriptor)?.kind != ClassKind.ENUM_CLASS + } } } diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt index 5b0306494ec..2aa1d2b1329 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/java/lazy/descriptors/LazyJavaStaticClassScope.kt @@ -29,11 +29,11 @@ import org.jetbrains.kotlin.load.java.descriptors.getParentJavaStaticClassScope import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext import org.jetbrains.kotlin.load.java.structure.JavaClass import org.jetbrains.kotlin.name.Name -import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod -import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesMethod +import org.jetbrains.kotlin.resolve.DescriptorFactory.* import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.utils.DFS +import org.jetbrains.kotlin.utils.addIfNotNull class LazyJavaStaticClassScope( c: LazyJavaResolverContext, @@ -55,6 +55,9 @@ class LazyJavaStaticClassScope( override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?) = declaredMemberIndex().getFieldNames().toMutableSet().apply { flatMapJavaStaticSupertypesScopes(ownerDescriptor, this) { it.getVariableNames() } + if (jClass.isEnum) { + add(StandardNames.ENUM_ENTRIES) + } } override fun computeClassNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set = emptySet() @@ -66,14 +69,16 @@ class LazyJavaStaticClassScope( override fun computeNonDeclaredFunctions(result: MutableCollection, name: Name) { val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, ownerDescriptor) - result.addAll(resolveOverridesForStaticMembers( - name, - functionsFromSupertypes, - result, - ownerDescriptor, - c.components.errorReporter, - c.components.kotlinTypeChecker.overridingUtil - )) + result.addAll( + resolveOverridesForStaticMembers( + name, + functionsFromSupertypes, + result, + ownerDescriptor, + c.components.errorReporter, + c.components.kotlinTypeChecker.overridingUtil + ) + ) if (jClass.isEnum) { when (name) { @@ -113,6 +118,12 @@ class LazyJavaStaticClassScope( ) }) } + if (jClass.isEnum) { + when (name) { + StandardNames.ENUM_ENTRIES -> + result.addIfNotNull(createEnumEntriesProperty(ownerDescriptor)) + } + } } private fun getStaticFunctionsFromJavaSuperClasses(name: Name, descriptor: ClassDescriptor): Set {