From 25f30cb3a9d34dcc872a64409d58a1592de3698e Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 20 Dec 2021 15:39:35 +0300 Subject: [PATCH] FIR: add resolve test for potential local scope problems --- ...nosisCompilerFirTestdataTestGenerated.java | 6 ++ .../localScopesInAnonymousObject.fir.txt | 76 +++++++++++++++++++ .../problems/localScopesInAnonymousObject.kt | 31 ++++++++ .../runners/FirDiagnosticTestGenerated.java | 6 ++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++ 5 files changed, 125 insertions(+) create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 53210c5640a..f5b4fbcfee8 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -5645,6 +5645,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/lightMember.kt"); } + @Test + @TestMetadata("localScopesInAnonymousObject.kt") + public void testLocalScopesInAnonymousObject() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt"); + } + @Test @TestMetadata("qualifierPriority.kt") public void testQualifierPriority() throws Exception { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.fir.txt new file mode 100644 index 00000000000..6667bdeb404 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.fir.txt @@ -0,0 +1,76 @@ +FILE: localScopesInAnonymousObject.kt + public final val x: R|kotlin/Any| = object : R|kotlin/Any| { + private constructor(): R|| { + super() + } + + public final val someString: R|kotlin/String| = String(123) + public get(): R|kotlin/String| + + private final fun foo(): R|kotlin/Unit| { + ^foo R|kotlin/with|(this@R|/|.R|/.someString|, = with@fun R|kotlin/String|.(): R|kotlin/Unit| { + lval presentations: R|kotlin/collections/MutableList| = R|kotlin/collections/mutableListOf|() + this@R|/|.R|/.bar|(Boolean(true))?.{ $subj$.R|kotlin/let|( = let@fun (it: R|kotlin/String|): R|kotlin/Unit| { + R|/presentations|.R|SubstitutionOverride|(R|/it|) + } + ) } + } + ) + } + + private final fun bar(arg: R|kotlin/Boolean|): R|kotlin/String?| { + ^bar R|kotlin/with|(this@R|/|.R|/.someString|, = with@fun R|kotlin/String|.(): R|kotlin/String?| { + ^ when () { + R|/arg| -> { + this@R|special/anonymous| + } + else -> { + Null(null) + } + } + + } + ) + } + + } + + public get(): R|kotlin/Any| + public final fun owner(): R|kotlin/Unit| { + local final class Local : R|kotlin/Any| { + public constructor(): R|Local| { + super() + } + + public final val someString: R|kotlin/String| = String(123) + public get(): R|kotlin/String| + + private final fun foo(): R|kotlin/Unit| { + ^foo R|kotlin/with|(this@R|/Local|.R|/someString|, = with@fun R|kotlin/String|.(): R|kotlin/Unit| { + lval presentations: R|kotlin/collections/MutableList| = R|kotlin/collections/mutableListOf|() + this@R|/Local|.R|/bar|(Boolean(true))?.{ $subj$.R|kotlin/let|( = let@fun (it: R|kotlin/String|): R|kotlin/Unit| { + R|/presentations|.R|SubstitutionOverride|(R|/it|) + } + ) } + } + ) + } + + private final fun bar(arg: R|kotlin/Boolean|): R|kotlin/String?| { + ^bar R|kotlin/with|(this@R|/Local|.R|/someString|, = with@fun R|kotlin/String|.(): R|kotlin/String?| { + ^ when () { + R|/arg| -> { + this@R|special/anonymous| + } + else -> { + Null(null) + } + } + + } + ) + } + + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt new file mode 100644 index 00000000000..747dda2d699 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt @@ -0,0 +1,31 @@ +val x = object { + val someString = "123" + + private fun foo(): Unit = with(someString) { + val presentations = mutableListOf() + bar(true)?.let { + presentations.add(it) + } + } + + private fun bar(arg: Boolean) = with(someString) { + if (arg) this else null + } +} + +fun owner() { + class Local { + val someString = "123" + + private fun foo(): Unit = with(someString) { + val presentations = mutableListOf() + bar(true)?.let { + presentations.add(it) + } + } + + private fun bar(arg: Boolean) = with(someString) { + if (arg) this else null + } + } +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index 0df3f1c7462..f8593e2f11c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -5645,6 +5645,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/lightMember.kt"); } + @Test + @TestMetadata("localScopesInAnonymousObject.kt") + public void testLocalScopesInAnonymousObject() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt"); + } + @Test @TestMetadata("qualifierPriority.kt") public void testQualifierPriority() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 9000d722457..58a87f23d2c 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -5645,6 +5645,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/lightMember.kt"); } + @Test + @TestMetadata("localScopesInAnonymousObject.kt") + public void testLocalScopesInAnonymousObject() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/problems/localScopesInAnonymousObject.kt"); + } + @Test @TestMetadata("qualifierPriority.kt") public void testQualifierPriority() throws Exception {