diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt index 3f30fba9ee6..090707afe14 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/classes/symbolLightClassUtils.kt @@ -72,15 +72,16 @@ private fun lightClassForEnumEntry(ktEnumEntry: KtEnumEntry): KtLightClass? { } context(KtAnalysisSession) -internal fun SymbolLightClassBase.createConstructors( +internal fun SymbolLightClassForClassOrObject.createConstructors( declarations: Sequence, - result: MutableList + result: MutableList, ) { 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( diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt index a6fb47385c0..625ed8b9ccb 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/SymbolLightNoArgConstructor.kt @@ -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) {