From 3eb68a6ee8c9839f0d2e5d03b554d5b1a51aaf29 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Tue, 30 Aug 2022 00:01:40 -0700 Subject: [PATCH] S/LC: fix default visibility of constructor of sealed class --- .../light/classes/symbol/classes/symbolLightClassUtils.kt | 3 ++- .../org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt | 3 ++- .../kotlin/asJava/classes/ultraLightMembersCreator.kt | 7 ++++--- 3 files changed, 8 insertions(+), 5 deletions(-) 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 42c0cda046c..fafd448d000 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 @@ -154,7 +154,8 @@ context(KtAnalysisSession) private fun SymbolLightClassBase.defaultConstructor(): KtLightMethod { val classOrObject = kotlinOrigin 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 else -> PsiModifier.PUBLIC } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt index d1dec6ca3d2..f8519726434 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightClass.kt @@ -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 } diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt index 566bca7213f..e697f19d2cf 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightMembersCreator.kt @@ -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