diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java index 4636db0bf2c..710bc0f9252 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java @@ -22,6 +22,8 @@ import com.intellij.psi.PsiModifierListOwner; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; +import org.jetbrains.jet.lang.resolve.constants.*; import org.jetbrains.jet.lang.resolve.java.data.ResolverClassData; import org.jetbrains.jet.lang.resolve.java.data.ResolverNamespaceData; import org.jetbrains.jet.lang.resolve.java.data.ResolverScopeData; @@ -142,4 +144,14 @@ public final class DescriptorResolverUtils { assert psiClassQualifiedName != null : "Reading java class with no qualified name"; return new FqNameUnsafe(psiClassQualifiedName + "." + getClassObjectName(psiClass.getName()).getName()); } + + @NotNull + public static AnnotationDescriptor getAnnotationDescriptorForJavaLangDeprecated(ClassDescriptor classDescriptor) { + AnnotationDescriptor annotationDescriptor = new AnnotationDescriptor(); + annotationDescriptor.setAnnotationType(classDescriptor.getDefaultType()); + ValueParameterDescriptor value = getValueParameterDescriptorForAnnotationParameter(Name.identifier("value"), classDescriptor); + assert value != null : "jet.deprecated must have one parameter called value"; + annotationDescriptor.setValueArgument(value, new StringValue("Deprecated in Java")); + return annotationDescriptor; + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java index 67de7758e96..21b8d5af578 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMap.java @@ -17,11 +17,13 @@ package org.jetbrains.jet.lang.resolve.java; import com.google.common.collect.*; +import com.intellij.psi.CommonClassNames; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; @@ -89,6 +91,15 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements return classDescriptorMap.get(fqName); } + @Nullable + public AnnotationDescriptor mapToAnnotationClass(@NotNull FqName fqName) { + ClassDescriptor classDescriptor = classDescriptorMap.get(fqName); + if (classDescriptor != null && fqName.getFqName().equals(CommonClassNames.JAVA_LANG_DEPRECATED)) { + return DescriptorResolverUtils.getAnnotationDescriptorForJavaLangDeprecated(classDescriptor); + } + return null; + } + private static FqName getJavaClassFqName(@NotNull Class javaClass) { return new FqName(javaClass.getName().replace('$', '.')); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java index f27986e17dd..14accdcbd2c 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinClassMapBuilder.java @@ -45,6 +45,7 @@ public abstract class JavaToKotlinClassMapBuilder { register(Comparable.class, kotlinBuiltIns.getComparable()); register(Enum.class, kotlinBuiltIns.getEnum()); register(Annotation.class, kotlinBuiltIns.getAnnotation()); + register(Deprecated.class, kotlinBuiltIns.getDeprecatedAnnotation(), Direction.JAVA_TO_KOTLIN); register(Iterable.class, kotlinBuiltIns.getIterable(), kotlinBuiltIns.getMutableIterable()); register(Iterator.class, kotlinBuiltIns.getIterator(), kotlinBuiltIns.getMutableIterator()); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java index 89bb68ad935..efbf7f362d7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaAnnotationResolver.java @@ -24,10 +24,8 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; -import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils; -import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; -import org.jetbrains.jet.lang.resolve.java.JvmAbi; +import org.jetbrains.jet.lang.resolve.constants.*; +import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; @@ -88,6 +86,12 @@ public final class JavaAnnotationResolver { } FqName annotationFqName = new FqName(qname); + + AnnotationDescriptor mappedClassDescriptor = JavaToKotlinClassMap.getInstance().mapToAnnotationClass(annotationFqName); + if (mappedClassDescriptor != null) { + return mappedClassDescriptor; + } + final ClassDescriptor annotationClass = classResolver.resolveClass(annotationFqName, DescriptorSearchRule.INCLUDE_KOTLIN, postponedTasks); if (annotationClass == null) { diff --git a/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.kt b/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.kt index e8f8363234b..84a5ec8e136 100644 --- a/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.kt +++ b/compiler/testData/diagnostics/tests/annotations/AmbigiousAnnotationConstructor.kt @@ -2,4 +2,4 @@ import java.util.ArrayList ArrayList(1, 1) fun b() {} Xoo(x) fun c() {} -Deprecated(x) fun a() {} +Deprecated(x) fun a() {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.kt b/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.kt index f066cbb9569..b94d8d3116c 100644 --- a/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.kt +++ b/compiler/testData/diagnostics/tests/annotations/AnnotatedConstructorParams.kt @@ -1,15 +1,15 @@ package a -import java.lang.Deprecated as deprecated +import java.lang.Deprecated as deprecated import java.lang.SuppressWarnings as suppresswarnings -deprecated suppresswarnings val s: String = ""; +deprecated suppresswarnings val s: String = ""; -deprecated suppresswarnings fun main(args : Array) { +deprecated suppresswarnings fun main(args : Array) { System.out.println("Hello, world!") } -class Test(deprecated val s: String, +class Test(deprecated val s: String, suppresswarnings val x : Int) {} diff --git a/compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt b/compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt index fd1ba79ce0a..93d889cb476 100644 --- a/compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt +++ b/compiler/testData/diagnostics/tests/annotations/AnnotationsForClasses.kt @@ -1,2 +1,2 @@ -annotation [java.lang.Deprecated] class my -annotation Deprecated class my1 +annotation [java.lang.Deprecated] class my +annotation Deprecated class my1 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/Deprecated.kt b/compiler/testData/diagnostics/tests/annotations/Deprecated.kt index 4cfe9c3b74d..670566ba34c 100644 --- a/compiler/testData/diagnostics/tests/annotations/Deprecated.kt +++ b/compiler/testData/diagnostics/tests/annotations/Deprecated.kt @@ -1,6 +1,5 @@ +import java.lang.Deprecated as deprecated -import java.lang.Deprecated as deprecated +Deprecated fun foo() {} -Deprecated fun foo() {} - -deprecated fun foo1() {} +deprecated fun foo1() {} diff --git a/compiler/testData/loadJava/annotation/AnnotatedMethod.kt b/compiler/testData/loadJava/annotation/AnnotatedMethod.kt index d0c8e1d8520..4f721e702e1 100644 --- a/compiler/testData/loadJava/annotation/AnnotatedMethod.kt +++ b/compiler/testData/loadJava/annotation/AnnotatedMethod.kt @@ -1,5 +1,5 @@ package test public open class AnnotatedMethod() : java.lang.Object() { - public open Deprecated fun f(): Unit { } + public open deprecated("Deprecated in Java") fun f(): Unit { } } diff --git a/compiler/testData/loadJava/annotation/AnnotatedMethod.txt b/compiler/testData/loadJava/annotation/AnnotatedMethod.txt index a3a02577822..1b366a43fbb 100644 --- a/compiler/testData/loadJava/annotation/AnnotatedMethod.txt +++ b/compiler/testData/loadJava/annotation/AnnotatedMethod.txt @@ -2,5 +2,5 @@ namespace test public open class test.AnnotatedMethod : java.lang.Object { public final /*constructor*/ fun (): test.AnnotatedMethod - public open java.lang.Deprecated() fun f(): jet.Tuple0 + public open jet.deprecated(value = "Deprecated in Java") fun f(): jet.Tuple0 } diff --git a/compiler/testData/writeFlags/class/deprecatedFlag/class.kt b/compiler/testData/writeFlags/class/deprecatedFlag/class.kt index b08299e16d9..2dc9ebebba1 100644 --- a/compiler/testData/writeFlags/class/deprecatedFlag/class.kt +++ b/compiler/testData/writeFlags/class/deprecatedFlag/class.kt @@ -1,4 +1,4 @@ -Deprecated class MyClass() { +deprecated("") class MyClass() { } // TESTED_OBJECT_KIND: class diff --git a/compiler/testData/writeFlags/class/deprecatedFlag/classObject.kt b/compiler/testData/writeFlags/class/deprecatedFlag/classObject.kt index 21fb89c3a49..b96336eca80 100644 --- a/compiler/testData/writeFlags/class/deprecatedFlag/classObject.kt +++ b/compiler/testData/writeFlags/class/deprecatedFlag/classObject.kt @@ -1,5 +1,5 @@ class MyClass { - Deprecated class object { + deprecated("") class object { } } diff --git a/compiler/testData/writeFlags/class/deprecatedFlag/enumClass.kt b/compiler/testData/writeFlags/class/deprecatedFlag/enumClass.kt index fc09899c85f..3159fe1377b 100644 --- a/compiler/testData/writeFlags/class/deprecatedFlag/enumClass.kt +++ b/compiler/testData/writeFlags/class/deprecatedFlag/enumClass.kt @@ -1,4 +1,4 @@ -Deprecated enum class MyEnum { +deprecated("") enum class MyEnum { FIRST } diff --git a/compiler/testData/writeFlags/class/deprecatedFlag/innerClass.kt b/compiler/testData/writeFlags/class/deprecatedFlag/innerClass.kt index 877e6cf85e1..cdd4b3c61d9 100644 --- a/compiler/testData/writeFlags/class/deprecatedFlag/innerClass.kt +++ b/compiler/testData/writeFlags/class/deprecatedFlag/innerClass.kt @@ -1,5 +1,5 @@ class MyClass() { - Deprecated public class MyInnerClass() {} + deprecated("") public class MyInnerClass() {} } // TESTED_OBJECT_KIND: class diff --git a/compiler/testData/writeFlags/class/deprecatedFlag/trait.kt b/compiler/testData/writeFlags/class/deprecatedFlag/trait.kt index ec02b0133d5..10fb0bae3c3 100644 --- a/compiler/testData/writeFlags/class/deprecatedFlag/trait.kt +++ b/compiler/testData/writeFlags/class/deprecatedFlag/trait.kt @@ -1,4 +1,4 @@ -Deprecated public trait MyTrait { +deprecated("") public trait MyTrait { } // TESTED_OBJECT_KIND: class diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/emptyGetter.kt b/compiler/testData/writeFlags/function/deprecatedFlag/emptyGetter.kt index d0c76e66993..f7fd347109f 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/emptyGetter.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/emptyGetter.kt @@ -1,6 +1,6 @@ class MyClass() { val test = "" - [Deprecated] get + [deprecated("")] get } // TESTED_OBJECT_KIND: function diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/emptySetter.kt b/compiler/testData/writeFlags/function/deprecatedFlag/emptySetter.kt index 71d37d757f9..c6f48c26895 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/emptySetter.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/emptySetter.kt @@ -1,6 +1,6 @@ class MyClass() { var test = "" - [Deprecated] set + [deprecated("")] set } // TESTED_OBJECT_KIND: function diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt b/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt index f1621c02cd0..46fe7bb3e85 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/extentionFun.kt @@ -1,6 +1,6 @@ class MyClass() { } -Deprecated fun MyClass.test() {} +deprecated("") fun MyClass.test() {} // TESTED_OBJECT_KIND: function // TESTED_OBJECTS: namespace, test diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/funInClass.kt b/compiler/testData/writeFlags/function/deprecatedFlag/funInClass.kt index 0f1a779655e..81f38dd63ea 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/funInClass.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/funInClass.kt @@ -1,5 +1,5 @@ class MyClass() { - Deprecated fun test() {} + deprecated("") fun test() {} } // TESTED_OBJECT_KIND: function diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/funInClassObject.kt b/compiler/testData/writeFlags/function/deprecatedFlag/funInClassObject.kt index 0d944b1cef6..1e1e2bdf697 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/funInClassObject.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/funInClassObject.kt @@ -1,6 +1,6 @@ class MyClass() { class object { - Deprecated fun test() {} + deprecated("") fun test() {} } } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/getter.kt b/compiler/testData/writeFlags/function/deprecatedFlag/getter.kt index 8f5d7d1ca1a..7cbc220259c 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/getter.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/getter.kt @@ -1,6 +1,6 @@ class MyClass() { val test: Int - [Deprecated] get(): Int { return 0 } + [deprecated("")] get(): Int { return 0 } } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/getterAnnotationOnProperty.kt b/compiler/testData/writeFlags/function/deprecatedFlag/getterAnnotationOnProperty.kt index 910cddb64b8..c9124acd7f1 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/getterAnnotationOnProperty.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/getterAnnotationOnProperty.kt @@ -1,5 +1,5 @@ class MyClass() { - Deprecated val test = "" + deprecated("") val test = "" } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/getterForPropertyInConstructor.kt b/compiler/testData/writeFlags/function/deprecatedFlag/getterForPropertyInConstructor.kt index 10163646a9f..f4c2ee8bf5c 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/getterForPropertyInConstructor.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/getterForPropertyInConstructor.kt @@ -1,4 +1,4 @@ -class MyClass(Deprecated val test: Int) {} +class MyClass(deprecated("") val test: Int) {} // TESTED_OBJECT_KIND: function // TESTED_OBJECTS: MyClass, getTest diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/setter.kt b/compiler/testData/writeFlags/function/deprecatedFlag/setter.kt index fc69bdd6998..efdc253d531 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/setter.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/setter.kt @@ -1,6 +1,6 @@ class MyClass() { var test = 1 - [Deprecated] set(i: Int) { test = i } + [deprecated("")] set(i: Int) { test = i } } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/setterAnnotationOnProperty.kt b/compiler/testData/writeFlags/function/deprecatedFlag/setterAnnotationOnProperty.kt index 005640d3aea..7347f405c55 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/setterAnnotationOnProperty.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/setterAnnotationOnProperty.kt @@ -1,5 +1,5 @@ class MyClass() { - Deprecated var test = "" + deprecated("") var test = "" } diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/setterForPropertyInConstructor.kt b/compiler/testData/writeFlags/function/deprecatedFlag/setterForPropertyInConstructor.kt index 14f8a2ba80d..33b889fc8e8 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/setterForPropertyInConstructor.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/setterForPropertyInConstructor.kt @@ -1,4 +1,4 @@ -class MyClass(Deprecated var test: Int) {} +class MyClass(deprecated("") var test: Int) {} // TESTED_OBJECT_KIND: function diff --git a/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt b/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt index 43cf03193e3..21e4dad2822 100644 --- a/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt +++ b/compiler/testData/writeFlags/function/deprecatedFlag/topLevelFun.kt @@ -1,4 +1,4 @@ -Deprecated fun test() {} +deprecated("") fun test() {} // TESTED_OBJECT_KIND: function // TESTED_OBJECTS: namespace, test diff --git a/compiler/testData/writeFlags/property/deprecatedFlag/propertyInClass.kt b/compiler/testData/writeFlags/property/deprecatedFlag/propertyInClass.kt index 093ea0167b9..a2c1038a424 100644 --- a/compiler/testData/writeFlags/property/deprecatedFlag/propertyInClass.kt +++ b/compiler/testData/writeFlags/property/deprecatedFlag/propertyInClass.kt @@ -1,5 +1,5 @@ class MyClass() { - Deprecated public val test: Int = 0 + deprecated("") public val test: Int = 0 } diff --git a/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt b/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt index 7ee403f74fe..39623ba89b6 100644 --- a/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt +++ b/compiler/testData/writeFlags/property/deprecatedFlag/topLevelProperty.kt @@ -1,4 +1,4 @@ -Deprecated val test: Int = 0 +deprecated("") val test: Int = 0 // TESTED_OBJECT_KIND: property // TESTED_OBJECTS: namespace, test diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java index eeb899f32c5..d3b497d3bee 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java @@ -29,7 +29,6 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.calls.ResolvedCall; import org.jetbrains.jet.lang.resolve.calls.VariableAsFunctionResolvedCall; import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; @@ -38,7 +37,6 @@ import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.resolve.DescriptorRenderer; public class DeprecatedAnnotationVisitor extends AfterAnalysisHighlightingVisitor { @@ -206,11 +204,11 @@ public class DeprecatedAnnotationVisitor extends AfterAnalysisHighlightingVisito AnnotationDescriptor deprecated = getDeprecated(descriptor); if (deprecated != null) { if (isWarning) { - holder.createInfoAnnotation(element, "'" + renderName(descriptor) + "' is deprecated") + holder.createInfoAnnotation(element, getMessage(deprecated)) .setTextAttributes(CodeInsightColors.WARNINGS_ATTRIBUTES); } else { - holder.createInfoAnnotation(element, "'" + renderName(descriptor) + "' is deprecated") + holder.createInfoAnnotation(element, getMessage(deprecated)) .setTextAttributes(CodeInsightColors.DEPRECATED_ATTRIBUTES); } return true; @@ -230,30 +228,14 @@ public class DeprecatedAnnotationVisitor extends AfterAnalysisHighlightingVisito return null; } - private static String renderName(DeclarationDescriptor descriptor) { - if (descriptor instanceof ClassDescriptor) { - return DescriptorUtils.getFQName(descriptor).getFqName(); - } - else if (descriptor instanceof ConstructorDescriptor) { - DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); - assert containingDeclaration != null; - return "constructor for " + containingDeclaration.getName(); - } - else if (descriptor instanceof PropertyGetterDescriptor) { - return "getter for " + ((PropertyGetterDescriptor) descriptor).getCorrespondingProperty().getName(); - } - else if (descriptor instanceof PropertySetterDescriptor) { - return "setter for " + ((PropertySetterDescriptor) descriptor).getCorrespondingProperty().getName(); - } - else if (descriptor instanceof PropertyDescriptor) { - if (((PropertyDescriptor) descriptor).isVar()) { - return "var " + descriptor.getName(); - } - return "val " + descriptor.getName(); - } - else if (descriptor instanceof FunctionDescriptor) { - return "fun " + descriptor.getName() + DescriptorRenderer.TEXT.renderFunctionParameters((FunctionDescriptor) descriptor); - } - return DescriptorRenderer.TEXT.render(descriptor); + private static String getMessage(AnnotationDescriptor descriptor) { + ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(descriptor.getType()); + assert classDescriptor != null : "ClassDescriptor for jet.deprecated mustn't be null"; + ValueParameterDescriptor parameterDescriptor = + DescriptorResolverUtils.getValueParameterDescriptorForAnnotationParameter(Name.identifier("value"), classDescriptor); + assert parameterDescriptor != null : "jet.deprecated must have one parameter called value"; + CompileTimeConstant valueArgument = descriptor.getValueArgument(parameterDescriptor); + assert valueArgument != null : "jet.deprecated must have value argument"; + return (String) valueArgument.getValue(); } } diff --git a/idea/testData/highlighter/deprecated/Class.kt b/idea/testData/highlighter/deprecated/Class.kt index a6eb2ee529d..cd1d2d0f57f 100644 --- a/idea/testData/highlighter/deprecated/Class.kt +++ b/idea/testData/highlighter/deprecated/Class.kt @@ -2,7 +2,7 @@ package test import java.util.ArrayList -Deprecated open class MyClass {} +deprecated("'test.MyClass' is deprecated") open class MyClass {} fun test() { val a : MyClass? = null diff --git a/idea/testData/highlighter/deprecated/ClassObject.kt b/idea/testData/highlighter/deprecated/ClassObject.kt index c59c82e5590..538abdba682 100644 --- a/idea/testData/highlighter/deprecated/ClassObject.kt +++ b/idea/testData/highlighter/deprecated/ClassObject.kt @@ -7,13 +7,13 @@ fun test() { } class MyClass(): MyTrait { - Deprecated class object { + deprecated("'MyClass.' is deprecated") class object { val test: String = "" } } trait MyTrait { - Deprecated class object { + deprecated("'MyTrait.' is deprecated") class object { val test: String = "" } } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/Function.kt b/idea/testData/highlighter/deprecated/Function.kt index 9311475e5b9..a4ad1ee9744 100644 --- a/idea/testData/highlighter/deprecated/Function.kt +++ b/idea/testData/highlighter/deprecated/Function.kt @@ -6,13 +6,13 @@ fun test() { test4(1, 2) } -Deprecated fun test1() { } -Deprecated fun test4(x: Int, y: Int) { } +deprecated("'fun test1()' is deprecated") fun test1() { } +deprecated("'fun test4(x : jet.Int, y : jet.Int)' is deprecated") fun test4(x: Int, y: Int) { } class MyClass() { - Deprecated fun test2() {} + deprecated("'fun test2()' is deprecated") fun test2() {} class object { - Deprecated fun test3() {} + deprecated("'fun test3()' is deprecated") fun test3() {} } } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/Get.kt b/idea/testData/highlighter/deprecated/Get.kt index 5a7a9b66c82..0168b48102f 100644 --- a/idea/testData/highlighter/deprecated/Get.kt +++ b/idea/testData/highlighter/deprecated/Get.kt @@ -1,6 +1,6 @@ class MyClass {} -Deprecated fun MyClass.get(i: MyClass): MyClass { return MyClass() } +deprecated("'fun get(i : MyClass)' is deprecated") fun MyClass.get(i: MyClass): MyClass { return MyClass() } fun test() { val x1 = MyClass() diff --git a/idea/testData/highlighter/deprecated/Getter.kt b/idea/testData/highlighter/deprecated/Getter.kt index 44a4a2dea8f..14a54a42812 100644 --- a/idea/testData/highlighter/deprecated/Getter.kt +++ b/idea/testData/highlighter/deprecated/Getter.kt @@ -9,11 +9,11 @@ fun test() { class MyClass() { public val test1: String = "" - [Deprecated] get + [deprecated("'getter for test1' is deprecated")] get public var test2: String = "" - [Deprecated] get + [deprecated("'getter for test2' is deprecated")] get - Deprecated public val test3: String = "" - [Deprecated] get + deprecated("'val test3' is deprecated") public val test3: String = "" + [deprecated("'getter for test3' is deprecated")] get } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/Inc.kt b/idea/testData/highlighter/deprecated/Inc.kt index 01d05529059..5062a8334a0 100644 --- a/idea/testData/highlighter/deprecated/Inc.kt +++ b/idea/testData/highlighter/deprecated/Inc.kt @@ -1,6 +1,6 @@ class MyClass {} -Deprecated fun MyClass.inc(): MyClass { return MyClass() } +deprecated("'fun inc()' is deprecated") fun MyClass.inc(): MyClass { return MyClass() } fun test() { var x3 = MyClass() diff --git a/idea/testData/highlighter/deprecated/Invoke.kt b/idea/testData/highlighter/deprecated/Invoke.kt index 57df6a96f8a..31ee74713c5 100644 --- a/idea/testData/highlighter/deprecated/Invoke.kt +++ b/idea/testData/highlighter/deprecated/Invoke.kt @@ -1,6 +1,6 @@ class MyRunnable() {} -Deprecated fun MyRunnable.invoke() { +deprecated("'fun invoke()' is deprecated") fun MyRunnable.invoke() { } fun test() { diff --git a/idea/testData/highlighter/deprecated/Operation.kt b/idea/testData/highlighter/deprecated/Operation.kt index ba79ef2f511..34e40124ab3 100644 --- a/idea/testData/highlighter/deprecated/Operation.kt +++ b/idea/testData/highlighter/deprecated/Operation.kt @@ -1,18 +1,18 @@ class MyClass {} -Deprecated fun MyClass.minus(i: MyClass) { } -Deprecated fun MyClass.div(i: MyClass) { } -Deprecated fun MyClass.times(i: MyClass) { } +deprecated("'fun minus(i : MyClass)' is deprecated") fun MyClass.minus(i: MyClass) { } +deprecated("'fun div(i : MyClass)' is deprecated") fun MyClass.div(i: MyClass) { } +deprecated("'fun times(i : MyClass)' is deprecated") fun MyClass.times(i: MyClass) { } -Deprecated fun MyClass.not() { } -Deprecated fun MyClass.plus() { } +deprecated("'fun not()' is deprecated") fun MyClass.not() { } +deprecated("'fun plus()' is deprecated") fun MyClass.plus() { } -Deprecated fun MyClass.contains(i: MyClass): Boolean { return false } +deprecated("'fun contains(i : MyClass)' is deprecated") fun MyClass.contains(i: MyClass): Boolean { return false } -Deprecated fun MyClass.plusAssign(i: MyClass) { } +deprecated("'fun plusAssign(i : MyClass)' is deprecated") fun MyClass.plusAssign(i: MyClass) { } -Deprecated fun MyClass.equals(i: Any?): Boolean { return false } -Deprecated fun MyClass.compareTo(i: MyClass): Int { return 0 } +deprecated("'fun equals(i : jet.Any?)' is deprecated") fun MyClass.equals(i: Any?): Boolean { return false } +deprecated("'fun compareTo(i : MyClass)' is deprecated") fun MyClass.compareTo(i: MyClass): Int { return 0 } fun test() { val x1 = MyClass() diff --git a/idea/testData/highlighter/deprecated/Property.kt b/idea/testData/highlighter/deprecated/Property.kt index 0dc1c4a66a1..c8aadbf1b75 100644 --- a/idea/testData/highlighter/deprecated/Property.kt +++ b/idea/testData/highlighter/deprecated/Property.kt @@ -8,15 +8,15 @@ fun test() { MyClass.test6 } -Deprecated val test1: String = "" -Deprecated var test4: String = "" +deprecated("'val test1' is deprecated") val test1: String = "" +deprecated("'var test4' is deprecated") var test4: String = "" class MyClass() { - Deprecated val test2: String = "" - Deprecated var test5: String = "" + deprecated("'val test2' is deprecated") val test2: String = "" + deprecated("'var test5' is deprecated") var test5: String = "" class object { - Deprecated val test3: String = "" - Deprecated var test6: String = "" + deprecated("'val test3' is deprecated") val test3: String = "" + deprecated("'var test6' is deprecated") var test6: String = "" } } \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/RangeTo.kt b/idea/testData/highlighter/deprecated/RangeTo.kt index 7b8c19247a9..1316613a287 100644 --- a/idea/testData/highlighter/deprecated/RangeTo.kt +++ b/idea/testData/highlighter/deprecated/RangeTo.kt @@ -1,6 +1,6 @@ class MyClass { } -Deprecated fun MyClass.rangeTo(i: MyClass): IntIterator { +deprecated("'fun rangeTo(i : MyClass)' is deprecated") fun MyClass.rangeTo(i: MyClass): IntIterator { throw Exception() } diff --git a/idea/testData/highlighter/deprecated/Setter.kt b/idea/testData/highlighter/deprecated/Setter.kt index 0c8d9b52701..8c9ab715a07 100644 --- a/idea/testData/highlighter/deprecated/Setter.kt +++ b/idea/testData/highlighter/deprecated/Setter.kt @@ -19,8 +19,8 @@ fun test() { class MyClass() { public var test1: Int = 0 - [Deprecated] set + [deprecated("'setter for test1' is deprecated")] set } public var test2: Int = 0 - [Deprecated] set \ No newline at end of file + [deprecated("'setter for test2' is deprecated")] set \ No newline at end of file diff --git a/idea/testData/highlighter/deprecated/Trait.kt b/idea/testData/highlighter/deprecated/Trait.kt index f4f4362ac1f..3e3ec3c6ea0 100644 --- a/idea/testData/highlighter/deprecated/Trait.kt +++ b/idea/testData/highlighter/deprecated/Trait.kt @@ -1,4 +1,4 @@ -Deprecated trait MyTrait { } +deprecated("'MyTrait' is deprecated") trait MyTrait { } fun test() { val a: MyTrait? = null