diff --git a/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt b/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt index a1e72dd8462..ed386807f80 100644 --- a/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt +++ b/compiler/fir/analysis-tests/testData/builtIns/kotlin.txt @@ -361,7 +361,7 @@ public abstract interface Comparable : R|kotlin/Any| { } -@R|kotlin/annotation/Target|(allowedTargets = (R|kotlin/annotation/AnnotationTarget.TYPE|())) @R|kotlin/annotation/MustBeDocumented|() public final annotation class ContextFunctionTypeParams : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = (R|kotlin/annotation/AnnotationTarget.TYPE|())) @R|kotlin/annotation/MustBeDocumented|() @R|kotlin/SinceKotlin|(version = String(1.7)) public final annotation class ContextFunctionTypeParams : R|kotlin/Annotation| { public final val count: R|kotlin/Int| public get(): R|kotlin/Int| diff --git a/compiler/testData/builtin-classes/default/kotlin.txt b/compiler/testData/builtin-classes/default/kotlin.txt index e1caeea5084..75a37acc8d4 100644 --- a/compiler/testData/builtin-classes/default/kotlin.txt +++ b/compiler/testData/builtin-classes/default/kotlin.txt @@ -200,7 +200,7 @@ public interface Comparable { public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented public final annotation class ContextFunctionTypeParams : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented @kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { /*primary*/ public constructor ContextFunctionTypeParams(/*0*/ count: kotlin.Int) public final val count: kotlin.Int public final fun ``(): kotlin.Int diff --git a/compiler/testData/builtin-classes/java6/kotlin.txt b/compiler/testData/builtin-classes/java6/kotlin.txt index 9e93d51c5f9..881737ee81e 100644 --- a/compiler/testData/builtin-classes/java6/kotlin.txt +++ b/compiler/testData/builtin-classes/java6/kotlin.txt @@ -208,7 +208,7 @@ public interface Comparable { public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented public final annotation class ContextFunctionTypeParams : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented @kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { /*primary*/ public constructor ContextFunctionTypeParams(/*0*/ count: kotlin.Int) public final val count: kotlin.Int public final fun ``(): kotlin.Int diff --git a/compiler/testData/builtin-classes/java8/kotlin.txt b/compiler/testData/builtin-classes/java8/kotlin.txt index f033bd2c4a7..36e4ce2b477 100644 --- a/compiler/testData/builtin-classes/java8/kotlin.txt +++ b/compiler/testData/builtin-classes/java8/kotlin.txt @@ -210,7 +210,7 @@ public interface Comparable { public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented public final annotation class ContextFunctionTypeParams : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented @kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { /*primary*/ public constructor ContextFunctionTypeParams(/*0*/ count: kotlin.Int) public final val count: kotlin.Int public final fun ``(): kotlin.Int diff --git a/compiler/testData/builtin-classes/newMethods/kotlin.txt b/compiler/testData/builtin-classes/newMethods/kotlin.txt index 161cb411eaf..02dfe9635ec 100644 --- a/compiler/testData/builtin-classes/newMethods/kotlin.txt +++ b/compiler/testData/builtin-classes/newMethods/kotlin.txt @@ -208,7 +208,7 @@ public interface Comparable { public abstract operator fun compareTo(/*0*/ other: T): kotlin.Int } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented public final annotation class ContextFunctionTypeParams : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented @kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { /*primary*/ public constructor ContextFunctionTypeParams(/*0*/ count: kotlin.Int) public final val count: kotlin.Int public final fun ``(): kotlin.Int diff --git a/core/builtins/src/kotlin/Annotations.kt b/core/builtins/src/kotlin/Annotations.kt index 8a7cac9b567..456c3dd5e59 100644 --- a/core/builtins/src/kotlin/Annotations.kt +++ b/core/builtins/src/kotlin/Annotations.kt @@ -97,8 +97,20 @@ public enum class DeprecationLevel { @MustBeDocumented public annotation class ExtensionFunctionType +/** + * Signifies that the annotated functional type has the prefix of size `count` for context receivers. + * Thus, `@ContextFunctionTypeParams(2) @ExtensionFunctionType Function4` is a normalized representation of + * `context(String, Int) Double.(Byte) -> Unit`. + * + * Just the same as @ExtensionFunctionType, this annotation is not assumed to be used in source code, preferring the explicit function type + * syntax, like in the example above. + * + * There's no need in any additional opt-in limitations because this annotation might only be referenced by users + * who turned on an experimental `-Xcontext-receivers` compiler flag, for which there are no backward/forward compatibilities guarantees. + */ @Target(TYPE) @MustBeDocumented +@SinceKotlin("1.7") public annotation class ContextFunctionTypeParams(val count: Int) /** @@ -174,4 +186,4 @@ public annotation class DslMarker @Retention(AnnotationRetention.BINARY) @MustBeDocumented @SinceKotlin("1.1") -public annotation class PublishedApi \ No newline at end of file +public annotation class PublishedApi diff --git a/libraries/stdlib/api/js-v1/kotlin.kt b/libraries/stdlib/api/js-v1/kotlin.kt index 67265f0e9c6..fe540a48ddb 100644 --- a/libraries/stdlib/api/js-v1/kotlin.kt +++ b/libraries/stdlib/api/js-v1/kotlin.kt @@ -1336,6 +1336,7 @@ public open class ConcurrentModificationException : kotlin.RuntimeException { @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented +@kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { public constructor ContextFunctionTypeParams(count: kotlin.Int) @@ -3767,4 +3768,4 @@ public open class UnsupportedOperationException : kotlin.RuntimeException { public constructor UnsupportedOperationException(message: kotlin.String?, cause: kotlin.Throwable?) public constructor UnsupportedOperationException(cause: kotlin.Throwable?) -} \ No newline at end of file +} diff --git a/libraries/stdlib/api/js/kotlin.kt b/libraries/stdlib/api/js/kotlin.kt index b02aa2500f3..45a0969dfbb 100644 --- a/libraries/stdlib/api/js/kotlin.kt +++ b/libraries/stdlib/api/js/kotlin.kt @@ -1229,6 +1229,7 @@ public open class ConcurrentModificationException : kotlin.RuntimeException { @kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented +@kotlin.SinceKotlin(version = "1.7") public final annotation class ContextFunctionTypeParams : kotlin.Annotation { public constructor ContextFunctionTypeParams(count: kotlin.Int) @@ -3358,4 +3359,4 @@ public open class UnsupportedOperationException : kotlin.RuntimeException { public constructor UnsupportedOperationException(message: kotlin.String?, cause: kotlin.Throwable?) public constructor UnsupportedOperationException(cause: kotlin.Throwable?) -} \ No newline at end of file +}