From c56f397f71e369bbbec13bced6fa10967f3d6af4 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Thu, 26 Jun 2014 18:40:40 +0400 Subject: [PATCH] Don't fail when "deprecated" doesn't have a message EA-57345 --- .../DeprecatedAnnotationVisitor.java | 26 +++++++++++++------ .../highlighter/deprecated/Invalid.kt | 11 ++++++++ .../HighlightingTestGenerated.java | 5 ++++ 3 files changed, 34 insertions(+), 8 deletions(-) create mode 100644 idea/testData/highlighter/deprecated/Invalid.kt 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");