diff --git a/compiler/testData/builtin-classes.txt b/compiler/testData/builtin-classes.txt index f6a02337139..0a183f4a9b0 100644 --- a/compiler/testData/builtin-classes.txt +++ b/compiler/testData/builtin-classes.txt @@ -464,14 +464,10 @@ public abstract class Enum> : kotlin.Comparable { } } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() @kotlin.Deprecated(message = "Use @ExtensionFunctionType instead.", replaceWith = kotlin.ReplaceWith(expression = "@ExtensionFunctionType", imports = {})) public final annotation class Extension : kotlin.Annotation { +@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() public final annotation class Extension : kotlin.Annotation { /*primary*/ public constructor Extension() } -@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.TYPE}) @kotlin.annotation.MustBeDocumented() public final annotation class ExtensionFunctionType : kotlin.Annotation { - /*primary*/ public constructor ExtensionFunctionType() -} - public final class Float : kotlin.Number, kotlin.Comparable { /*primary*/ private constructor Float() public final operator fun compareTo(/*0*/ other: kotlin.Byte): kotlin.Int diff --git a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.kt index bc7fb23ce4d..2d89ffd77b2 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: @ExtensionFunctionType A) { - // @ExtensionFunctionType annotation on an unrelated type shouldn't have any effect on this diagnostic. - // Only kotlin.Function{n} type annotated with @ExtensionFunctionType 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() -} +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt index 9ea07923568..7dc7b460d80 100644 --- a/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt +++ b/compiler/testData/diagnostics/tests/FreeFunctionCalledAsExtension.txt @@ -1,7 +1,7 @@ package public fun foo(/*0*/ a: (kotlin.String) -> kotlin.Unit): kotlin.Unit -public fun foo(/*0*/ a: @kotlin.ExtensionFunctionType() A): kotlin.Unit +public fun foo(/*0*/ a: @kotlin.Extension() A): kotlin.Unit public 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 1eb372ce86c..563a3e5e867 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.kt @@ -5,7 +5,7 @@ annotation class ann interface Some { fun f1(): String.() -> Int - fun f2(): @ExtensionFunctionType String.() -> Int + fun f2(): @Extension String.() -> Int fun f3(): @ann String.() -> Int - fun f4(): @ExtensionFunctionType @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 1dfc3b0743c..ce3b233ff88 100644 --- a/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt +++ b/compiler/testData/diagnostics/tests/annotations/extensionFunctionType.txt @@ -3,9 +3,9 @@ package public interface Some { public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public abstract fun f1(): kotlin.String.() -> kotlin.Int - public abstract fun f2(): @kotlin.ExtensionFunctionType() kotlin.String.() -> kotlin.Int + public abstract fun f2(): @kotlin.Extension() kotlin.String.() -> kotlin.Int public abstract fun f3(): @ann() kotlin.String.() -> kotlin.Int - public abstract fun f4(): @kotlin.ExtensionFunctionType() @ann() kotlin.String.() -> kotlin.Int + public 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 19a60b6e122..4a13385ee75 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/arrayAccess.kt @@ -12,7 +12,7 @@ operator fun Function2.get(index : Int) { } -operator fun @ExtensionFunctionType Function3.get(index : Int) { +operator 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 da2dcab7eab..438b43cc618 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/assignment.kt @@ -12,14 +12,14 @@ inline operator fun Function1.plusAssign(p: Function1) { p -= this } -operator fun @ExtensionFunctionType Function2.minusAssign(ext : @ExtensionFunctionType Function2) {} +operator fun @Extension Function2.minusAssign(ext : @Extension Function2) {} -inline operator fun @ExtensionFunctionType Function2.modAssign(ext : @ExtensionFunctionType Function2) = { +inline operator fun @Extension Function2.modAssign(ext : @Extension Function2) = { this += ext ext += this } -inline operator fun @ExtensionFunctionType Function2.plusAssign(ext : @ExtensionFunctionType Function2) { +inline operator 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 6166c6656d8..1233c32f4f2 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 operator fun Function2.compareTo(index : Function2) = 1 -operator fun @ExtensionFunctionType Function3.compareTo(index : @ExtensionFunctionType Function3) = 1 +operator 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 52baa63c0d5..0403652b44e 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) { operator fun Function2.component1() = 1 operator fun Function2.component2() = 2 -operator fun @ExtensionFunctionType Function3.component1() = 1 -operator fun @ExtensionFunctionType Function3.component2() = 2 +operator fun @Extension Function3.component1() = 1 +operator 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 6f77e98b20a..0cde2e63426 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) { operator fun Function2.contains(p: Function2): Boolean = false -operator fun @ExtensionFunctionType Function3.contains(ext: @ExtensionFunctionType Function3): Boolean = false +operator 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 9a1fd2023c8..105bbd25dbb 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/mathOperations.kt @@ -3,7 +3,7 @@ operator fun Function1.minus(p: Function1) { } -operator fun @ExtensionFunctionType Function2.minus(p: T.(p: U) -> V) { +operator fun @Extension Function2.minus(p: T.(p: U) -> V) { } @@ -11,7 +11,7 @@ inline operator fun Function1.plus(p: Function1) { this - p } -inline operator fun @ExtensionFunctionType Function2.plus(p: T.(p: U) -> V) { +inline operator fun @Extension Function2.plus(p: T.(p: U) -> V) { this - p } @@ -29,6 +29,6 @@ inline fun Function1.submit() { this + this } -inline fun @ExtensionFunctionType 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 508750fb971..e2042693f2f 100644 --- a/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt +++ b/compiler/testData/diagnostics/tests/inline/binaryExpressions/rangeTo.kt @@ -16,7 +16,7 @@ operator fun Function2.rangeTo(p: Function2): Closed return 1..2 } -operator fun @ExtensionFunctionType Function3.rangeTo(ext: @ExtensionFunctionType Function3): ClosedRange { +operator fun @Extension Function3.rangeTo(ext: @Extension Function3): ClosedRange { return 1..2 } diff --git a/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt b/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt index 66d725de038..c53f05d9a4d 100644 --- a/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt +++ b/compiler/testData/diagnostics/tests/inline/unaryExpressions/mathOperation.kt @@ -5,10 +5,10 @@ operator fun Function1.unaryMinus() = this inline operator fun Function1.inc() = this operator fun Function1.dec() = this -inline operator fun @ExtensionFunctionType Function2.unaryPlus(){} -operator fun @ExtensionFunctionType Function2.unaryMinus(){} -inline operator fun @ExtensionFunctionType Function2.inc() = this -operator fun @ExtensionFunctionType Function2.dec() = this +inline operator fun @Extension Function2.unaryPlus(){} +operator fun @Extension Function2.unaryMinus(){} +inline operator fun @Extension Function2.inc() = this +operator 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 143083b00d7..75a7c46794b 100644 --- a/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt +++ b/compiler/testData/diagnostics/tests/inline/unaryExpressions/notOperation.kt @@ -11,7 +11,7 @@ operator fun Function2.not() : Boolean { return !this } -operator fun @ExtensionFunctionType Function3.not() : Boolean { +operator fun @Extension Function3.not() : Boolean { return !this } diff --git a/compiler/testData/renderer/FunctionTypes.kt b/compiler/testData/renderer/FunctionTypes.kt index 5e88d258255..a5c456ee35d 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 : @ExtensionFunctionType Function2 +var v7 : @Extension Function2 class F: Function0 var v8: F -class EF: @ExtensionFunctionType Function1 +class EF: @Extension Function1 var v9: EF class GF: Function0 var v10: GF -class GEF: @ExtensionFunctionType 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 6778d757371..a95394fb538 100644 --- a/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt +++ b/compiler/testData/resolvedCalls/functionTypes/invokeForExtensionFunctionType.txt @@ -9,5 +9,5 @@ Resolved call: Resulting descriptor: operator fun Int.invoke(): Unit defined in kotlin.Function1 Explicit receiver kind = BOTH_RECEIVERS -Dispatch receiver = f {[@kotlin.ExtensionFunctionType] 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 e42f0beaec4..37cb35e51f2 100644 --- a/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt +++ b/compiler/testData/resolvedCalls/functionTypes/valOfExtensionFunctionTypeInvoke.txt @@ -13,5 +13,5 @@ Resolved call: Resulting descriptor: operator fun Int.invoke(): Unit defined in kotlin.Function1 Explicit receiver kind = BOTH_RECEIVERS -Dispatch receiver = foo {[@kotlin.ExtensionFunctionType] Function1} +Dispatch receiver = foo {[@kotlin.Extension] Function1} Extension receiver = 1 {Int} diff --git a/compiler/testData/resolvedCalls/invoke/implicitReceiverForInvoke.txt b/compiler/testData/resolvedCalls/invoke/implicitReceiverForInvoke.txt index 33d2bf46d5e..93fe2fb97fe 100644 --- a/compiler/testData/resolvedCalls/invoke/implicitReceiverForInvoke.txt +++ b/compiler/testData/resolvedCalls/invoke/implicitReceiverForInvoke.txt @@ -11,5 +11,5 @@ Resolved call: Resulting descriptor: operator fun Int.invoke(): Unit defined in kotlin.Function1 Explicit receiver kind = DISPATCH_RECEIVER -Dispatch receiver = f {[@kotlin.ExtensionFunctionType] Function1} +Dispatch receiver = f {[@kotlin.Extension] Function1} Extension receiver = IntExt{fun Int.(): Unit defined in bar} diff --git a/core/builtins/src/kotlin/Annotations.kt b/core/builtins/src/kotlin/Annotations.kt index 9d913f6e976..468b5bed1de 100644 --- a/core/builtins/src/kotlin/Annotations.kt +++ b/core/builtins/src/kotlin/Annotations.kt @@ -69,11 +69,6 @@ public enum class DeprecationLevel { */ @Target(TYPE) @MustBeDocumented -public annotation class ExtensionFunctionType - -@Target(TYPE) -@MustBeDocumented -@Deprecated("Use @ExtensionFunctionType instead.", replaceWith = ReplaceWith("@ExtensionFunctionType")) public annotation class Extension /** diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 62fd9e0f6f1..5e62d092e47 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -139,7 +139,7 @@ public abstract class KotlinBuiltIns { public final FqName throwable = fqName("Throwable"); public final FqName deprecated = fqName("Deprecated"); - public final FqName extensionFunctionType = fqName("ExtensionFunctionType"); + public final FqName extension = fqName("Extension"); public final FqName target = annotationName("Target"); public final FqName annotationTarget = annotationName("AnnotationTarget"); public final FqName annotationRetention = annotationName("AnnotationRetention"); @@ -156,9 +156,6 @@ public abstract class KotlinBuiltIns { public final FqNameUnsafe kCallable = reflect("KCallable"); public final ClassId kProperty = ClassId.topLevel(reflect("KProperty").toSafe()); - // TODO: remove in 1.0 - public final FqName deprecatedExtensionAnnotation = fqName("Extension"); - public final Map fqNameToPrimitiveType; public final Map arrayClassFqNameToPrimitiveType; { @@ -699,13 +696,12 @@ public abstract class KotlinBuiltIns { @NotNull public AnnotationDescriptor createExtensionAnnotation() { - return new AnnotationDescriptorImpl(getBuiltInClassByName(FQ_NAMES.extensionFunctionType.shortName()).getDefaultType(), + return new AnnotationDescriptorImpl(getBuiltInClassByName(FQ_NAMES.extension.shortName()).getDefaultType(), Collections.>emptyMap(), SourceElement.NO_SOURCE); } private static boolean isTypeAnnotatedWithExtension(@NotNull KotlinType type) { - return type.getAnnotations().findAnnotation(FQ_NAMES.extensionFunctionType) != null || - type.getAnnotations().findAnnotation(FQ_NAMES.deprecatedExtensionAnnotation) != null; + return type.getAnnotations().findAnnotation(FQ_NAMES.extension) != null; } @NotNull @@ -719,14 +715,14 @@ public abstract class KotlinBuiltIns { int size = parameterTypes.size(); ClassDescriptor classDescriptor = receiverType == null ? getFunction(size) : getExtensionFunction(size); - Annotations typeAnnotations = receiverType == null ? annotations : addExtensionFunctionTypeAnnotation(annotations); + Annotations typeAnnotations = receiverType == null ? annotations : addExtensionAnnotation(annotations); return KotlinTypeImpl.create(typeAnnotations, classDescriptor, false, arguments); } @NotNull - private Annotations addExtensionFunctionTypeAnnotation(@NotNull Annotations annotations) { - if (annotations.findAnnotation(FQ_NAMES.extensionFunctionType) != null) return annotations; + private Annotations addExtensionAnnotation(@NotNull Annotations annotations) { + if (annotations.findAnnotation(FQ_NAMES.extension) != null) return annotations; // TODO: preserve laziness of given annotations return new AnnotationsImpl(plus(annotations, listOf(createExtensionAnnotation()))); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt index 1e84b49c1bb..93e614d8809 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/decompiler/stubBuilder/TypeClsStubBuilder.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.idea.decompiler.stubBuilder import com.google.protobuf.MessageLite import com.intellij.psi.PsiElement import com.intellij.psi.stubs.StubElement +import com.intellij.util.SmartList import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens @@ -80,10 +81,7 @@ class TypeClsStubBuilder(private val c: ClsStubBuilderContext) { val shouldBuildAsFunctionType = KotlinBuiltIns.isNumberedFunctionClassFqName(classId.asSingleFqName().toUnsafe()) && type.getArgumentList().none { it.getProjection() == Projection.STAR } if (shouldBuildAsFunctionType) { - val extension = annotations.any { annotation -> - val fqName = annotation.asSingleFqName() - fqName == KotlinBuiltIns.FQ_NAMES.extensionFunctionType || fqName == KotlinBuiltIns.FQ_NAMES.deprecatedExtensionAnnotation - } + val extension = annotations.any { annotation -> annotation.asSingleFqName() == KotlinBuiltIns.FQ_NAMES.extension } createFunctionTypeStub(parent, type, extension) return } 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 9c158cd19a9..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 -// Such strange name here needed to make completion prefix not intersecting with kotlin.ExtensionFunctionType -class ExctraClass +// 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/ExcludedJavaClass/somePackage/ExctraClass.java b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java index 91c938f629b..b1cda98a37b 100644 --- a/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java +++ b/idea/idea-completion/testData/basic/multifile/ExcludedJavaClass/somePackage/ExctraClass.java @@ -1,6 +1,6 @@ package somePackage; -// Such strange name here needed to make completion prefix not intersecting with kotlin.ExtensionFunctionType +// 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/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt b/idea/idea-completion/testData/basic/multifile/NotImportedExtensionFunction2/NotImportedExtensionFunction2.dependency.kt index 8f11ef2651d..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 @ExtensionFunctionType 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 d55d4b4675c..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 @ExtensionFunctionType Function1.helloFun3() { +fun @Extension Function1.helloFun3() { } -fun @ExtensionFunctionType Function1.helloFun4() { +fun @Extension Function1.helloFun4() { } fun Function1.helloFun5() { diff --git a/idea/testData/decompiler/decompiledText/FunctionTypes.expected.kt b/idea/testData/decompiler/decompiledText/FunctionTypes.expected.kt index d6ff09810bf..c4a07d88f6a 100644 --- a/idea/testData/decompiler/decompiledText/FunctionTypes.expected.kt +++ b/idea/testData/decompiler/decompiledText/FunctionTypes.expected.kt @@ -10,7 +10,7 @@ public final class FunctionTypes public constructor() { public final fun f3(f: kotlin.Int.(kotlin.Int) -> kotlin.Unit): kotlin.Unit { /* compiled code */ } - public final fun f4(f: kotlin.List<@kotlin.ExtensionFunctionType kotlin.Function1<*, *>>): kotlin.Unit { /* compiled code */ } + public final fun f4(f: kotlin.List<@kotlin.Extension kotlin.Function1<*, *>>): kotlin.Unit { /* compiled code */ } public final fun (A.(A) -> A)?.bar(): kotlin.Unit { /* compiled code */ } @@ -19,4 +19,4 @@ public final class FunctionTypes public constructor() { public final fun ((IP) -> R).compose2(f: (P1) -> IP): (P1) -> R { /* compiled code */ } public final fun (A.(A) -> A).foo(): kotlin.Unit { /* compiled code */ } -} +} \ No newline at end of file diff --git a/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt b/idea/testData/decompiler/decompiledText/FunctionTypes/FunctionTypes.kt index fba30f2e6d5..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: @ExtensionFunctionType Function2) { + public fun f3(f: @Extension Function2) { } - public fun f4(f: List<@ExtensionFunctionType 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 6d91e6fcdff..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: @ExtensionFunctionType Function2 - abstract val listExtStarFun: List<@ExtensionFunctionType 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/decompiler/stubBuilder/Types/Types.txt b/idea/testData/decompiler/stubBuilder/Types/Types.txt index 8fb79fb06a7..b3b7f3fac0f 100644 --- a/idea/testData/decompiler/stubBuilder/Types/Types.txt +++ b/idea/testData/decompiler/stubBuilder/Types/Types.txt @@ -252,13 +252,13 @@ PsiJetFileStubImpl[package=test] TYPE_ARGUMENT_LIST: TYPE_PROJECTION:[projectionKind=NONE] TYPE_REFERENCE: - ANNOTATION_ENTRY:[hasValueArguments=false, shortName=ExtensionFunctionType] + ANNOTATION_ENTRY:[hasValueArguments=false, shortName=Extension] CONSTRUCTOR_CALLEE: TYPE_REFERENCE: USER_TYPE:[isAbsoluteInRootPackage=false] USER_TYPE:[isAbsoluteInRootPackage=false] REFERENCE_EXPRESSION:[referencedName=kotlin] - REFERENCE_EXPRESSION:[referencedName=ExtensionFunctionType] + REFERENCE_EXPRESSION:[referencedName=Extension] USER_TYPE:[isAbsoluteInRootPackage=false] USER_TYPE:[isAbsoluteInRootPackage=false] REFERENCE_EXPRESSION:[referencedName=kotlin] diff --git a/idea/testData/unifier/equivalence/types/function0.kt b/idea/testData/unifier/equivalence/types/function0.kt index 3ba48fd2994..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: @ExtensionFunctionType Function1 = { "" } +val g: @Extension Function1 = { "" } diff --git a/idea/testData/unifier/equivalence/types/function1.kt b/idea/testData/unifier/equivalence/types/function1.kt index 80c3db320b5..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: @ExtensionFunctionType Function2 = { "" } +val h: @Extension Function2 = { "" } val i: (m: Int) -> kotlin.String = { "" } -val j: @ExtensionFunctionType 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 a75481cc86d..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 -@ExtensionFunctionType Function1 +@Extension Function1 diff --git a/idea/testData/unifier/equivalence/types/function2.kt b/idea/testData/unifier/equivalence/types/function2.kt index 2aaf150181b..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: @ExtensionFunctionType Function3 = { a, b -> "" } +val i: @Extension Function3 = { a, b -> "" } val j: (t: Any, u: Int) -> kotlin.String = { a, b -> "" } -val k: @ExtensionFunctionType 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 fd9b5475119..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 -@ExtensionFunctionType Function2 +@Extension Function2 diff --git a/spec-docs/function-types.md b/spec-docs/function-types.md index 2bc6ac06cd8..51e16c939a3 100644 --- a/spec-docs/function-types.md +++ b/spec-docs/function-types.md @@ -23,7 +23,7 @@ Kotlin lambdas are translated to subclasses of this abstract class, passing the ## Extension functions -Extension function type `T.(P) -> R` is now just a shorthand for `@ExtensionFunctionType Function2`. +Extension function type `T.(P) -> R` is now just a shorthand for `@Extension Function2`. `kotlin.extension` is a **type annotation** defined in built-ins. So effectively functions and extension functions now have the same type, which means that everything which takes a function will work with an extension function and vice versa. @@ -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 `@ExtensionFunctionType`). +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.