From 3321ce63252198482ae429a537c6c20e03ba3197 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Sat, 24 Oct 2020 00:21:40 +0900 Subject: [PATCH] Revert ""Code Cleanup": don't remove deprecated imports when file has `@file:Suppress("DEPRECATION")` annotation" This reverts commit cf5a6274 --- .../inspections/KotlinCleanupInspection.kt | 2 +- .../replaceWith/DeprecatedSymbolUsageFix.kt | 23 +------------------ .../cleanup/{basic => }/JavaAnn.java | 0 .../cleanup/{basic/basic.kt => cleanup.kt} | 0 .../basic.kt.after => cleanup.kt.after} | 0 .../cleanup/{basic => }/deprecatedSymbols.kt | 0 .../deprecatedSymbols.kt | 6 ----- ...fileWithAnnotationToSuppressDeprecation.kt | 7 ------ ...thAnnotationToSuppressDeprecation.kt.after | 7 ------ .../KotlinCleanupInspectionTest.kt | 21 +++++------------ 10 files changed, 8 insertions(+), 58 deletions(-) rename idea/testData/inspections/cleanup/{basic => }/JavaAnn.java (100%) rename idea/testData/inspections/cleanup/{basic/basic.kt => cleanup.kt} (100%) rename idea/testData/inspections/cleanup/{basic/basic.kt.after => cleanup.kt.after} (100%) rename idea/testData/inspections/cleanup/{basic => }/deprecatedSymbols.kt (100%) delete mode 100644 idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/deprecatedSymbols.kt delete mode 100644 idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt delete mode 100644 idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.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 39c00c8767f..60cb787374c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspection.kt @@ -49,7 +49,7 @@ class KotlinCleanupInspection : LocalInspectionTool(), CleanupLocalInspectionToo val problemDescriptors = arrayListOf() - val importsToRemove = DeprecatedSymbolUsageFix.importDirectivesToBeRemoved(file) + val importsToRemove = file.importDirectives.filter { DeprecatedSymbolUsageFix.isImportToBeRemoved(it) } for (import in importsToRemove) { val removeImportFix = RemoveImportFix(import) val problemDescriptor = createProblemDescriptor(import, removeImportFix.text, listOf(removeImportFix), file, manager) diff --git a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFix.kt b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFix.kt index 2c9eb967ff2..be910e77c62 100644 --- a/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFix.kt +++ b/idea/src/org/jetbrains/kotlin/idea/quickfix/replaceWith/DeprecatedSymbolUsageFix.kt @@ -20,21 +20,16 @@ import com.intellij.codeInsight.intention.HighPriorityAction import com.intellij.codeInsight.intention.IntentionAction import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.idea.KotlinBundle -import org.jetbrains.kotlin.idea.caches.resolve.resolveToCall import org.jetbrains.kotlin.idea.codeInliner.UsageReplacementStrategy import org.jetbrains.kotlin.idea.core.moveCaret import org.jetbrains.kotlin.idea.core.targetDescriptors import org.jetbrains.kotlin.idea.quickfix.CleanupFix import org.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactory -import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtImportDirective import org.jetbrains.kotlin.psi.KtReferenceExpression -import org.jetbrains.kotlin.psi.KtStringTemplateExpression import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny -import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe class DeprecatedSymbolUsageFix( element: KtReferenceExpression, @@ -60,23 +55,7 @@ class DeprecatedSymbolUsageFix( return DeprecatedSymbolUsageFix(referenceExpression, replacement) } - fun importDirectivesToBeRemoved(file: KtFile): List { - if (file.hasAnnotationToSuppressDeprecation()) return emptyList() - return file.importDirectives.filter { isImportToBeRemoved(it) } - } - - private fun KtFile.hasAnnotationToSuppressDeprecation(): Boolean { - val suppressAnnotationEntry = annotationEntries.firstOrNull { - it.shortName?.asString() == "Suppress" - && it.resolveToCall()?.resultingDescriptor?.containingDeclaration?.fqNameSafe == KotlinBuiltIns.FQ_NAMES.suppress - } ?: return false - return suppressAnnotationEntry.valueArguments.any { - val text = (it.getArgumentExpression() as? KtStringTemplateExpression)?.entries?.singleOrNull()?.text ?: return@any false - text.equals("DEPRECATION", ignoreCase = true) - } - } - - private fun isImportToBeRemoved(import: KtImportDirective): Boolean { + fun isImportToBeRemoved(import: KtImportDirective): Boolean { if (import.isAllUnder) return false val targetDescriptors = import.targetDescriptors() diff --git a/idea/testData/inspections/cleanup/basic/JavaAnn.java b/idea/testData/inspections/cleanup/JavaAnn.java similarity index 100% rename from idea/testData/inspections/cleanup/basic/JavaAnn.java rename to idea/testData/inspections/cleanup/JavaAnn.java diff --git a/idea/testData/inspections/cleanup/basic/basic.kt b/idea/testData/inspections/cleanup/cleanup.kt similarity index 100% rename from idea/testData/inspections/cleanup/basic/basic.kt rename to idea/testData/inspections/cleanup/cleanup.kt diff --git a/idea/testData/inspections/cleanup/basic/basic.kt.after b/idea/testData/inspections/cleanup/cleanup.kt.after similarity index 100% rename from idea/testData/inspections/cleanup/basic/basic.kt.after rename to idea/testData/inspections/cleanup/cleanup.kt.after diff --git a/idea/testData/inspections/cleanup/basic/deprecatedSymbols.kt b/idea/testData/inspections/cleanup/deprecatedSymbols.kt similarity index 100% rename from idea/testData/inspections/cleanup/basic/deprecatedSymbols.kt rename to idea/testData/inspections/cleanup/deprecatedSymbols.kt diff --git a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/deprecatedSymbols.kt b/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/deprecatedSymbols.kt deleted file mode 100644 index 94c87a70573..00000000000 --- a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/deprecatedSymbols.kt +++ /dev/null @@ -1,6 +0,0 @@ -package bar - -interface I - -@Deprecated("", ReplaceWith("I")) -interface Bar : I \ No newline at end of file diff --git a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt b/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt deleted file mode 100644 index 1420d8425c2..00000000000 --- a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt +++ /dev/null @@ -1,7 +0,0 @@ -@file:Suppress("DEPRECATION") - -package foo - -import bar.Bar - -fun foo(x: Bar) {} \ No newline at end of file diff --git a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt.after b/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt.after deleted file mode 100644 index 1420d8425c2..00000000000 --- a/idea/testData/inspections/cleanup/fileWithAnnotationToSuppressDeprecation/fileWithAnnotationToSuppressDeprecation.kt.after +++ /dev/null @@ -1,7 +0,0 @@ -@file:Suppress("DEPRECATION") - -package foo - -import bar.Bar - -fun foo(x: Bar) {} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspectionTest.kt b/idea/tests/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspectionTest.kt index 52060f9ce2b..6b7031ec74d 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspectionTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/KotlinCleanupInspectionTest.kt @@ -17,16 +17,16 @@ import org.jetbrains.kotlin.test.JUnit3WithIdeaConfigurationRunner import org.junit.runner.RunWith @RunWith(JUnit3WithIdeaConfigurationRunner::class) -class KotlinCleanupInspectionTest : KotlinLightCodeInsightFixtureTestCase() { +class KotlinCleanupInspectionTest() : KotlinLightCodeInsightFixtureTestCase() { override fun getTestDataPath(): String = PluginTestCaseBase.getTestDataPathBase() + "/inspections/cleanup" override fun getProjectDescriptor(): LightProjectDescriptor = KotlinWithJdkAndRuntimeLightProjectDescriptor.INSTANCE - private fun doTest(dir: String, result: String, vararg files: String) { + private fun doTest(result: String, vararg files: String) { myFixture.enableInspections(KotlinCleanupInspection::class.java) myFixture.enableInspections(SortModifiersInspection::class.java) myFixture.enableInspections(RedundantModalityModifierInspection::class.java) - myFixture.configureByFiles(*files.map { "$dir/$it" }.toTypedArray()) + myFixture.configureByFiles(*files) val project = myFixture.project val managerEx = InspectionManager.getInstance(project) @@ -35,19 +35,10 @@ class KotlinCleanupInspectionTest : KotlinLightCodeInsightFixtureTestCase() { val profile = InspectionProjectProfileManager.getInstance(project).currentProfile globalContext.codeCleanup(analysisScope, profile, "Cleanup", null, true) - myFixture.checkResultByFile("$dir/$result") + myFixture.checkResultByFile(result) } - fun testBasic() { - doTest("basic", "basic.kt.after", "basic.kt", "JavaAnn.java", "deprecatedSymbols.kt") - } - - fun testFileWithAnnotationToSuppressDeprecation() { - doTest( - "fileWithAnnotationToSuppressDeprecation", - "fileWithAnnotationToSuppressDeprecation.kt.after", - "fileWithAnnotationToSuppressDeprecation.kt", - "deprecatedSymbols.kt" - ) + fun testCleanup() { + doTest("cleanup.kt.after", "cleanup.kt", "JavaAnn.java", "deprecatedSymbols.kt") } }