diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java b/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java
index 7fceaa5ab24..3924ddde1d0 100644
--- a/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java
+++ b/idea/src/org/jetbrains/jet/plugin/highlighter/DeprecatedAnnotationVisitor.java
@@ -229,18 +229,28 @@ public class DeprecatedAnnotationVisitor extends AfterAnalysisHighlightingVisito
}
private static String composeTooltipString(@NotNull DeclarationDescriptor declarationDescriptor, @NotNull AnnotationDescriptor descriptor) {
- return "'" + getDescriptorString(declarationDescriptor) + "' is deprecated. " + getMessageFromAnnotationDescriptor(descriptor);
+ String fact = "'" + getDescriptorString(declarationDescriptor) + "' is deprecated.";
+ String message = getMessageFromAnnotationDescriptor(descriptor);
+ return message == null ? fact : fact + " " + message;
}
+ @Nullable
private static String getMessageFromAnnotationDescriptor(@NotNull AnnotationDescriptor descriptor) {
ClassDescriptor classDescriptor = TypeUtils.getClassDescriptor(descriptor.getType());
- assert classDescriptor != null : "ClassDescriptor for kotlin.deprecated mustn't be null";
- ValueParameterDescriptor parameter =
- DescriptorResolverUtils.getAnnotationParameterByName(DEFAULT_ANNOTATION_MEMBER_NAME, classDescriptor);
- assert parameter != null : "kotlin.deprecated must have one parameter called value";
- CompileTimeConstant> valueArgument = descriptor.getValueArgument(parameter);
- assert valueArgument != null : "kotlin.deprecated must have value argument";
- return (String) valueArgument.getValue();
+ if (classDescriptor != null) {
+ ValueParameterDescriptor parameter =
+ DescriptorResolverUtils.getAnnotationParameterByName(DEFAULT_ANNOTATION_MEMBER_NAME, classDescriptor);
+ if (parameter != null) {
+ CompileTimeConstant> valueArgument = descriptor.getValueArgument(parameter);
+ if (valueArgument != null) {
+ Object value = valueArgument.getValue();
+ if (value instanceof String) {
+ return String.valueOf(value);
+ }
+ }
+ }
+ }
+ return null;
}
private static String getDescriptorString(@NotNull DeclarationDescriptor descriptor) {
diff --git a/idea/testData/highlighter/deprecated/Invalid.kt b/idea/testData/highlighter/deprecated/Invalid.kt
new file mode 100644
index 00000000000..a8c2ed95adc
--- /dev/null
+++ b/idea/testData/highlighter/deprecated/Invalid.kt
@@ -0,0 +1,11 @@
+deprecated()
+fun foo() {}
+deprecated(false)
+fun boo() {}
+
+fun far() = foo()
+
+fun bar() = boo()
+
+// NO_CHECK_INFOS
+// NO_CHECK_WEAK_WARNINGS
diff --git a/idea/tests/org/jetbrains/jet/plugin/highlighter/HighlightingTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/highlighter/HighlightingTestGenerated.java
index 4341b8c45ad..0ef47a5fff0 100644
--- a/idea/tests/org/jetbrains/jet/plugin/highlighter/HighlightingTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/HighlightingTestGenerated.java
@@ -108,6 +108,11 @@ public class HighlightingTestGenerated extends AbstractHighlightingTest {
doTest("idea/testData/highlighter/deprecated/Inc.kt");
}
+ @TestMetadata("Invalid.kt")
+ public void testInvalid() throws Exception {
+ doTest("idea/testData/highlighter/deprecated/Invalid.kt");
+ }
+
@TestMetadata("Invoke.kt")
public void testInvoke() throws Exception {
doTest("idea/testData/highlighter/deprecated/Invoke.kt");