[SLC] api for constructors should be based on SymbolLightClassForClassOrObject

^KT-54051
This commit is contained in:
Dmitrii Gridin
2022-11-15 20:52:41 +01:00
committed by Space Team
parent 0227bb14db
commit a263b907c5
2 changed files with 20 additions and 19 deletions
@@ -72,15 +72,16 @@ private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? {
} }
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun SymbolLightClassBase.createConstructors( internal fun SymbolLightClassForClassOrObject.createConstructors(
declarations: Sequence<KtConstructorSymbol>, declarations: Sequence<KtConstructorSymbol>,
result: MutableList<KtLightMethod> result: MutableList<KtLightMethod>,
) { ) {
val constructors = declarations.toList() val constructors = declarations.toList()
if (constructors.isEmpty()) { if (constructors.isEmpty()) {
result.add(defaultConstructor()) result.add(defaultConstructor())
return return
} }
for (constructor in constructors) { for (constructor in constructors) {
if (constructor.isHiddenOrSynthetic()) continue if (constructor.isHiddenOrSynthetic()) continue
result.add( result.add(
@@ -91,6 +92,7 @@ internal fun SymbolLightClassBase.createConstructors(
methodIndex = METHOD_INDEX_BASE methodIndex = METHOD_INDEX_BASE
) )
) )
createJvmOverloadsIfNeeded(constructor, result) { methodIndex, argumentSkipMask -> createJvmOverloadsIfNeeded(constructor, result) { methodIndex, argumentSkipMask ->
SymbolLightConstructor( SymbolLightConstructor(
constructorSymbol = constructor, constructorSymbol = constructor,
@@ -125,33 +127,32 @@ private fun SymbolLightClassBase.shouldGenerateNoArgOverload(
} }
context(KtAnalysisSession) context(KtAnalysisSession)
private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod { private fun SymbolLightClassForClassOrObject.defaultConstructor(): KtLightMethod {
val classOrObject = kotlinOrigin val classOrObject = kotlinOrigin
val visibility = when { val visibility = when {
classOrObject is KtObjectDeclaration || isEnum -> PsiModifier.PRIVATE classOrObject is KtObjectDeclaration || isEnum -> PsiModifier.PRIVATE
classOrObject?.hasModifier(SEALED_KEYWORD) == true -> PsiModifier.PROTECTED classOrObject.hasModifier(SEALED_KEYWORD) -> PsiModifier.PROTECTED
classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL
else -> PsiModifier.PUBLIC else -> PsiModifier.PUBLIC
} }
return noArgConstructor(visibility, METHOD_INDEX_FOR_DEFAULT_CTOR) return noArgConstructor(visibility, METHOD_INDEX_FOR_DEFAULT_CTOR)
} }
context(KtAnalysisSession) context(KtAnalysisSession)
private fun SymbolLightClassBase.noArgConstructor( private fun SymbolLightClassForClassOrObject.noArgConstructor(
visibility: String, visibility: String,
methodIndex: Int, methodIndex: Int,
): KtLightMethod { ): KtLightMethod = SymbolLightNoArgConstructor(
return SymbolLightNoArgConstructor( LightMemberOriginForDeclaration(
LightMemberOriginForDeclaration( originalElement = kotlinOrigin,
originalElement = kotlinOrigin!!, originKind = JvmDeclarationOriginKind.OTHER,
originKind = JvmDeclarationOriginKind.OTHER, auxiliaryOriginalElement = kotlinOrigin as? KtDeclaration
auxiliaryOriginalElement = kotlinOrigin as? KtDeclaration ),
), this,
this, visibility,
visibility, methodIndex,
methodIndex )
)
}
context(KtAnalysisSession) context(KtAnalysisSession)
internal fun SymbolLightClassBase.createMethods( internal fun SymbolLightClassBase.createMethods(
@@ -10,14 +10,14 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.classes.lazyPub
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier import org.jetbrains.kotlin.light.classes.symbol.SymbolLightIdentifier
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList import org.jetbrains.kotlin.light.classes.symbol.parameters.SymbolLightParameterList
context(KtAnalysisSession) context(KtAnalysisSession)
internal class SymbolLightNoArgConstructor( internal class SymbolLightNoArgConstructor(
lightMemberOrigin: LightMemberOrigin?, lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase, containingClass: SymbolLightClassForClassOrObject,
visibility: String, visibility: String,
methodIndex: Int, methodIndex: Int,
) : SymbolLightMethodBase(lightMemberOrigin, containingClass, methodIndex) { ) : SymbolLightMethodBase(lightMemberOrigin, containingClass, methodIndex) {