Report custom diagnostic instead of symbol deprecation
For annotations that should be replaced with modifiers
This commit is contained in:
@@ -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<Addition
|
||||
val descriptor = trace.get(BindingContext.ANNOTATION, entry) ?: continue
|
||||
val classDescriptor = TypeUtils.getClassDescriptor(descriptor.type) ?: continue
|
||||
|
||||
if (classDescriptor.fqNameSafe in ANNOTATION_MODIFIERS_FQ_NAMES) {
|
||||
trace.report(Errors.DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER.on(entry, classDescriptor.name.toString()))
|
||||
if (classDescriptor.fqNameSafe in ANNOTATIONS_SHOULD_BE_REPLACED_WITH_MODIFIERS_FQ_NAMES) {
|
||||
trace.report(Errors.DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER.on(entry, ANNOTATION_MODIFIERS_MAP[classDescriptor.fqNameSafe]!!))
|
||||
}
|
||||
else {
|
||||
if (!entry.hasAtSymbolOrInList()) {
|
||||
|
||||
@@ -25,3 +25,7 @@ fun bar2(): Array<Q> = null!!
|
||||
<!DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER!>kotlin.data<!> class Data
|
||||
|
||||
<!DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER!>myNative<!> fun nativeFun(): Int
|
||||
|
||||
<!DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER!>@tailRecursive<!> fun tailFun(): Int = tailFun()
|
||||
|
||||
inline fun inlineFun(<!DEPRECATED_ANNOTATION_THAT_BECOMES_MODIFIER!>@inlineOptions(InlineOption.ONLY_LOCAL_RETURN)<!> block: () -> Int) {}
|
||||
|
||||
+2
@@ -3,7 +3,9 @@ package
|
||||
kotlin.inline() private fun bar(/*0*/ block: () -> kotlin.Int): kotlin.Int
|
||||
public fun bar2(): kotlin.Array<Q>
|
||||
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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
/**
|
||||
|
||||
@@ -18,6 +18,20 @@ package org.jetbrains.kotlin.descriptors.annotations
|
||||
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
|
||||
val ADDITIONAL_ANNOTATIONS_MAP: Map<FqName, String> = 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<FqName> =
|
||||
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<FqName> =
|
||||
ANNOTATION_MODIFIERS_FQ_NAMES + ADDITIONAL_ANNOTATIONS_MAP.keySet()
|
||||
|
||||
|
||||
public val ANNOTATION_MODIFIERS_MAP: Map<FqName, String> =
|
||||
ANNOTATION_MODIFIERS_FQ_NAMES.map { it to it.shortName().asString() }.toMap() +
|
||||
ADDITIONAL_ANNOTATIONS_MAP
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user