[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)
internal fun SymbolLightClassBase.createConstructors(
internal fun SymbolLightClassForClassOrObject.createConstructors(
declarations: Sequence<KtConstructorSymbol>,
result: MutableList<KtLightMethod>
result: MutableList<KtLightMethod>,
) {
val constructors = declarations.toList()
if (constructors.isEmpty()) {
result.add(defaultConstructor())
return
}
for (constructor in constructors) {
if (constructor.isHiddenOrSynthetic()) continue
result.add(
@@ -91,6 +92,7 @@ internal fun SymbolLightClassBase.createConstructors(
methodIndex = METHOD_INDEX_BASE
)
)
createJvmOverloadsIfNeeded(constructor, result) { methodIndex, argumentSkipMask ->
SymbolLightConstructor(
constructorSymbol = constructor,
@@ -125,33 +127,32 @@ private fun SymbolLightClassBase.shouldGenerateNoArgOverload(
}
context(KtAnalysisSession)
private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod {
private fun SymbolLightClassForClassOrObject.defaultConstructor(): KtLightMethod {
val classOrObject = kotlinOrigin
val visibility = when {
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
else -> PsiModifier.PUBLIC
}
return noArgConstructor(visibility, METHOD_INDEX_FOR_DEFAULT_CTOR)
}
context(KtAnalysisSession)
private fun SymbolLightClassBase.noArgConstructor(
private fun SymbolLightClassForClassOrObject.noArgConstructor(
visibility: String,
methodIndex: Int,
): KtLightMethod {
return SymbolLightNoArgConstructor(
LightMemberOriginForDeclaration(
originalElement = kotlinOrigin!!,
originKind = JvmDeclarationOriginKind.OTHER,
auxiliaryOriginalElement = kotlinOrigin as? KtDeclaration
),
this,
visibility,
methodIndex
)
}
): KtLightMethod = SymbolLightNoArgConstructor(
LightMemberOriginForDeclaration(
originalElement = kotlinOrigin,
originKind = JvmDeclarationOriginKind.OTHER,
auxiliaryOriginalElement = kotlinOrigin as? KtDeclaration
),
this,
visibility,
methodIndex,
)
context(KtAnalysisSession)
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.classes.lazyPub
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.parameters.SymbolLightParameterList
context(KtAnalysisSession)
internal class SymbolLightNoArgConstructor(
lightMemberOrigin: LightMemberOrigin?,
containingClass: SymbolLightClassBase,
containingClass: SymbolLightClassForClassOrObject,
visibility: String,
methodIndex: Int,
) : SymbolLightMethodBase(lightMemberOrigin, containingClass, methodIndex) {