Don't generate getEntries method in light classes when feature disabled

^KTIJ-23530 Fixed
This commit is contained in:
Roman Efremov
2022-12-21 13:19:04 +01:00
committed by Space Team
parent e5d5cbc7a3
commit cbb20ce2b8
5 changed files with 13 additions and 64 deletions
@@ -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<KtLightMethod>, classOrObjectSymbol: KtNamedClassOrObjectSymbol) {
if (!classOrObjectSymbol.isData) return
@@ -1,15 +0,0 @@
public enum AnnotatedParameterInEnumConstructor /* test.AnnotatedParameterInEnumConstructor*/ {
A;
@org.jetbrains.annotations.NotNull()
public static kotlin.enums.EnumEntries<test.AnnotatedParameterInEnumConstructor> 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)
}
@@ -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<p.E> 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()
}
@@ -1,17 +0,0 @@
public enum MyEnumClass /* one.MyEnumClass*/ {
Entry;
@org.jetbrains.annotations.NotNull()
public static kotlin.enums.EnumEntries<one.MyEnumClass> 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()
}
@@ -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<EnumNameOverride> getEntries();// getEntries()
private EnumNameOverride();// .ctor()
}