From 11fed1674e49683fa856fc8cf26d1f2199f12b21 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Tue, 1 Sep 2015 13:44:02 +0300 Subject: [PATCH] Deprecate `extension` annotation in favor of `Extension` --- compiler/testData/builtin-classes.txt | 8 ++++---- compiler/testData/codegen/box/regressions/kt3999.kt | 6 +++--- .../diagnostics/tests/FreeFunctionCalledAsExtension.kt | 6 +++--- .../tests/FreeFunctionCalledAsExtension.txt | 2 +- .../tests/annotations/extensionFunctionType.kt | 4 ++-- .../tests/annotations/extensionFunctionType.txt | 4 ++-- .../tests/inline/binaryExpressions/arrayAccess.kt | 2 +- .../tests/inline/binaryExpressions/assignment.kt | 6 +++--- .../tests/inline/binaryExpressions/comparison.kt | 2 +- .../tests/inline/binaryExpressions/componentAccess.kt | 4 ++-- .../tests/inline/binaryExpressions/contains.kt | 2 +- .../tests/inline/binaryExpressions/mathOperations.kt | 6 +++--- .../tests/inline/binaryExpressions/rangeTo.kt | 2 +- .../tests/inline/unaryExpressions/mathOperation.kt | 8 ++++---- .../tests/inline/unaryExpressions/notOperation.kt | 2 +- compiler/testData/renderer/FunctionTypes.kt | 6 +++--- .../functionTypes/invokeForExtensionFunctionType.txt | 2 +- .../functionTypes/valOfExtensionFunctionTypeInvoke.txt | 2 +- core/builtins/src/kotlin/Annotations.kt | 2 +- .../org/jetbrains/kotlin/builtins/KotlinBuiltIns.java | 4 ++-- .../ExcludedClass/ExcludedClass.dependency.kt | 4 ++-- .../basic/multifile/ExcludedClass/ExcludedClass.kt | 4 ++-- .../multifile/ExcludedJavaClass/ExcludedJavaClass.kt | 4 ++-- .../ExcludedJavaClass/somePackage/ExctraClass.java | 6 ++++++ .../ExcludedJavaClass/somePackage/ExtraClass.java | 5 ----- .../NotImportedExtensionFunction2.dependency.kt | 2 +- .../NotImportedExtensionFunction3.dependency.kt | 4 ++-- .../decompiledText/FunctionTypes/FunctionTypes.kt | 4 ++-- idea/testData/decompiler/stubBuilder/Types/Types.kt | 4 ++-- idea/testData/unifier/equivalence/types/function0.kt | 2 +- idea/testData/unifier/equivalence/types/function1.kt | 4 ++-- .../unifier/equivalence/types/function1.kt.match | 2 +- idea/testData/unifier/equivalence/types/function2.kt | 4 ++-- .../unifier/equivalence/types/function2.kt.match | 2 +- .../testData/expression/invoke/cases/infixCall.kt | 10 +++++----- spec-docs/function-types.md | 2 +- 36 files changed, 72 insertions(+), 71 deletions(-) create mode 100644 idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java delete mode 100644 idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExtraClass.java diff --git a/compiler/testData/builtin-classes.txt b/compiler/testData/builtin-classes.txt index 1e7adabe012..ae5fe57c4ee 100644 --- a/compiler/testData/builtin-classes.txt +++ b/compiler/testData/builtin-classes.txt @@ -427,6 +427,10 @@ public abstract class Enum> : kotlin.Comparable { } } +kotlin.annotation.target(allowedTargets = {AnnotationTarget.TYPE}) kotlin.annotation.annotation(mustBeDocumented = true) public final class Extension : kotlin.Annotation { + /*primary*/ public constructor Extension() +} + public final class Float : kotlin.Number, kotlin.Comparable { /*primary*/ private constructor Float() public final fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int @@ -1262,10 +1266,6 @@ kotlin.annotation.target(allowedTargets = {AnnotationTarget.CLASSIFIER, Annotati internal final fun (): kotlin.String } -kotlin.annotation.target(allowedTargets = {AnnotationTarget.TYPE}) kotlin.annotation.annotation(mustBeDocumented = true) public final class extension : kotlin.Annotation { - /*primary*/ public constructor extension() -} - kotlin.annotation.target(allowedTargets = {AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY}) kotlin.annotation.annotation(mustBeDocumented = true, retention = AnnotationRetention.RUNTIME) public final class inline : kotlin.Annotation { /*primary*/ public constructor inline(/*0*/ strategy: kotlin.InlineStrategy = ...) public final val strategy: kotlin.InlineStrategy diff --git a/compiler/testData/codegen/box/regressions/kt3999.kt b/compiler/testData/codegen/box/regressions/kt3999.kt index 4eac6a2e580..2bbe3215dc3 100644 --- a/compiler/testData/codegen/box/regressions/kt3999.kt +++ b/compiler/testData/codegen/box/regressions/kt3999.kt @@ -11,9 +11,9 @@ fun test1() { } fun test2() { - val a: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->Unit = {} - val b: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->Unit = {"$this $it"} - val c: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->Unit = {} + val a: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->Unit = {} + val b: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->Unit = {"$this $it"} + val c: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->Unit = {} a.b(c) a b c } diff --git a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt index 0b552e64264..e890300076d 100644 --- a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt +++ b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt @@ -6,8 +6,8 @@ fun foo(a: (String) -> Unit) { interface A : (String) -> Unit {} -fun foo(a: @extension A) { - // @extension annotation on an unrelated type shouldn't have any effect on this diagnostic. - // Only kotlin.Function{n} type annotated with @extension should +fun foo(a: @Extension A) { + // @Extension annotation on an unrelated type shouldn't have any effect on this diagnostic. + // Only kotlin.Function{n} type annotated with @Extension should "".a() } diff --git a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt index f6d7797c85a..030563a258c 100644 --- a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt +++ b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt @@ -1,7 +1,7 @@ package internal fun foo(/*0*/ a: (kotlin.String) -> kotlin.Unit): kotlin.Unit -internal fun foo(/*0*/ a: @[kotlin.extension()] A): kotlin.Unit +internal fun foo(/*0*/ a: @[kotlin.Extension()] A): kotlin.Unit internal interface A : (kotlin.String) -> kotlin.Unit { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean diff --git a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt index 61ab3238531..3d0e6230392 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt @@ -4,7 +4,7 @@ annotation class ann interface Some { fun f1(): String.() -> Int - fun f2(): @extension String.() -> Int + fun f2(): @Extension String.() -> Int fun f3(): @ann String.() -> Int - fun f4(): @extension @ann String.() -> Int + fun f4(): @Extension @ann String.() -> Int } diff --git a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt index d7f1091fb38..07c41792011 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt @@ -3,9 +3,9 @@ package internal interface Some { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean internal abstract fun f1(): kotlin.String.() -> kotlin.Int - internal abstract fun f2(): @[kotlin.extension()] kotlin.String.() -> kotlin.Int + internal abstract fun f2(): @[kotlin.Extension()] kotlin.String.() -> kotlin.Int internal abstract fun f3(): @[ann()] kotlin.String.() -> kotlin.Int - internal abstract fun f4(): @[kotlin.extension() ann()] kotlin.String.() -> kotlin.Int + internal abstract fun f4(): @[kotlin.Extension() ann()] kotlin.String.() -> kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt index 9af1f669a65..d73c6b4cc6b 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt @@ -12,7 +12,7 @@ fun Function2.get(index : Int) { } -fun @extension Function3.get(index : Int) { +fun @Extension Function3.get(index : Int) { } diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt index b3b183e71c0..9827bd367d2 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt @@ -12,14 +12,14 @@ inline fun Function1.plusAssign(p: Function1) { p -= this } -fun @extension Function2.minusAssign(ext : @extension Function2) {} +fun @Extension Function2.minusAssign(ext : @Extension Function2) {} -inline fun @extension Function2.modAssign(ext : @extension Function2) = { +inline fun @Extension Function2.modAssign(ext : @Extension Function2) = { this += ext ext += this } -inline fun @extension Function2.plusAssign(ext : @extension Function2) { +inline fun @Extension Function2.plusAssign(ext : @Extension Function2) { this -= ext ext -= this } diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/comparison.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/comparison.kt index c5832c2e0bf..2d8ed2997bc 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/comparison.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/comparison.kt @@ -11,7 +11,7 @@ inline fun inlineFunWithInvoke(s: (p: T) -> U) { //noinline fun Function2.compareTo(index : Function2) = 1 -fun @extension Function3.compareTo(index : @extension Function3) = 1 +fun @Extension Function3.compareTo(index : @Extension Function3) = 1 inline fun inlineFunWithInvoke(s: (p: T, l: U) -> V, ext: T.(p: U, l: V) -> W) { s < s diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/componentAccess.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/componentAccess.kt index fd317924dbc..bfbd3ac3462 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/componentAccess.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/componentAccess.kt @@ -9,8 +9,8 @@ inline fun inlineFunWithInvoke(s: (p: T) -> U) { fun Function2.component1() = 1 fun Function2.component2() = 2 -fun @extension Function3.component1() = 1 -fun @extension Function3.component2() = 2 +fun @Extension Function3.component1() = 1 +fun @Extension Function3.component2() = 2 inline fun inlineFunWithInvoke(s: (p: T, l: U) -> V, ext: T.(p: U, l: V) -> W) { val (d1, e1) = s diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/contains.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/contains.kt index 5bc22123a4f..149b9b99159 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/contains.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/contains.kt @@ -13,7 +13,7 @@ inline fun inlineFunWithInvoke(s: (p: T) -> U) { fun Function2.contains(p: Function2): Boolean = false -fun @extension Function3.contains(ext: @extension Function3): Boolean = false +fun @Extension Function3.contains(ext: @Extension Function3): Boolean = false inline fun inlineFunWithInvoke(s: (p: T, l: U) -> U, ext: T.(p: U, l: U) -> V) { s in s diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt index 729bf0f42c1..f6134fd3064 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt @@ -3,7 +3,7 @@ fun Function1.minus(p: Function1) { } -fun @extension Function2.minus(p: T.(p: U) -> V) { +fun @Extension Function2.minus(p: T.(p: U) -> V) { } @@ -11,7 +11,7 @@ inline fun Function1.plus(p: Function1) { this - p } -inline fun @extension Function2.plus(p: T.(p: U) -> V) { +inline fun @Extension Function2.plus(p: T.(p: U) -> V) { this - p } @@ -29,6 +29,6 @@ inline fun Function1.submit() { this + this } -inline fun @extension Function2.submit() { +inline fun @Extension Function2.submit() { this + this } diff --git a/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt b/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt index 2a73c7a00db..ed297511152 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt @@ -16,7 +16,7 @@ fun Function2.rangeTo(p: Function2): Range { return 1..2 } -fun @extension Function3.rangeTo(ext: @extension Function3): Range { +fun @Extension Function3.rangeTo(ext: @Extension Function3): Range { return 1..2 } diff --git a/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt b/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt index ddf78874b40..5a8ec85c859 100644 --- a/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt +++ b/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt @@ -5,10 +5,10 @@ fun Function1.minus() = this inline fun Function1.inc() = this fun Function1.dec() = this -inline fun @extension Function2.plus(){} -fun @extension Function2.minus(){} -inline fun @extension Function2.inc() = this -fun @extension Function2.dec() = this +inline fun @Extension Function2.plus(){} +fun @Extension Function2.minus(){} +inline fun @Extension Function2.inc() = this +fun @Extension Function2.dec() = this inline fun inlineFunWithInvoke(s: (p: T) -> V, ext: T.(p: T) -> V) { +s diff --git a/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt b/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt index 805562fd1da..777a2acfe9c 100644 --- a/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt +++ b/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt @@ -11,7 +11,7 @@ fun Function2.not() : Boolean { return !this } -fun @extension Function3.not() : Boolean { +fun @Extension Function3.not() : Boolean { return !this } diff --git a/compiler/testData/renderer/FunctionTypes.kt b/compiler/testData/renderer/FunctionTypes.kt index 250d5ddb7de..7573a97fe72 100644 --- a/compiler/testData/renderer/FunctionTypes.kt +++ b/compiler/testData/renderer/FunctionTypes.kt @@ -5,18 +5,18 @@ var v4: Function1 var v4: (() -> Int, (String) -> Unit) -> String var v5: Int.() -> Int var v6 : Int.(String, Int) -> Unit -var v7 : @extension Function2 +var v7 : @Extension Function2 class F: Function0 var v8: F -class EF: @extension Function1 +class EF: @Extension Function1 var v9: EF class GF: Function0 var v10: GF -class GEF: @extension Function1 +class GEF: @Extension Function1 var v11: GEF var v12: (() -> Unit).() -> Unit diff --git a/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt b/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt index 0c8e537cbaa..ec09b6b99ce 100644 --- a/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt +++ b/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt @@ -8,5 +8,5 @@ Resolved call: Resulting descriptor: fun Int.invoke(): Unit defined in kotlin.Function1 Explicit receiver kind = BOTH_RECEIVERS -Dispatch receiver = f {[kotlin.extension] Function1} +Dispatch receiver = f {[kotlin.Extension] Function1} Extension receiver = 1 {Int} diff --git a/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt b/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt index 251275e2c66..81a4dc7cdfd 100644 --- a/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt +++ b/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt @@ -12,5 +12,5 @@ Resolved call: Resulting descriptor: fun Int.invoke(): Unit defined in kotlin.Function1 Explicit receiver kind = BOTH_RECEIVERS -Dispatch receiver = foo {[kotlin.extension] Function1} +Dispatch receiver = foo {[kotlin.Extension] Function1} Extension receiver = 1 {Int} diff --git a/core/builtins/src/kotlin/Annotations.kt b/core/builtins/src/kotlin/Annotations.kt index ab30d0de2eb..ded577bb484 100644 --- a/core/builtins/src/kotlin/Annotations.kt +++ b/core/builtins/src/kotlin/Annotations.kt @@ -59,7 +59,7 @@ public annotation(retention = BINARY, mustBeDocumented = true) class ReplaceWith * Signifies that the annotated functional type represents an extension function. */ target(TYPE) -public annotation(mustBeDocumented = true) class extension +public annotation(mustBeDocumented = true) class Extension /** * Suppresses the given compilation warnings in the annotated element. diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 725c8101a5b..644edffacd0 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -175,7 +175,7 @@ public class KotlinBuiltIns { public final FqName inline = fqName("inline"); public final FqName noinline = fqName("noinline"); public final FqName inlineOptions = fqName("inlineOptions"); - public final FqName extension = fqName("extension"); + public final FqName extension = fqName("Extension"); public final FqName target = annotationName("target"); public final FqName annotation = annotationName("annotation"); public final FqName annotationTarget = annotationName("AnnotationTarget"); @@ -721,7 +721,7 @@ public class KotlinBuiltIns { @NotNull public AnnotationDescriptor createExtensionAnnotation() { - return new AnnotationDescriptorImpl(getBuiltInClassByName("extension").getDefaultType(), + return new AnnotationDescriptorImpl(getBuiltInClassByName(FQ_NAMES.extension.shortName()).getDefaultType(), Collections.>emptyMap(), SourceElement.NO_SOURCE); } diff --git a/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.dependency.kt b/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.dependency.kt index 4983cec7adf..48876406d8c 100644 --- a/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.dependency.kt +++ b/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.dependency.kt @@ -1,5 +1,5 @@ package somePackage class ExcludedClass - -class ExtraClass \ No newline at end of file +// Such strange name here needed to make completion prefix not intersecting with kotlin.Extension +class ExctraClass \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.kt b/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.kt index f342359fe2d..eda6b2ae679 100644 --- a/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.kt +++ b/idea/idea-completion/testData/basic/multifile/ExcludedClass/ExcludedClass.kt @@ -1,4 +1,4 @@ -val x = Ex +val x = Exc // ABSENT: ExcludedClass -// EXIST: ExtraClass \ No newline at end of file +// EXIST: ExctraClass \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/ExcludedJavaClass.kt b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/ExcludedJavaClass.kt index f342359fe2d..eda6b2ae679 100644 --- a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/ExcludedJavaClass.kt +++ b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/ExcludedJavaClass.kt @@ -1,4 +1,4 @@ -val x = Ex +val x = Exc // ABSENT: ExcludedClass -// EXIST: ExtraClass \ No newline at end of file +// EXIST: ExctraClass \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java new file mode 100644 index 00000000000..b1cda98a37b --- /dev/null +++ b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java @@ -0,0 +1,6 @@ +package somePackage; + +// Such strange name here needed to make completion prefix not intersecting with kotlin.Extension +public class ExctraClass { + +} \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExtraClass.java b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExtraClass.java deleted file mode 100644 index 8e27c9baf5d..00000000000 --- a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExtraClass.java +++ /dev/null @@ -1,5 +0,0 @@ -package somePackage; - -public class ExtraClass { - -} \ No newline at end of file diff --git a/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt b/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt index a6cb72ea336..e7a45fcbefd 100644 --- a/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt +++ b/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt @@ -6,7 +6,7 @@ fun (() -> Unit)?.helloFun1() { fun Function0.helloFun2() { } -fun @extension Function1.helloFun3() { +fun @Extension Function1.helloFun3() { } fun Function1.helloFun4() { diff --git a/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction3/NotImportedExtensionFunction3.dependency.kt b/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction3/NotImportedExtensionFunction3.dependency.kt index 450acef59e4..c418879227e 100644 --- a/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction3/NotImportedExtensionFunction3.dependency.kt +++ b/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction3/NotImportedExtensionFunction3.dependency.kt @@ -6,10 +6,10 @@ fun (String.() -> Unit)?.helloFun1() { fun Function0.helloFun2() { } -fun @extension Function1.helloFun3() { +fun @Extension Function1.helloFun3() { } -fun @extension Function1.helloFun4() { +fun @Extension Function1.helloFun4() { } fun Function1.helloFun5() { diff --git a/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt b/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt index 8bb9dc0b7a1..dbc4041dd83 100644 --- a/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt +++ b/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt @@ -21,9 +21,9 @@ class FunctionTypes { public fun f2(f: Function2) { } - public fun f3(f: @extension Function2) { + public fun f3(f: @Extension Function2) { } - public fun f4(f: List<@extension Function1<*, *>>) { + public fun f4(f: List<@Extension Function1<*, *>>) { } } diff --git a/idea/testData/decompiler/stubBuilder/Types/Types.kt b/idea/testData/decompiler/stubBuilder/Types/Types.kt index ace2bbb3e8c..4b92c32a0b5 100644 --- a/idea/testData/decompiler/stubBuilder/Types/Types.kt +++ b/idea/testData/decompiler/stubBuilder/Types/Types.kt @@ -19,7 +19,7 @@ abstract class Types { abstract val starList: List<*> abstract val starFun: Function1<*, *> - abstract val extFun: @extension Function2 - abstract val listExtStarFun: List<@extension Function1<*, *>> + abstract val extFun: @Extension Function2 + abstract val listExtStarFun: List<@Extension Function1<*, *>> abstract val funTypeWithStarAndNonStar: Function1<*, Int> } \ No newline at end of file diff --git a/idea/testData/unifier/equivalence/types/function0.kt b/idea/testData/unifier/equivalence/types/function0.kt index adc2e0288c7..039b31f2fff 100644 --- a/idea/testData/unifier/equivalence/types/function0.kt +++ b/idea/testData/unifier/equivalence/types/function0.kt @@ -4,4 +4,4 @@ val c: () -> String = { "" } val d: () -> kotlin.String = { "" } val e: () -> Unit = { } val f: Any.() -> String = { "" } -val g: @extension Function1 = { "" } +val g: @Extension Function1 = { "" } diff --git a/idea/testData/unifier/equivalence/types/function1.kt b/idea/testData/unifier/equivalence/types/function1.kt index eb07cab248c..f62fb7dc609 100644 --- a/idea/testData/unifier/equivalence/types/function1.kt +++ b/idea/testData/unifier/equivalence/types/function1.kt @@ -5,6 +5,6 @@ val d: (n: Int) -> kotlin.String = { "" } val e: (String) -> Int = { 0 } val f: () -> Int = { 0 } val g: Int.() -> String = { "" } -val h: @extension Function2 = { "" } +val h: @Extension Function2 = { "" } val i: (m: Int) -> kotlin.String = { "" } -val j: @extension Function1 = { "" } +val j: @Extension Function1 = { "" } diff --git a/idea/testData/unifier/equivalence/types/function1.kt.match b/idea/testData/unifier/equivalence/types/function1.kt.match index 50dc32be4c4..9c50410998c 100644 --- a/idea/testData/unifier/equivalence/types/function1.kt.match +++ b/idea/testData/unifier/equivalence/types/function1.kt.match @@ -10,4 +10,4 @@ Int.() -> String (m: Int) -> kotlin.String -@extension Function1 +@Extension Function1 diff --git a/idea/testData/unifier/equivalence/types/function2.kt b/idea/testData/unifier/equivalence/types/function2.kt index 7e98a01c251..31f21c5aecb 100644 --- a/idea/testData/unifier/equivalence/types/function2.kt +++ b/idea/testData/unifier/equivalence/types/function2.kt @@ -6,6 +6,6 @@ val e: (String) -> Int = { 0 } val f: () -> Int = { 0 } val g: Any.(Int) -> String = { "" } val h: Int.(Any) -> String = { "" } -val i: @extension Function3 = { a, b -> "" } +val i: @Extension Function3 = { a, b -> "" } val j: (t: Any, u: Int) -> kotlin.String = { a, b -> "" } -val k: @extension Function2 = { "" } +val k: @Extension Function2 = { "" } diff --git a/idea/testData/unifier/equivalence/types/function2.kt.match b/idea/testData/unifier/equivalence/types/function2.kt.match index f3d72847299..2fa4558f6dd 100644 --- a/idea/testData/unifier/equivalence/types/function2.kt.match +++ b/idea/testData/unifier/equivalence/types/function2.kt.match @@ -10,4 +10,4 @@ Any.(Int) -> String (t: Any, u: Int) -> kotlin.String -@extension Function2 +@Extension Function2 diff --git a/js/js.translator/testData/expression/invoke/cases/infixCall.kt b/js/js.translator/testData/expression/invoke/cases/infixCall.kt index b83f9225ff8..5fa7f872f69 100644 --- a/js/js.translator/testData/expression/invoke/cases/infixCall.kt +++ b/js/js.translator/testData/expression/invoke/cases/infixCall.kt @@ -15,13 +15,13 @@ fun test1(): String { } fun test2(): String { - val a: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = { "a" } - val b: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = { - val aa = this as @extension Function2; - val cc = it as @extension Function2; + val a: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->String = { "a" } + val b: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->String = { + val aa = this as @Extension Function2; + val cc = it as @Extension Function2; "${null.aa(null)} b ${null.cc(null)}" } - val c: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = { "c" } + val c: (@Extension Function2<*, *, *>).(@Extension Function2<*, *, *>)->String = { "c" } val f = a.b(c) // works val s = a b c //compiler crashes diff --git a/spec-docs/function-types.md b/spec-docs/function-types.md index 46818584d95..7a3e11a822b 100644 --- a/spec-docs/function-types.md +++ b/spec-docs/function-types.md @@ -40,7 +40,7 @@ or an extension function expression where a function is expected and vice versa. If you really want to do that, change the shape, assign literal to a variable or use the `as` operator. So basically you can now safely coerce values between function and extension function types, -but still should invoke them in the format which you specified in their type (with or without `@extension`). +but still should invoke them in the format which you specified in their type (with or without `@Extension`). With this we'll get rid of classes `ExtensionFunction0`, `ExtensionFunction1`, ... and the rest of this article will deal only with usual functions.