From 04483eb826e2cf4c2fa6b91d34506c550fc0a257 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Wed, 9 Sep 2015 15:56:42 +0300 Subject: [PATCH] Report custom diagnostic instead of symbol deprecation For annotations that should be replaced with modifiers --- .../jetbrains/kotlin/resolve/AnnotationChecker.kt | 9 +++------ .../annotations/migration/escapedModifiers.kt | 4 ++++ .../annotations/migration/escapedModifiers.txt | 2 ++ core/builtins/src/kotlin/Annotations.kt | 1 - core/builtins/src/kotlin/Inline.kt | 1 - .../descriptors/annotations/annotationUtil.kt | 14 ++++++++++++++ .../stdlib/src/kotlin/jvm/JvmFlagAnnotations.kt | 1 - 7 files changed, 23 insertions(+), 9 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt index d70b87c5cd4..ddfda380caa 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/AnnotationChecker.kt @@ -18,9 +18,7 @@ package org.jetbrains.kotlin.resolve import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.ClassDescriptor -import org.jetbrains.kotlin.descriptors.annotations.ANNOTATION_MODIFIERS_FQ_NAMES -import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor -import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget +import org.jetbrains.kotlin.descriptors.annotations.* import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getAnnotationEntries @@ -28,7 +26,6 @@ import org.jetbrains.kotlin.resolve.constants.ArrayValue import org.jetbrains.kotlin.resolve.constants.EnumValue import org.jetbrains.kotlin.types.JetType import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget import org.jetbrains.kotlin.resolve.descriptorUtil.isRepeatableAnnotation import org.jetbrains.kotlin.descriptors.annotations.KotlinTarget.* import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe @@ -73,8 +70,8 @@ public class AnnotationChecker(private val additionalCheckers: Iterable = null!! kotlin.data class Data myNative fun nativeFun(): Int + +@tailRecursive fun tailFun(): Int = tailFun() + +inline fun inlineFun(@inlineOptions(InlineOption.ONLY_LOCAL_RETURN) block: () -> Int) {} diff --git a/compiler/testData/diagnostics/tests/annotations/migration/escapedModifiers.txt b/compiler/testData/diagnostics/tests/annotations/migration/escapedModifiers.txt index 9aa5928cf09..6bcd3d2e985 100644 --- a/compiler/testData/diagnostics/tests/annotations/migration/escapedModifiers.txt +++ b/compiler/testData/diagnostics/tests/annotations/migration/escapedModifiers.txt @@ -3,7 +3,9 @@ package kotlin.inline() private fun bar(/*0*/ block: () -> kotlin.Int): kotlin.Int public fun bar2(): kotlin.Array kotlin.inline() public fun baz(): kotlin.Unit +kotlin.inline() public fun inlineFun(/*0*/ kotlin.inlineOptions(value = {InlineOption.ONLY_LOCAL_RETURN}) block: () -> kotlin.Int): kotlin.Unit kotlin.external() public fun nativeFun(): kotlin.Int +kotlin.tailRecursive() public fun tailFun(): kotlin.Int public open class A { private constructor A(/*0*/ prop: kotlin.Int) diff --git a/core/builtins/src/kotlin/Annotations.kt b/core/builtins/src/kotlin/Annotations.kt index 3a92a315e52..16d2db7a346 100644 --- a/core/builtins/src/kotlin/Annotations.kt +++ b/core/builtins/src/kotlin/Annotations.kt @@ -82,7 +82,6 @@ public annotation class Suppress(vararg val names: String) * backend. */ @Target(FUNCTION) -@Deprecated("Use kotlin.tailrec instead", ReplaceWith("kotlin.tailrec")) @Retention(SOURCE) public annotation class tailRecursive diff --git a/core/builtins/src/kotlin/Inline.kt b/core/builtins/src/kotlin/Inline.kt index d36f5d14a83..a9a2cc069af 100644 --- a/core/builtins/src/kotlin/Inline.kt +++ b/core/builtins/src/kotlin/Inline.kt @@ -50,7 +50,6 @@ public annotation class inline @Target(AnnotationTarget.VALUE_PARAMETER) @Retention(AnnotationRetention.RUNTIME) @MustBeDocumented -@Deprecated("Use 'crossinline' modifier instead of 'inlineOptions(InlineOption.ONLY_LOCAL_RETURN)'") public annotation class inlineOptions(vararg val value: InlineOption) /** diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt index e11eda49c12..69f4ce92383 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/annotations/annotationUtil.kt @@ -18,6 +18,20 @@ package org.jetbrains.kotlin.descriptors.annotations import org.jetbrains.kotlin.name.FqName +val ADDITIONAL_ANNOTATIONS_MAP: Map = mapOf( + FqName("kotlin.tailRecursive") to "tailrec", + FqName("kotlin.jvm.native") to "external", + FqName("kotlin.inlineOptions") to "crossinline" +) + // Please synchronize this set with JetTokens.ANNOTATION_MODIFIERS_KEYWORDS_ARRAY public val ANNOTATION_MODIFIERS_FQ_NAMES: Set = arrayOf("data", "inline", "noinline", "tailrec", "external", "annotation.annotation", "crossinline").map { FqName("kotlin.$it") }.toSet() + +public val ANNOTATIONS_SHOULD_BE_REPLACED_WITH_MODIFIERS_FQ_NAMES: Set = + ANNOTATION_MODIFIERS_FQ_NAMES + ADDITIONAL_ANNOTATIONS_MAP.keySet() + + +public val ANNOTATION_MODIFIERS_MAP: Map = + ANNOTATION_MODIFIERS_FQ_NAMES.map { it to it.shortName().asString() }.toMap() + + ADDITIONAL_ANNOTATIONS_MAP diff --git a/libraries/stdlib/src/kotlin/jvm/JvmFlagAnnotations.kt b/libraries/stdlib/src/kotlin/jvm/JvmFlagAnnotations.kt index 2d9994f45cb..093d7272fac 100644 --- a/libraries/stdlib/src/kotlin/jvm/JvmFlagAnnotations.kt +++ b/libraries/stdlib/src/kotlin/jvm/JvmFlagAnnotations.kt @@ -63,5 +63,4 @@ public annotation class Synchronized @Target(FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER) @Retention(AnnotationRetention.SOURCE) @MustBeDocumented -@deprecated("Use kotlin.external instead", ReplaceWith("kotlin.external")) public annotation class native