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 c86ae3ffdb3..86d3dba04a9 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 @@ -30288,6 +30288,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/script/topLevelPropertiesWithGetSet.kts"); } + @Test + @TestMetadata("topLevelPropertyInitialization.kts") + public void testTopLevelPropertyInitialization() throws Exception { + runTest("compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts"); + } + @Test @TestMetadata("topLevelVariable.kts") public void testTopLevelVariable() throws Exception { 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 792d8e920b5..fba99fbef07 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 @@ -30288,6 +30288,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/script/topLevelPropertiesWithGetSet.kts"); } + @Test + @TestMetadata("topLevelPropertyInitialization.kts") + public void testTopLevelPropertyInitialization() throws Exception { + runTest("compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts"); + } + @Test @TestMetadata("topLevelVariable.kts") public void testTopLevelVariable() 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 dc29540349d..54a31750421 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 @@ -30288,6 +30288,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/script/topLevelPropertiesWithGetSet.kts"); } + @Test + @TestMetadata("topLevelPropertyInitialization.kts") + public void testTopLevelPropertyInitialization() throws Exception { + runTest("compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts"); + } + @Test @TestMetadata("topLevelVariable.kts") public void testTopLevelVariable() throws Exception { diff --git a/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.fir.kts b/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.fir.kts new file mode 100644 index 00000000000..0715e82bf0c --- /dev/null +++ b/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.fir.kts @@ -0,0 +1,58 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -WRONG_INVOCATION_KIND +// WITH_STDLIB + +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract +import kotlin.properties.ReadOnlyProperty + +@OptIn(ExperimentalContracts::class) +inline fun inPlaceRun(block: () -> T): T { + contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } + return block() +} + +fun notInPlaceRun(block: () -> T): T = null!! + +fun simpleDelegate(value: T): ReadOnlyProperty = null!! + +@OptIn(ExperimentalContracts::class) +fun inPlaceDelegate(block: () -> T): ReadOnlyProperty { + contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } + return null!! +} + +fun notInPlaceDelegate(block: () -> T): ReadOnlyProperty = null!! + +val a: String = a +val b: String = inPlaceRun { b } +val c: String = notInPlaceRun { c } + +val d: String by simpleDelegate(d) +val e: String by inPlaceDelegate { e } +val f: String by notInPlaceDelegate { f } + +val g: Int +val h = 1.also { g = 2 } +val i: Int +val j by lazy { i = 2; 1 } +val k: Int + get() { + i = 3 + return i + } + +val l: Comparator = object : Comparator { + val delegate: Comparator get() = n + override fun compare(o1: String, o2: String): Int = delegate.compare(o1, o2) +} +val m: Comparator = object : Comparator by n {} +val n: Comparator = Comparator { _, _ -> 0 } + +val t: String = z +val u: String = inPlaceRun { z } +val v: String = notInPlaceRun { z } +val w: String by simpleDelegate(z) +val x: String by inPlaceDelegate { z } +val y: String by notInPlaceDelegate { z } +val z: String = "VALUE" diff --git a/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts b/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts new file mode 100644 index 00000000000..2190b12fc50 --- /dev/null +++ b/compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts @@ -0,0 +1,58 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE -ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE -WRONG_INVOCATION_KIND +// WITH_STDLIB + +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract +import kotlin.properties.ReadOnlyProperty + +@OptIn(ExperimentalContracts::class) +inline fun inPlaceRun(block: () -> T): T { + contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } + return block() +} + +fun notInPlaceRun(block: () -> T): T = null!! + +fun simpleDelegate(value: T): ReadOnlyProperty = null!! + +@OptIn(ExperimentalContracts::class) +fun inPlaceDelegate(block: () -> T): ReadOnlyProperty { + contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } + return null!! +} + +fun notInPlaceDelegate(block: () -> T): ReadOnlyProperty = null!! + +val a: String = a +val b: String = inPlaceRun { b } +val c: String = notInPlaceRun { c } + +val d: String by simpleDelegate(d) +val e: String by inPlaceDelegate { e } +val f: String by notInPlaceDelegate { f } + +val g: Int +val h = 1.also { g = 2 } +val i: Int +val j by lazy { i = 2; 1 } +val k: Int + get() { + i = 3 + return i + } + +val l: Comparator = object : Comparator { + val delegate: Comparator get() = n + override fun compare(o1: String, o2: String): Int = delegate.compare(o1, o2) +} +val m: Comparator = object : Comparator by n {} +val n: Comparator = Comparator { _, _ -> 0 } + +val t: String = z +val u: String = inPlaceRun { z } +val v: String = notInPlaceRun { z } +val w: String by simpleDelegate(z) +val x: String by inPlaceDelegate { z } +val y: String by notInPlaceDelegate { z } +val z: String = "VALUE" 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 ab11faed41f..796a196401a 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 @@ -32276,6 +32276,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/script/topLevelPropertiesWithGetSet.kts"); } + @Test + @TestMetadata("topLevelPropertyInitialization.kts") + public void testTopLevelPropertyInitialization() throws Exception { + runTest("compiler/testData/diagnostics/tests/script/topLevelPropertyInitialization.kts"); + } + @Test @TestMetadata("topLevelVariable.kts") public void testTopLevelVariable() throws Exception {