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")