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
|
package org.jetbrains.kotlin.resolve.calls.tower
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.builtins.StandardNames
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.contracts.EffectSystem
|
import org.jetbrains.kotlin.contracts.EffectSystem
|
||||||
@@ -466,7 +467,7 @@ class PSICallResolver(
|
|||||||
dispatchReceiver: ReceiverValueWithSmartCastInfo?,
|
dispatchReceiver: ReceiverValueWithSmartCastInfo?,
|
||||||
extensionReceiver: ReceiverValueWithSmartCastInfo?
|
extensionReceiver: ReceiverValueWithSmartCastInfo?
|
||||||
): Collection<VariableDescriptor> {
|
): Collection<VariableDescriptor> {
|
||||||
return candidateInterceptor.interceptVariableCandidates(
|
val result = candidateInterceptor.interceptVariableCandidates(
|
||||||
initialResults,
|
initialResults,
|
||||||
this,
|
this,
|
||||||
context,
|
context,
|
||||||
@@ -477,6 +478,14 @@ class PSICallResolver(
|
|||||||
dispatchReceiver,
|
dispatchReceiver,
|
||||||
extensionReceiver
|
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.lazy.LazyJavaResolverContext
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValueOfMethod
|
import org.jetbrains.kotlin.resolve.DescriptorFactory.*
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorFactory.createEnumValuesMethod
|
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
import org.jetbrains.kotlin.resolve.scopes.MemberScope
|
||||||
import org.jetbrains.kotlin.utils.DFS
|
import org.jetbrains.kotlin.utils.DFS
|
||||||
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
|
|
||||||
class LazyJavaStaticClassScope(
|
class LazyJavaStaticClassScope(
|
||||||
c: LazyJavaResolverContext,
|
c: LazyJavaResolverContext,
|
||||||
@@ -55,6 +55,9 @@ class LazyJavaStaticClassScope(
|
|||||||
override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?) =
|
override fun computePropertyNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?) =
|
||||||
declaredMemberIndex().getFieldNames().toMutableSet().apply {
|
declaredMemberIndex().getFieldNames().toMutableSet().apply {
|
||||||
flatMapJavaStaticSupertypesScopes(ownerDescriptor, this) { it.getVariableNames() }
|
flatMapJavaStaticSupertypesScopes(ownerDescriptor, this) { it.getVariableNames() }
|
||||||
|
if (jClass.isEnum) {
|
||||||
|
add(StandardNames.ENUM_ENTRIES)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun computeClassNames(kindFilter: DescriptorKindFilter, nameFilter: ((Name) -> Boolean)?): Set<Name> = emptySet()
|
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) {
|
override fun computeNonDeclaredFunctions(result: MutableCollection<SimpleFunctionDescriptor>, name: Name) {
|
||||||
val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, ownerDescriptor)
|
val functionsFromSupertypes = getStaticFunctionsFromJavaSuperClasses(name, ownerDescriptor)
|
||||||
result.addAll(resolveOverridesForStaticMembers(
|
result.addAll(
|
||||||
name,
|
resolveOverridesForStaticMembers(
|
||||||
functionsFromSupertypes,
|
name,
|
||||||
result,
|
functionsFromSupertypes,
|
||||||
ownerDescriptor,
|
result,
|
||||||
c.components.errorReporter,
|
ownerDescriptor,
|
||||||
c.components.kotlinTypeChecker.overridingUtil
|
c.components.errorReporter,
|
||||||
))
|
c.components.kotlinTypeChecker.overridingUtil
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
if (jClass.isEnum) {
|
if (jClass.isEnum) {
|
||||||
when (name) {
|
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> {
|
private fun getStaticFunctionsFromJavaSuperClasses(name: Name, descriptor: ClassDescriptor): Set<SimpleFunctionDescriptor> {
|
||||||
|
|||||||
Reference in New Issue
Block a user