diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt new file mode 100644 index 00000000000..029570b0ff6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt @@ -0,0 +1,48 @@ +// Tests for KT-13597 (val assignment inside local object in constructor) + +class Test { + val a: String + + init { + val t = object { + fun some() { + // See KT-13597 + a = "12" + } + } + + a = "2" + t.some() + } +} + +class Test2 { + init { + val t = object { + fun some() { + a = "12" + } + } + + a = "2" + t.some() + } + + val a: String +} + +// Tests for KT-14381 (val assignment inside lambda in constructor) + +fun exec(f: () -> T): T = f() + +class Test4 { + val a: String + + init { + exec { + // See KT-14381 + a = "12" + } + a = "34" + } +} diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.txt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.txt new file mode 100644 index 00000000000..52fe0a0df9a --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.txt @@ -0,0 +1,27 @@ +package + +public fun exec(/*0*/ f: () -> T): T + +public final class Test { + public constructor Test() + public final val a: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Test2 { + public constructor Test2() + public final val a: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final class Test4 { + public constructor Test4() + public final val a: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index a5d3e721156..0e0f5855289 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -3670,6 +3670,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("assignmentInLocalsInConstructor.kt") + public void testAssignmentInLocalsInConstructor() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.kt"); + doTest(fileName); + } + @TestMetadata("backingFieldInsideGetter.kt") public void testBackingFieldInsideGetter() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/controlFlowAnalysis/backingFieldInsideGetter.kt");