FIR checker: report uninitialized member/extension properties
This commit is contained in:
committed by
Dmitriy Novozhilov
parent
e8028e7825
commit
e009b71f88
+18
@@ -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<*>,
|
||||
|
||||
+12
@@ -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
|
||||
}
|
||||
|
||||
+21
@@ -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
@@ -11,4 +11,5 @@ class Y1 {
|
||||
}
|
||||
|
||||
class Z : Y() {
|
||||
}
|
||||
}
|
||||
// FIR_COMPARISON
|
||||
@@ -52,4 +52,5 @@ class TestPCParameters(w : Int, <warning>x</warning> : Int, val y : Int, var z :
|
||||
|
||||
fun foo() = <error>x</error>
|
||||
|
||||
}
|
||||
}
|
||||
// FIR_COMPARISON
|
||||
Reference in New Issue
Block a user