From e19ed1e00113c41aaf4718fac03b9e24ff0f59f5 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 7 Feb 2018 16:53:30 +0100 Subject: [PATCH] Add test on experimental const val in annotation argument This test checks that a usage inside an annotation argument is a signature usage, which may be too restricting but easier to support at the moment (and the restriction can be lifted in the future) --- .../testsWithStdLib/experimental/constVal.kt | 46 ++++++++++++++++ .../testsWithStdLib/experimental/constVal.txt | 54 +++++++++++++++++++ .../DiagnosticsTestWithStdLibGenerated.java | 6 +++ ...ticsTestWithStdLibUsingJavacGenerated.java | 6 +++ 4 files changed, 112 insertions(+) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt create mode 100644 compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.txt diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt b/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt new file mode 100644 index 00000000000..c0ecb79b872 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt @@ -0,0 +1,46 @@ +// !API_VERSION: 1.3 +// MODULE: api +// FILE: api.kt + +package api + +@Experimental(Experimental.Level.WARNING, [Experimental.Impact.COMPILATION]) +@Target(AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION) +annotation class ExperimentalAPI + +@ExperimentalAPI +const val MEANING = 42 + +annotation class Anno(val value: Int) + +// MODULE: usage1(api) +// FILE: usage-propagate.kt + +package usage1 + +import api.* + +@ExperimentalAPI +@Anno(MEANING) +fun usage() {} + +// MODULE: usage2(api) +// FILE: usage-use.kt + +@file:UseExperimental(ExperimentalAPI::class) +package usage2 + +import api.* + +@Anno(MEANING) +fun usage() {} + +// MODULE: usage3(api) +// FILE: usage-none.kt + +package usage3 + +import api.* + +@Anno(MEANING) +fun usage() {} diff --git a/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.txt b/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.txt new file mode 100644 index 00000000000..1941f52f733 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.txt @@ -0,0 +1,54 @@ +// -- Module: -- +package + +package api { + @api.ExperimentalAPI public const val MEANING: kotlin.Int = 42 + + public final annotation class Anno : kotlin.Annotation { + public constructor Anno(/*0*/ value: kotlin.Int) + public final val value: kotlin.Int + 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 + } + + @kotlin.Experimental(changesMayBreak = {Impact.COMPILATION}, level = Level.WARNING) @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY, AnnotationTarget.FUNCTION}) public final annotation class ExperimentalAPI : kotlin.Annotation { + public constructor ExperimentalAPI() + 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 + } +} + + +// -- Module: -- +package + +package api { +} + +package usage1 { + @api.ExperimentalAPI @api.Anno(value = 42) public fun usage(): kotlin.Unit +} + + +// -- Module: -- +package + +package api { +} + +package usage2 { + @api.Anno(value = 42) public fun usage(): kotlin.Unit +} + + +// -- Module: -- +package + +package api { +} + +package usage3 { + @api.Anno(value = 42) public fun usage(): kotlin.Unit +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java index 9b37d742940..716bf4f6a36 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java @@ -1839,6 +1839,12 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW doTest(fileName); } + @TestMetadata("constVal.kt") + public void testConstVal() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt"); + doTest(fileName); + } + @TestMetadata("deeplyNestedClass.kt") public void testDeeplyNestedClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/experimental/deeplyNestedClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java index 9030d9b3209..cf9122e5d6b 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsTestWithStdLibUsingJavacGenerated.java @@ -1839,6 +1839,12 @@ public class DiagnosticsTestWithStdLibUsingJavacGenerated extends AbstractDiagno doTest(fileName); } + @TestMetadata("constVal.kt") + public void testConstVal() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/experimental/constVal.kt"); + doTest(fileName); + } + @TestMetadata("deeplyNestedClass.kt") public void testDeeplyNestedClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/experimental/deeplyNestedClass.kt");