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
@@ -443,7 +443,8 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
private fun defaultConstructor(): KtUltraLightMethod {
val visibility =
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
else -> PsiModifier.PUBLIC
}
@@ -302,8 +302,9 @@ internal class UltraLightMembersCreator(
if (forcePrivate || declaration.isPrivate() || accessedProperty?.isPrivate() == true) {
return name == PsiModifier.PRIVATE
}
if (declaration.hasModifier(PROTECTED_KEYWORD) || accessedProperty
?.hasModifier(PROTECTED_KEYWORD) == true
if (declaration.hasModifier(PROTECTED_KEYWORD) ||
accessedProperty?.hasModifier(PROTECTED_KEYWORD) == true ||
(declaration is KtConstructor<*> && containingClassIsSealed)
) {
return name == PsiModifier.PROTECTED
}
@@ -335,7 +336,7 @@ internal class UltraLightMembersCreator(
}
private fun KtDeclaration.isPrivate() =
hasModifier(PRIVATE_KEYWORD) || this is KtConstructor<*> && containingClassIsSealed || isInlineOnly()
hasModifier(PRIVATE_KEYWORD) || isInlineOnly()
private fun KtDeclaration.isInlineOnly(): Boolean {
if (this !is KtCallableDeclaration || !hasModifier(INLINE_KEYWORD)) return false