From ad9025afa6625edc9cc8afeb6ac4a2b7a0b4684b Mon Sep 17 00:00:00 2001 From: "Anastasia.Nekrasova" Date: Thu, 11 Jan 2024 19:22:59 +0200 Subject: [PATCH] [k1/K2]: Mark @SubclassOptInRequired as an experimental At the moment, SubclassOptInRequired is marked with the ExperimentalSubclassOptIn annotation. However, it does not work as expected due to a missing opt-in error. To use SubclassOptInRequired, an explicit opt-in is necessary because SubclassOptInRequired is an unstable feature now. ^KT-64739 --- .../DiagnosticCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...eversedDiagnosticCompilerFE10TestDataTestGenerated.java | 6 ++++++ compiler/fir/analysis-tests/testData/builtIns/kotlin.txt | 2 +- .../resolveWithStdlib/ClassIdDiagnosticRendering.fir.txt | 1 + .../resolveWithStdlib/ClassIdDiagnosticRendering.kt | 1 + .../FirLightTreeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../runners/FirPsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ compiler/testData/builtin-classes/default/kotlin.txt | 2 +- compiler/testData/builtin-classes/java6/kotlin.txt | 2 +- compiler/testData/builtin-classes/java8/kotlin.txt | 2 +- compiler/testData/builtin-classes/newMethods/kotlin.txt | 2 +- .../subclassOptInRequired/CorrectApplicability.kt | 1 + .../annotations/subclassOptInRequired/Experimentality.kt | 7 +++++++ .../subclassOptInRequired/IncorrectApplicability.kt | 1 + .../subclassOptInRequired/InheritingByLocalClassifiers.kt | 1 + .../InheritingDifferentOptInLevels.kt | 1 + .../subclassOptInRequired/InnerAndNestedClasses.kt | 1 + .../annotations/subclassOptInRequired/InnerClasses.kt | 1 + .../annotations/subclassOptInRequired/NestedClasses.kt | 1 + .../subclassOptInRequired/NotApiMarkerAsArgument.kt | 1 + .../annotations/subclassOptInRequired/Typealias.fir.kt | 2 ++ .../annotations/subclassOptInRequired/Typealias.kt | 2 ++ .../subclassOptInRequired/UsageOptInIsNotImplied.kt | 1 + .../subclassOptInRequired/WithAbstractClasses.kt | 1 + .../subclassOptInRequired/WithInheritanceByDelegation.kt | 1 + .../annotations/subclassOptInRequired/WithInterfaces.kt | 1 + .../annotations/subclassOptInRequired/WithOpenClasses.kt | 1 + .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ libraries/stdlib/api/js/kotlin.kt | 1 + libraries/stdlib/src/kotlin/annotations/OptIn.kt | 1 + 30 files changed, 63 insertions(+), 5 deletions(-) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt 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 ab60cb26f57..f8bbe66e1d1 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 @@ -42229,6 +42229,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt"); } + @Test + @TestMetadata("Experimentality.kt") + public void testExperimentality() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt"); + } + @Test @TestMetadata("IncorrectApplicability.kt") public void testIncorrectApplicability() 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 24272e43569..22374ead0f4 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 @@ -42229,6 +42229,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt"); } + @Test + @TestMetadata("Experimentality.kt") + public void testExperimentality() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt"); + } + @Test @TestMetadata("IncorrectApplicability.kt") public void testIncorrectApplicability() throws Exception { diff --git a/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt b/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt index 66ebfe74410..1f5ae43e341 100644 --- a/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt +++ b/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt @@ -601,7 +601,7 @@ public abstract class Enum|> : R|kotlin/Comparable|, R|j } -@R|kotlin/annotation/Target|(allowedTargets = (R|kotlin/annotation/AnnotationTarget.CLASS|)) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.BINARY|) @R|kotlin/SinceKotlin|(version = String(1.8)) public final annotation class ExperimentalSubclassOptIn : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = (R|kotlin/annotation/AnnotationTarget.CLASS|)) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.BINARY|) @R|kotlin/SinceKotlin|(version = String(1.8)) @R|kotlin/RequiresOptIn|() public final annotation class ExperimentalSubclassOptIn : R|kotlin/Annotation| { public constructor(): R|kotlin/ExperimentalSubclassOptIn| } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.fir.txt index b47c3a1bf6d..1272f9864f7 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.fir.txt @@ -1,4 +1,5 @@ FILE: ClassIdDiagnosticRendering.kt + @FILE:R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/ExperimentalSubclassOptIn|))) package a.b.c @R|kotlin/RequiresOptIn|() public final annotation class Marker : R|kotlin/Annotation| { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.kt index 4960279efdb..453d5bd44f6 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.kt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/ClassIdDiagnosticRendering.kt @@ -1,4 +1,5 @@ // WITH_EXTENDED_CHECKERS +@file:OptIn(ExperimentalSubclassOptIn::class) package a.b.c 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 51fbd0034b1..e613dbd9b36 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 @@ -39943,6 +39943,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt"); } + @Test + @TestMetadata("Experimentality.kt") + public void testExperimentality() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt"); + } + @Test @TestMetadata("IncorrectApplicability.kt") public void testIncorrectApplicability() 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 a6f1efcb682..e3685852d5c 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 @@ -40063,6 +40063,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt"); } + @Test + @TestMetadata("Experimentality.kt") + public void testExperimentality() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt"); + } + @Test @TestMetadata("IncorrectApplicability.kt") public void testIncorrectApplicability() throws Exception { diff --git a/compiler/testData/builtin-classes/default/kotlin.txt b/compiler/testData/builtin-classes/default/kotlin.txt index 0a1080b538d..ddae0723322 100644 --- a/compiler/testData/builtin-classes/default/kotlin.txt +++ b/compiler/testData/builtin-classes/default/kotlin.txt @@ -347,7 +347,7 @@ public abstract class Enum> : kotlin.Comparable { /*primary*/ public constructor ExperimentalStdlibApi() } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") @kotlin.RequiresOptIn public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { /*primary*/ public constructor ExperimentalSubclassOptIn() } diff --git a/compiler/testData/builtin-classes/java6/kotlin.txt b/compiler/testData/builtin-classes/java6/kotlin.txt index 302ba5bb550..a896cabb960 100644 --- a/compiler/testData/builtin-classes/java6/kotlin.txt +++ b/compiler/testData/builtin-classes/java6/kotlin.txt @@ -362,7 +362,7 @@ public abstract class Enum> : kotlin.Comparable, jav /*primary*/ public constructor ExperimentalStdlibApi() } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") @kotlin.RequiresOptIn public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { /*primary*/ public constructor ExperimentalSubclassOptIn() } diff --git a/compiler/testData/builtin-classes/java8/kotlin.txt b/compiler/testData/builtin-classes/java8/kotlin.txt index abdeef2b4d8..f0fdcd9a434 100644 --- a/compiler/testData/builtin-classes/java8/kotlin.txt +++ b/compiler/testData/builtin-classes/java8/kotlin.txt @@ -364,7 +364,7 @@ public abstract class Enum> : kotlin.Comparable, jav /*primary*/ public constructor ExperimentalStdlibApi() } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") @kotlin.RequiresOptIn public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { /*primary*/ public constructor ExperimentalSubclassOptIn() } diff --git a/compiler/testData/builtin-classes/newMethods/kotlin.txt b/compiler/testData/builtin-classes/newMethods/kotlin.txt index de4a30e28fa..4225f545644 100644 --- a/compiler/testData/builtin-classes/newMethods/kotlin.txt +++ b/compiler/testData/builtin-classes/newMethods/kotlin.txt @@ -362,7 +362,7 @@ public abstract class Enum> : kotlin.Comparable, jav /*primary*/ public constructor ExperimentalStdlibApi() } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") @kotlin.RequiresOptIn public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { /*primary*/ public constructor ExperimentalSubclassOptIn() } diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt index dabef7f38e8..8927d37864f 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt new file mode 100644 index 00000000000..a20de3f196d --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt @@ -0,0 +1,7 @@ +// FIR_IDENTICAL + +@RequiresOptIn +annotation class ApiMarker + +@SubclassOptInRequired(ApiMarker::class) +open class OpenKlass diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/IncorrectApplicability.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/IncorrectApplicability.kt index e55f3eae4ce..6a1f0dd2e9d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/IncorrectApplicability.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/IncorrectApplicability.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingByLocalClassifiers.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingByLocalClassifiers.kt index 8a2c263dd15..52b314eab57 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingByLocalClassifiers.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingByLocalClassifiers.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingDifferentOptInLevels.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingDifferentOptInLevels.kt index 8a702d5e6ed..2249d70cc37 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingDifferentOptInLevels.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InheritingDifferentOptInLevels.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerAndNestedClasses.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerAndNestedClasses.kt index b96e7a4873f..1de9bf1104d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerAndNestedClasses.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerAndNestedClasses.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class Api diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerClasses.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerClasses.kt index c8e2cb367f5..e8473223131 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerClasses.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/InnerClasses.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class Boom diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NestedClasses.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NestedClasses.kt index edafc6da6b9..6feb5560354 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NestedClasses.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NestedClasses.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class Boom diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NotApiMarkerAsArgument.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NotApiMarkerAsArgument.kt index c694cadcb87..cbe8831fb7a 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NotApiMarkerAsArgument.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/NotApiMarkerAsArgument.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) annotation class DummyAnnotation diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.fir.kt index b7498fbf0da..f4c58231c1b 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.fir.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalSubclassOptIn::class) + @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.kt index 4914ededa5b..957e42813bb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Typealias.kt @@ -1,3 +1,5 @@ +@file:OptIn(ExperimentalSubclassOptIn::class) + @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/UsageOptInIsNotImplied.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/UsageOptInIsNotImplied.kt index feb4127bb3f..921e7ccc5b3 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/UsageOptInIsNotImplied.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/UsageOptInIsNotImplied.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithAbstractClasses.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithAbstractClasses.kt index ba2c9115b65..59d9ec68497 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithAbstractClasses.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithAbstractClasses.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInheritanceByDelegation.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInheritanceByDelegation.kt index b647f92dcec..2718385f2d4 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInheritanceByDelegation.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInheritanceByDelegation.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInterfaces.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInterfaces.kt index df0a75ce708..8e52ae56a53 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInterfaces.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithInterfaces.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithOpenClasses.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithOpenClasses.kt index 83e24e39511..32c799248ad 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithOpenClasses.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/WithOpenClasses.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +@file:OptIn(ExperimentalSubclassOptIn::class) @RequiresOptIn annotation class ApiMarker 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 eb1f8ce0bad..b69fd059d55 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 @@ -42229,6 +42229,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/CorrectApplicability.kt"); } + @Test + @TestMetadata("Experimentality.kt") + public void testExperimentality() throws Exception { + runTest("compiler/testData/diagnostics/testsWithStdLib/annotations/subclassOptInRequired/Experimentality.kt"); + } + @Test @TestMetadata("IncorrectApplicability.kt") public void testIncorrectApplicability() throws Exception { diff --git a/libraries/stdlib/api/js/kotlin.kt b/libraries/stdlib/api/js/kotlin.kt index 08557bed36c..af8c2129e60 100644 --- a/libraries/stdlib/api/js/kotlin.kt +++ b/libraries/stdlib/api/js/kotlin.kt @@ -1599,6 +1599,7 @@ public final annotation class ExperimentalStdlibApi : kotlin.Annotation { @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) @kotlin.SinceKotlin(version = "1.8") +@kotlin.RequiresOptIn public final annotation class ExperimentalSubclassOptIn : kotlin.Annotation { public constructor ExperimentalSubclassOptIn() } diff --git a/libraries/stdlib/src/kotlin/annotations/OptIn.kt b/libraries/stdlib/src/kotlin/annotations/OptIn.kt index 3601e1c245a..0cb7ca6a331 100644 --- a/libraries/stdlib/src/kotlin/annotations/OptIn.kt +++ b/libraries/stdlib/src/kotlin/annotations/OptIn.kt @@ -144,6 +144,7 @@ public annotation class OptIn( @Target(CLASS) @Retention(BINARY) @SinceKotlin("1.8") +@RequiresOptIn public annotation class ExperimentalSubclassOptIn /**