K1: add support for Enum.entries in Java scopes
This commit is contained in:
@@ -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<VariableDescriptor> {
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+21
-10
@@ -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<Name> = emptySet()
|
||||
@@ -66,14 +69,16 @@ class LazyJavaStaticClassScope(
|
||||
|
||||
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, 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<SimpleFunctionDescriptor> {
|
||||
|
||||
Reference in New Issue
Block a user