S/LC: fix default visibility of constructor of sealed class

This commit is contained in:
Jinseong Jeon
2022-08-30 00:01:40 -07:00
committed by Ilya Kirillov
parent 5225c51a5a
commit 3eb68a6ee8
3 changed files with 8 additions and 5 deletions
@@ -154,7 +154,8 @@ context(KtAnalysisSession)
private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod { private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod {
val classOrObject = kotlinOrigin val classOrObject = kotlinOrigin
val visibility = when { val visibility = when {
classOrObject is KtObjectDeclaration || classOrObject?.hasModifier(SEALED_KEYWORD) == true || isEnum -> PsiModifier.PRIVATE classOrObject is KtObjectDeclaration || isEnum -> PsiModifier.PRIVATE
classOrObject?.hasModifier(SEALED_KEYWORD) == true -> PsiModifier.PROTECTED
classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL
else -> PsiModifier.PUBLIC else -> PsiModifier.PUBLIC
} }
@@ -443,7 +443,8 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
private fun defaultConstructor(): KtUltraLightMethod { private fun defaultConstructor(): KtUltraLightMethod {
val visibility = val visibility =
when { when {
classOrObject is KtObjectDeclaration || classOrObject.hasModifier(SEALED_KEYWORD) || isEnum -> PsiModifier.PRIVATE classOrObject is KtObjectDeclaration || isEnum -> PsiModifier.PRIVATE
classOrObject.hasModifier(SEALED_KEYWORD) -> PsiModifier.PROTECTED
classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL classOrObject is KtEnumEntry -> PsiModifier.PACKAGE_LOCAL
else -> PsiModifier.PUBLIC else -> PsiModifier.PUBLIC
} }
@@ -302,8 +302,9 @@ internal class UltraLightMembersCreator(
if (forcePrivate || declaration.isPrivate() || accessedProperty?.isPrivate() == true) { if (forcePrivate || declaration.isPrivate() || accessedProperty?.isPrivate() == true) {
return name == PsiModifier.PRIVATE return name == PsiModifier.PRIVATE
} }
if (declaration.hasModifier(PROTECTED_KEYWORD) || accessedProperty if (declaration.hasModifier(PROTECTED_KEYWORD) ||
?.hasModifier(PROTECTED_KEYWORD) == true accessedProperty?.hasModifier(PROTECTED_KEYWORD) == true ||
(declaration is KtConstructor<*> && containingClassIsSealed)
) { ) {
return name == PsiModifier.PROTECTED return name == PsiModifier.PROTECTED
} }
@@ -335,7 +336,7 @@ internal class UltraLightMembersCreator(
} }
private fun KtDeclaration.isPrivate() = private fun KtDeclaration.isPrivate() =
hasModifier(PRIVATE_KEYWORD) || this is KtConstructor<*> && containingClassIsSealed || isInlineOnly() hasModifier(PRIVATE_KEYWORD) || isInlineOnly()
private fun KtDeclaration.isInlineOnly(): Boolean { private fun KtDeclaration.isInlineOnly(): Boolean {
if (this !is KtCallableDeclaration || !hasModifier(INLINE_KEYWORD)) return false if (this !is KtCallableDeclaration || !hasModifier(INLINE_KEYWORD)) return false