[FIR] Fix processing constructors of sealed classes

- Allow declaring protected constructors in sealed classes
- Make default visibility of sealed class constructor `protected`

KT-44861
KT-44865
This commit is contained in:
Dmitriy Novozhilov
2021-02-11 13:20:03 +03:00
committed by TeamCityServer
parent 7c61ddc72b
commit 2d5b685535
47 changed files with 98 additions and 106 deletions
@@ -260,8 +260,8 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.NON_PRIVATE_CONSTRUCTOR_IN_SEALED) { firDiagnostic ->
NonPrivateConstructorInSealedImpl(
add(FirErrors.NON_PRIVATE_OR_PROTECTED_CONSTRUCTOR_IN_SEALED) { firDiagnostic ->
NonPrivateOrProtectedConstructorInSealedImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
@@ -190,8 +190,8 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = NonPrivateConstructorInEnum::class
}
abstract class NonPrivateConstructorInSealed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NonPrivateConstructorInSealed::class
abstract class NonPrivateOrProtectedConstructorInSealed : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = NonPrivateOrProtectedConstructorInSealed::class
}
abstract class CyclicConstructorDelegationCall : KtFirDiagnostic<PsiElement>() {
@@ -299,10 +299,10 @@ internal class NonPrivateConstructorInEnumImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class NonPrivateConstructorInSealedImpl(
internal class NonPrivateOrProtectedConstructorInSealedImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.NonPrivateConstructorInSealed(), KtAbstractFirDiagnostic<PsiElement> {
) : KtFirDiagnostic.NonPrivateOrProtectedConstructorInSealed(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}