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