From cbb20ce2b8659d22bee4ec2b40995f51e87358fb Mon Sep 17 00:00:00 2001 From: Roman Efremov Date: Wed, 21 Dec 2022 13:19:04 +0100 Subject: [PATCH] Don't generate getEntries method in light classes when feature disabled ^KTIJ-23530 Fixed --- .../classes/SymbolLightClassForClassOrObject.kt | 13 +++++++++++++ ...AnnotatedParameterInEnumConstructor.fir.java | 15 --------------- .../lightClasses/DeprecatedEnumEntry.fir.java | 17 ----------------- .../asJava/lightClasses/EnumClass.fir.java | 17 ----------------- .../compilationErrors/EnumNameOverride.fir.java | 15 --------------- 5 files changed, 13 insertions(+), 64 deletions(-) delete mode 100644 compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.fir.java delete mode 100644 compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.fir.java delete mode 100644 compiler/testData/asJava/lightClasses/EnumClass.fir.java delete mode 100644 compiler/testData/asJava/lightClasses/compilationErrors/EnumNameOverride.fir.java diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt index 7978ca0cd49..5addbe9efe9 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/SymbolLightClassForClassOrObject.kt @@ -14,13 +14,16 @@ import org.jetbrains.kotlin.analysis.api.symbols.* import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType import org.jetbrains.kotlin.analysis.project.structure.KtModule +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.asJava.builder.LightMemberOriginForDeclaration import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_BASE import org.jetbrains.kotlin.asJava.classes.METHOD_INDEX_FOR_NON_ORIGIN_METHOD import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightField import org.jetbrains.kotlin.asJava.elements.KtLightMethod +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.StandardNames.HASHCODE_NAME +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.light.classes.symbol.NullabilityType import org.jetbrains.kotlin.light.classes.symbol.annotations.computeAnnotations @@ -131,6 +134,10 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC filterNot { function -> function is KtFunctionSymbol && function.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED } + }.applyIf(isEnum && isEnumEntriesDisabled()) { + filterNot { + it is KtKotlinPropertySymbol && it.origin == KtSymbolOrigin.SOURCE_MEMBER_GENERATED && it.name == StandardNames.ENUM_ENTRIES + } } val suppressStatic = isCompanionObject @@ -148,6 +155,12 @@ internal open class SymbolLightClassForClassOrObject : SymbolLightClassForNamedC } } + private fun isEnumEntriesDisabled(): Boolean { + return (ktModule as? KtSourceModule) + ?.languageVersionSettings + ?.supportsFeature(LanguageFeature.EnumEntries) != true + } + context(KtAnalysisSession) private fun addMethodsFromDataClass(result: MutableList, classOrObjectSymbol: KtNamedClassOrObjectSymbol) { if (!classOrObjectSymbol.isData) return diff --git a/compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.fir.java b/compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.fir.java deleted file mode 100644 index 56f1cb90e37..00000000000 --- a/compiler/testData/asJava/lightClasses/AnnotatedParameterInEnumConstructor.fir.java +++ /dev/null @@ -1,15 +0,0 @@ -public enum AnnotatedParameterInEnumConstructor /* test.AnnotatedParameterInEnumConstructor*/ { - A; - - @org.jetbrains.annotations.NotNull() - public static kotlin.enums.EnumEntries getEntries();// getEntries() - - @org.jetbrains.annotations.NotNull() - public static test.AnnotatedParameterInEnumConstructor valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) - - @org.jetbrains.annotations.NotNull() - public static test.AnnotatedParameterInEnumConstructor[] values();// values() - - private AnnotatedParameterInEnumConstructor(@test.Anno(x = "a") java.lang.String, @test.Anno(x = "b") java.lang.String);// .ctor(java.lang.String, java.lang.String) - -} diff --git a/compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.fir.java b/compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.fir.java deleted file mode 100644 index 79decf63bdd..00000000000 --- a/compiler/testData/asJava/lightClasses/DeprecatedEnumEntry.fir.java +++ /dev/null @@ -1,17 +0,0 @@ -public enum E /* p.E*/ { - @kotlin.Deprecated(message = "a") Entry1, - Entry2, - @kotlin.Deprecated(message = "b") Entry3; - - @org.jetbrains.annotations.NotNull() - public static kotlin.enums.EnumEntries getEntries();// getEntries() - - @org.jetbrains.annotations.NotNull() - public static p.E valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) - - @org.jetbrains.annotations.NotNull() - public static p.E[] values();// values() - - private E();// .ctor() - -} diff --git a/compiler/testData/asJava/lightClasses/EnumClass.fir.java b/compiler/testData/asJava/lightClasses/EnumClass.fir.java deleted file mode 100644 index a75b02708cd..00000000000 --- a/compiler/testData/asJava/lightClasses/EnumClass.fir.java +++ /dev/null @@ -1,17 +0,0 @@ -public enum MyEnumClass /* one.MyEnumClass*/ { - Entry; - - @org.jetbrains.annotations.NotNull() - public static kotlin.enums.EnumEntries getEntries();// getEntries() - - @org.jetbrains.annotations.NotNull() - public static one.MyEnumClass valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) - - @org.jetbrains.annotations.NotNull() - public static one.MyEnumClass[] values();// values() - - private MyEnumClass();// .ctor() - - public final int foo();// foo() - -} diff --git a/compiler/testData/asJava/lightClasses/compilationErrors/EnumNameOverride.fir.java b/compiler/testData/asJava/lightClasses/compilationErrors/EnumNameOverride.fir.java deleted file mode 100644 index 26d35f6245c..00000000000 --- a/compiler/testData/asJava/lightClasses/compilationErrors/EnumNameOverride.fir.java +++ /dev/null @@ -1,15 +0,0 @@ -public enum EnumNameOverride /* EnumNameOverride*/ implements Bar { - ; - - @org.jetbrains.annotations.NotNull() - public static EnumNameOverride valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String) - - @org.jetbrains.annotations.NotNull() - public static EnumNameOverride[] values();// values() - - @org.jetbrains.annotations.NotNull() - public static kotlin.enums.EnumEntries getEntries();// getEntries() - - private EnumNameOverride();// .ctor() - -}