From c5d1c4e8165b7bcb58ecba84987d084997c23a13 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 6 Nov 2023 10:16:22 +0200 Subject: [PATCH] [Test] Add test for KT-62137 --- ...cCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...osticCompilerFE10TestDataTestGenerated.java | 6 ++++++ ...reeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...PsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../complexConditionWithSafeCall.fir.kt | 18 ++++++++++++++++++ .../contracts/complexConditionWithSafeCall.kt | 18 ++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 7 files changed, 66 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.fir.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 39e2685e56c..1d0b5bbab80 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -38894,6 +38894,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/contracts"), Pattern.compile("^(.+)\\.(kt|kts)$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("complexConditionWithSafeCall.kt") + public void testComplexConditionWithSafeCall() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt"); + } + @Nested @TestMetadata("compiler/testData/diagnostics/testsWithStdLib/contracts/controlflow") @TestDataPath("$PROJECT_ROOT") diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 78d97d48d40..e0ad69d0d1f 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -38894,6 +38894,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/contracts"), Pattern.compile("^(.+)\\.(kt|kts)$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("complexConditionWithSafeCall.kt") + public void testComplexConditionWithSafeCall() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt"); + } + @Nested @TestMetadata("compiler/testData/diagnostics/testsWithStdLib/contracts/controlflow") @TestDataPath("$PROJECT_ROOT") 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 386c221d863..8a5a1581645 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 @@ -38780,6 +38780,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/contracts"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("complexConditionWithSafeCall.kt") + public void testComplexConditionWithSafeCall() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt"); + } + @Nested @TestMetadata("compiler/testData/diagnostics/testsWithStdLib/contracts/controlflow") @TestDataPath("$PROJECT_ROOT") 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 f78a6ffdd08..e71c7ebb487 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 @@ -38894,6 +38894,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/contracts"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("complexConditionWithSafeCall.kt") + public void testComplexConditionWithSafeCall() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt"); + } + @Nested @TestMetadata("compiler/testData/diagnostics/testsWithStdLib/contracts/controlflow") @TestDataPath("$PROJECT_ROOT") diff --git a/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.fir.kt new file mode 100644 index 00000000000..42032c2b6d9 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.fir.kt @@ -0,0 +1,18 @@ +// ISSUE: KT-62137 + +class PersonDto ( + val name: String +) + +fun test() { + val name: String? = null + val person: PersonDto? = null + + if (!name.isNullOrEmpty()) { + name.length // Smart cast work + } + + if (!person?.name.isNullOrEmpty()) { + person.name // Smart cast doesn't work + } +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt b/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt new file mode 100644 index 00000000000..9d3d2855e3a --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt @@ -0,0 +1,18 @@ +// ISSUE: KT-62137 + +class PersonDto ( + val name: String +) + +fun test() { + val name: String? = null + val person: PersonDto? = null + + if (!name.isNullOrEmpty()) { + name.length // Smart cast work + } + + if (!person?.name.isNullOrEmpty()) { + person.name // Smart cast doesn't work + } +} 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 018d5259efd..1278329ddd1 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 @@ -40834,6 +40834,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/contracts"), Pattern.compile("^(.+)\\.kt$"), Pattern.compile("^(.+)\\.(reversed|fir|ll)\\.kts?$"), true); } + @Test + @TestMetadata("complexConditionWithSafeCall.kt") + public void testComplexConditionWithSafeCall() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/contracts/complexConditionWithSafeCall.kt"); + } + @Nested @TestMetadata("compiler/testData/diagnostics/testsWithStdLib/contracts/controlflow") @TestDataPath("$PROJECT_ROOT")