[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)
|
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(
|
||||||
|
|||||||
+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.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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user