[SLC] api for constructors should be based on SymbolLightClassForClassOrObject
^KT-54051
This commit is contained in:
committed by
Space Team
parent
0227bb14db
commit
a263b907c5
+18
-17
@@ -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(
|
||||
|
||||
+2
-2
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user