FIR checker: report uninitialized member/extension properties

This commit is contained in:
Jinseong Jeon
2021-02-23 14:33:44 -08:00
committed by Dmitriy Novozhilov
parent e8028e7825
commit e009b71f88
63 changed files with 487 additions and 230 deletions
@@ -911,6 +911,24 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.MUST_BE_INITIALIZED) { firDiagnostic ->
MustBeInitializedImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.MUST_BE_INITIALIZED_OR_BE_ABSTRACT) { firDiagnostic ->
MustBeInitializedOrBeAbstractImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.EXTENSION_PROPERTY_MUST_HAVE_ACCESSORS_OR_BE_ABSTRACT) { firDiagnostic ->
ExtensionPropertyMustHaveAccessorsOrBeAbstractImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.BACKING_FIELD_IN_INTERFACE) { firDiagnostic ->
BackingFieldInInterfaceImpl(
firDiagnostic as FirPsiDiagnostic<*>,
@@ -645,6 +645,18 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = PropertyWithNoTypeNoInitializer::class
}
abstract class MustBeInitialized : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = MustBeInitialized::class
}
abstract class MustBeInitializedOrBeAbstract : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = MustBeInitializedOrBeAbstract::class
}
abstract class ExtensionPropertyMustHaveAccessorsOrBeAbstract : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = ExtensionPropertyMustHaveAccessorsOrBeAbstract::class
}
abstract class BackingFieldInInterface : KtFirDiagnostic<KtProperty>() {
override val diagnosticClass get() = BackingFieldInInterface::class
}
@@ -1036,6 +1036,27 @@ internal class PropertyWithNoTypeNoInitializerImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class MustBeInitializedImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.MustBeInitialized(), KtAbstractFirDiagnostic<KtProperty> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class MustBeInitializedOrBeAbstractImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.MustBeInitializedOrBeAbstract(), KtAbstractFirDiagnostic<KtProperty> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class ExtensionPropertyMustHaveAccessorsOrBeAbstractImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.ExtensionPropertyMustHaveAccessorsOrBeAbstract(), KtAbstractFirDiagnostic<KtProperty> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class BackingFieldInInterfaceImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
+2 -1
View File
@@ -11,4 +11,5 @@ class Y1 {
}
class Z : Y() {
}
}
// FIR_COMPARISON
+2 -1
View File
@@ -52,4 +52,5 @@ class TestPCParameters(w : Int, <warning>x</warning> : Int, val y : Int, var z :
fun foo() = <error>x</error>
}
}
// FIR_COMPARISON