K1/K2: add Enum.entries unconditionally and filter them out in tower

Before this commit, we added Enum.entries only in case when
LanguageFeature.EnumEntries was ON (with an exception in K1/Java case).
In this commit we add Enum.entries unconditionally, and in case
the language feature is OFF we filter them out during tower resolve.
This commit is contained in:
Mikhail Glukhikh
2022-07-27 11:22:49 +02:00
committed by Space
parent 0a5b3f1e13
commit 7333589663
97 changed files with 322 additions and 21 deletions
@@ -25,6 +25,4 @@ class CompilerDeserializationConfiguration(languageVersionSettings: LanguageVers
override val isJvmPackageNameSupported = languageVersionSettings.supportsFeature(LanguageFeature.JvmPackageName)
override val readDeserializedContracts: Boolean = languageVersionSettings.supportsFeature(LanguageFeature.ReadDeserializedContracts)
override val supportEnumEntries: Boolean = languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries)
}
@@ -481,10 +481,10 @@ class PSICallResolver(
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
return result.filterNot {
it is PropertyDescriptor && it.isSynthesized &&
it.dispatchReceiverParameter == null && it.extensionReceiverParameter == null &&
(it.containingDeclaration as? ClassDescriptor)?.kind == ClassKind.ENUM_CLASS
}
}
}
@@ -134,7 +134,7 @@ public class LazyClassDescriptor extends ClassDescriptorBase implements ClassDes
this.kind = classLikeInfo.getClassKind();
this.staticScope = kind == ClassKind.ENUM_CLASS ?
new StaticScopeForKotlinEnum(
storageManager, this, c.getLanguageVersionSettings().supportsFeature(LanguageFeature.EnumEntries)
storageManager, this
) : MemberScope.Empty.INSTANCE;
this.typeConstructor = new LazyClassTypeConstructor();