From de11d571ef5cb0e5f69d8f74fbee31c04672c1b0 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Tue, 10 Nov 2015 22:19:40 +0300 Subject: [PATCH] KT-9928 Replacement not offered for a usage of symbol deprecated with DeprecationLevel.ERROR #KT-9928 Fixed --- .../kotlin/idea/inspections/KotlinCleanupInspection.kt | 1 + .../jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt | 1 + .../quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt | 3 ++- .../quickfix/deprecatedSymbolUsage/deprecationLevel.kt | 9 +++++++++ .../deprecatedSymbolUsage/deprecationLevel.kt.after | 9 +++++++++ .../kotlin/idea/quickfix/QuickFixTestGenerated.java | 6 ++++++ 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt create mode 100644 idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt.after diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt index d8d23257153..32f6aacff1e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt @@ -89,6 +89,7 @@ public class KotlinCleanupInspection(): LocalInspectionTool(), CleanupLocalInspe Errors.USELESS_ELVIS, ErrorsJvm.POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION, Errors.DEPRECATION, + Errors.DEPRECATION_ERROR, Errors.NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION, Errors.OPERATOR_MODIFIER_REQUIRED, Errors.DEPRECATED_UNARY_PLUS_MINUS, diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt index 937ca1ac21a..c74d8a0ef33 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/QuickFixRegistrar.kt @@ -315,6 +315,7 @@ public class QuickFixRegistrar : QuickFixContributor { ReplaceObsoleteLabelSyntaxFix.createWholeProjectFixFactory()) DEPRECATION.registerFactory(DeprecatedSymbolUsageFix, DeprecatedSymbolUsageInWholeProjectFix) + DEPRECATION_ERROR.registerFactory(DeprecatedSymbolUsageFix, DeprecatedSymbolUsageInWholeProjectFix) POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION.registerFactory(ReplaceJavaAnnotationPositionedArgumentsFix) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt index a3960f2d868..9576cc40cb3 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFixBase.kt @@ -23,6 +23,7 @@ import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.diagnostics.Diagnostic +import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.idea.core.OptionalParametersHelper import org.jetbrains.kotlin.idea.quickfix.KotlinQuickFixAction @@ -100,7 +101,7 @@ public abstract class DeprecatedSymbolUsageFixBase( else null) ?: return null - val descriptor = Errors.DEPRECATION.cast(deprecatedDiagnostic).a + val descriptor = DiagnosticFactory.cast(deprecatedDiagnostic, Errors.DEPRECATION, Errors.DEPRECATION_ERROR).a val replacement = DeprecatedSymbolUsageFixBase.fetchReplaceWithPattern(descriptor, nameExpression.project) ?: return null return Data(nameExpression, replacement, descriptor) } diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt b/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt new file mode 100644 index 00000000000..ce8c54c03d2 --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt @@ -0,0 +1,9 @@ +// "Replace with 'b()'" "true" +@Deprecated("b!", ReplaceWith("b()"), DeprecationLevel.ERROR) +fun a() {} + +fun b() {} + +fun usage() { + a() +} \ No newline at end of file diff --git a/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt.after b/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt.after new file mode 100644 index 00000000000..5fde49b864a --- /dev/null +++ b/idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt.after @@ -0,0 +1,9 @@ +// "Replace with 'b()'" "true" +@Deprecated("b!", ReplaceWith("b()"), DeprecationLevel.ERROR) +fun a() {} + +fun b() {} + +fun usage() { + b() +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 8d65fa05962..f20a0f05a94 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -3163,6 +3163,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest(fileName); } + @TestMetadata("deprecationLevel.kt") + public void testDeprecationLevel() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/deprecationLevel.kt"); + doTest(fileName); + } + @TestMetadata("doNotShortenUserReferences.kt") public void testDoNotShortenUserReferences() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/deprecatedSymbolUsage/doNotShortenUserReferences.kt");