Forbid usages of super if in fact it accesses an abstract member
#KT-49017 Fixed
This commit is contained in:
+6
@@ -392,6 +392,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.ABSTRACT_SUPER_CALL_WARNING) { firDiagnostic ->
|
||||
AbstractSuperCallWarningImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirErrors.INSTANCE_ACCESS_BEFORE_SUPER_CALL) { firDiagnostic ->
|
||||
InstanceAccessBeforeSuperCallImpl(
|
||||
firDiagnostic.a,
|
||||
|
||||
+4
@@ -307,6 +307,10 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
override val diagnosticClass get() = AbstractSuperCall::class
|
||||
}
|
||||
|
||||
abstract class AbstractSuperCallWarning : KtFirDiagnostic<PsiElement>() {
|
||||
override val diagnosticClass get() = AbstractSuperCallWarning::class
|
||||
}
|
||||
|
||||
abstract class InstanceAccessBeforeSuperCall : KtFirDiagnostic<PsiElement>() {
|
||||
override val diagnosticClass get() = InstanceAccessBeforeSuperCall::class
|
||||
abstract val target: String
|
||||
|
||||
+5
@@ -356,6 +356,11 @@ internal class AbstractSuperCallImpl(
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.AbstractSuperCall(), KtAbstractFirDiagnostic<PsiElement>
|
||||
|
||||
internal class AbstractSuperCallWarningImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.AbstractSuperCallWarning(), KtAbstractFirDiagnostic<PsiElement>
|
||||
|
||||
internal class InstanceAccessBeforeSuperCallImpl(
|
||||
override val target: String,
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
|
||||
+12
@@ -18587,6 +18587,18 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
|
||||
runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractBaseClassMemberNotImplemented_15.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("abstractFakeOverrideSuperCall.kt")
|
||||
public void testAbstractFakeOverrideSuperCall() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCall.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("abstractFakeOverrideSuperCallForbidden.kt")
|
||||
public void testAbstractFakeOverrideSuperCallForbidden() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/java8Overrides/abstractFakeOverrideSuperCallForbidden.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("abstractVsAbstract.kt")
|
||||
public void testAbstractVsAbstract() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user