From 239a44b30c74cff7ea727ab53b7d2754993a683f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 18 Feb 2021 12:55:29 +0300 Subject: [PATCH] FIR: forbid reporting inapplicable-likes on implicit constructors --- .../diagnostics/cyclicConstructorDelegationCall.kt | 2 +- .../diagnostics/explicitDelegationCallRequired.kt | 6 +++--- .../ErrorNodeDiagnosticCollectorComponent.kt | 4 ++++ .../headerClass/explicitConstructorDelegation.fir.kt | 2 +- .../errorsOnEmptyDelegationCall.fir.kt | 6 +++--- .../implicitSuperCallErrorsIfPrimary.fir.kt | 7 ------- .../implicitSuperCallErrorsIfPrimary.kt | 1 + .../secondaryConstructors/nestedExtendsInner.fir.kt | 2 +- .../reportResolutionErrorOnImplicitOnce.fir.kt | 2 +- .../superSecondaryNonExisting.fir.kt | 10 ---------- .../secondaryConstructors/superSecondaryNonExisting.kt | 1 + 11 files changed, 16 insertions(+), 27 deletions(-) delete mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.fir.kt delete mode 100644 compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.fir.kt diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/cyclicConstructorDelegationCall.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/cyclicConstructorDelegationCall.kt index 120b6037dca..0ff6c499e81 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/cyclicConstructorDelegationCall.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/cyclicConstructorDelegationCall.kt @@ -63,5 +63,5 @@ class M { } class U : M { - constructor() + constructor() } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/explicitDelegationCallRequired.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/explicitDelegationCallRequired.kt index 2aa050d6cd7..a78d7ed62a4 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/explicitDelegationCallRequired.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/explicitDelegationCallRequired.kt @@ -3,16 +3,16 @@ class A(x: Int) { } class B : A { - constructor() + constructor() constructor(z: String) : this() } class C : A(20) { - constructor() + constructor() constructor(z: String) : this() } class D() : A(20) { - constructor(x: Int) + constructor(x: Int) constructor(z: String) : this() } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index 87a7ba8203f..8d970dd29e2 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.collectors.components import org.jetbrains.kotlin.KtNodeTypes +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector @@ -73,6 +74,9 @@ class ErrorNodeDiagnosticCollectorComponent(collector: AbstractDiagnosticCollect } } + if (source.kind == FirFakeSourceElementKind.ImplicitConstructor) { + return + } val coneDiagnostic = diagnostic.toFirDiagnostic(source) reporter.report(coneDiagnostic, context) } diff --git a/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt b/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt index eabd11e3505..6584b6fe29c 100644 --- a/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt +++ b/compiler/testData/diagnostics/tests/multiplatform/headerClass/explicitConstructorDelegation.fir.kt @@ -8,7 +8,7 @@ expect open class A { } expect class B : A { - constructor(i: Int) + constructor(i: Int) constructor() : super("B") } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/errorsOnEmptyDelegationCall.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/errorsOnEmptyDelegationCall.fir.kt index 87af2354284..f8ff7c69fa7 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/errorsOnEmptyDelegationCall.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/errorsOnEmptyDelegationCall.fir.kt @@ -2,7 +2,7 @@ open class B0(x: Int) class A0 : B0 { - constructor() + constructor() constructor(x: Int) : super() } @@ -26,7 +26,7 @@ open class B2 { } class A2 : B2 { - constructor() + constructor() constructor(x: Int) : super() } @@ -37,6 +37,6 @@ open class B3 { } class A3 : B3 { - constructor() + constructor() constructor(x: Int) : super() } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.fir.kt deleted file mode 100644 index dabba36c8a7..00000000000 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.fir.kt +++ /dev/null @@ -1,7 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER -open class A(p1: String) - -class B() : A("") { - constructor(s: String) { - } -} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.kt index 4c620d5da70..570ce819269 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/implicitSuperCallErrorsIfPrimary.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER open class A(p1: String) diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/nestedExtendsInner.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/nestedExtendsInner.fir.kt index 478b4d07216..a9321da314d 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/nestedExtendsInner.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/nestedExtendsInner.fir.kt @@ -2,6 +2,6 @@ class A { open inner class Inner class Nested : Inner { - constructor() + constructor() } } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/reportResolutionErrorOnImplicitOnce.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/reportResolutionErrorOnImplicitOnce.fir.kt index f2ab1ac6ddf..85667e1cc22 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/reportResolutionErrorOnImplicitOnce.fir.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/reportResolutionErrorOnImplicitOnce.fir.kt @@ -2,5 +2,5 @@ open class A(p1: String, p2: String, p3: String, p4: String, p5: String) class B : A { - constructor(s: String) + constructor(s: String) } diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.fir.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.fir.kt deleted file mode 100644 index accb18c92dc..00000000000 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.fir.kt +++ /dev/null @@ -1,10 +0,0 @@ -// !DIAGNOSTICS: -UNUSED_PARAMETER -open class B(x: Double) { - constructor(x: Int): this(1.0) - constructor(x: String): this(1.0) -} -interface C -class A : B, C { - constructor(): super(' ') - constructor(x: Int) -} diff --git a/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.kt b/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.kt index 3609fa8a6d4..de71c4c026a 100644 --- a/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.kt +++ b/compiler/testData/diagnostics/tests/secondaryConstructors/superSecondaryNonExisting.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // !DIAGNOSTICS: -UNUSED_PARAMETER open class B(x: Double) { constructor(x: Int): this(1.0)