From 5505fd207e8a964af538307bb49eb0e245cc1948 Mon Sep 17 00:00:00 2001 From: Nikolay Lunyak Date: Mon, 13 Mar 2023 13:26:27 +0200 Subject: [PATCH] [FIR] KT-57195: Don't approximate ft when checking override return types Why does this check even exist? K1 doesn't do it. ^KT-57195 Fixed --- ...agnosisCompilerTestFE10TestdataTestGenerated.java | 12 ++++++++++++ ...LightTreeOldFrontendDiagnosticsTestGenerated.java | 12 ++++++++++++ .../FirPsiOldFrontendDiagnosticsTestGenerated.java | 12 ++++++++++++ .../checkers/declaration/FirOverrideChecker.kt | 2 +- .../diagnostics/tests/overrideNotNull_Fail.kt | 12 ++++++++++++ .../testData/diagnostics/tests/overrideNotNull_Ok.kt | 12 ++++++++++++ .../kotlin/test/runners/DiagnosticTestGenerated.java | 12 ++++++++++++ 7 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt create mode 100644 compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 53435a1c2db..75de3c32c51 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -657,6 +657,18 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/OverrideFunctionWithParamDefaultValue.kt"); } + @Test + @TestMetadata("overrideNotNull_Fail.kt") + public void testOverrideNotNull_Fail() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt"); + } + + @Test + @TestMetadata("overrideNotNull_Ok.kt") + public void testOverrideNotNull_Ok() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt"); + } + @Test @TestMetadata("OverridenFunctionAndSpecifiedTypeParameter.kt") public void testOverridenFunctionAndSpecifiedTypeParameter() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 399cac00637..e53b9f4051d 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -657,6 +657,18 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/OverrideFunctionWithParamDefaultValue.kt"); } + @Test + @TestMetadata("overrideNotNull_Fail.kt") + public void testOverrideNotNull_Fail() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt"); + } + + @Test + @TestMetadata("overrideNotNull_Ok.kt") + public void testOverrideNotNull_Ok() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt"); + } + @Test @TestMetadata("OverridenFunctionAndSpecifiedTypeParameter.kt") public void testOverridenFunctionAndSpecifiedTypeParameter() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index f93b1d9099d..d35e47c742b 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -657,6 +657,18 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/OverrideFunctionWithParamDefaultValue.kt"); } + @Test + @TestMetadata("overrideNotNull_Fail.kt") + public void testOverrideNotNull_Fail() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt"); + } + + @Test + @TestMetadata("overrideNotNull_Ok.kt") + public void testOverrideNotNull_Ok() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt"); + } + @Test @TestMetadata("OverridenFunctionAndSpecifiedTypeParameter.kt") public void testOverridenFunctionAndSpecifiedTypeParameter() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt index f7c09a3ca57..0ca648edf27 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirOverrideChecker.kt @@ -213,7 +213,7 @@ object FirOverrideChecker : FirClassChecker() { return null } - val bounds = overriddenSymbols.map { context.returnTypeCalculator.tryCalculateReturnType(it).coneType.upperBoundIfFlexible() } + val bounds = overriddenSymbols.map { context.returnTypeCalculator.tryCalculateReturnType(it).coneType } for (it in bounds.indices) { val overriddenDeclaration = overriddenSymbols[it] diff --git a/compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt b/compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt new file mode 100644 index 00000000000..e169e00a10f --- /dev/null +++ b/compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt @@ -0,0 +1,12 @@ +// FIR_IDENTICAL +// ISSUE: KT-57195 + +import java.io.File + +open class AbstractFE1UastTest { + open var testDataDir = File("").parentFile +} + +class Legacy: AbstractFE1UastTest() { + override var testDataDir: File = File("").parentFile // K1: ok, K2: VAR_TYPE_MISMATCH_ON_OVERRIDE +} diff --git a/compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt b/compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt new file mode 100644 index 00000000000..388177c793d --- /dev/null +++ b/compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt @@ -0,0 +1,12 @@ +// FIR_IDENTICAL +// ISSUE: KT-57195 + +import java.io.File + +open class AbstractFE1UastTest { + open var testDataDir = File("").parentFile +} + +class Legacy: AbstractFE1UastTest() { + override var testDataDir: File? = File("").parentFile // K1 & K2: ok +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 36c51778ebe..a32abffdabf 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -657,6 +657,18 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/OverrideFunctionWithParamDefaultValue.kt"); } + @Test + @TestMetadata("overrideNotNull_Fail.kt") + public void testOverrideNotNull_Fail() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Fail.kt"); + } + + @Test + @TestMetadata("overrideNotNull_Ok.kt") + public void testOverrideNotNull_Ok() throws Exception { + runTest("compiler/testData/diagnostics/tests/overrideNotNull_Ok.kt"); + } + @Test @TestMetadata("OverridenFunctionAndSpecifiedTypeParameter.kt") public void testOverridenFunctionAndSpecifiedTypeParameter() throws Exception {