From 2e71691ab25faecb82cc912c552132a0edad0b9b Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 27 Dec 2017 17:49:35 +0300 Subject: [PATCH] Fix potential leak in "unused lambda expression body" fix --- .../UnusedLambdaExpressionBodyInspection.kt | 9 ++++++--- .../unusedLambdaExpressionBody}/simple.kt | 0 .../unusedLambdaExpressionBody}/simple.kt.after | 0 .../.inspection | 1 - .../inspections/LocalInspectionTestGenerated.java | 6 ++++++ .../idea/quickfix/QuickFixTestGenerated.java | 15 --------------- 6 files changed, 12 insertions(+), 19 deletions(-) rename idea/testData/{quickfix/removeEqTokenFromFunctionDeclaration => inspectionsLocal/unusedLambdaExpressionBody}/simple.kt (100%) rename idea/testData/{quickfix/removeEqTokenFromFunctionDeclaration => inspectionsLocal/unusedLambdaExpressionBody}/simple.kt.after (100%) delete mode 100644 idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/.inspection diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedLambdaExpressionBodyInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedLambdaExpressionBodyInspection.kt index 52988b39ec8..47adce7173e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedLambdaExpressionBodyInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedLambdaExpressionBodyInspection.kt @@ -18,11 +18,13 @@ package org.jetbrains.kotlin.idea.inspections import com.intellij.codeInsight.FileModificationService import com.intellij.codeInspection.LocalQuickFix +import com.intellij.codeInspection.LocalQuickFixOnPsiElement import com.intellij.codeInspection.ProblemDescriptor import com.intellij.codeInspection.ProblemsHolder import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor +import com.intellij.psi.PsiFile import org.jetbrains.kotlin.builtins.isFunctionType import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze @@ -63,12 +65,13 @@ class UnusedLambdaExpressionBodyInspection : AbstractKotlinInspection() { private fun CallableDescriptor.returnsFunction() = returnType?.isFunctionType ?: false - class RemoveEqTokenFromFunctionDeclarationFix(val function: KtFunction) : LocalQuickFix { - override fun getName(): String = "Remove '=' token from function declaration" + class RemoveEqTokenFromFunctionDeclarationFix(function: KtFunction) : LocalQuickFixOnPsiElement(function) { + override fun getText(): String = "Remove '=' token from function declaration" override fun getFamilyName(): String = name - override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + override fun invoke(project: Project, file: PsiFile, startElement: PsiElement, endElement: PsiElement) { + val function = startElement as? KtFunction ?: return if (!FileModificationService.getInstance().preparePsiElementForWrite(function)) { return } diff --git a/idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/simple.kt b/idea/testData/inspectionsLocal/unusedLambdaExpressionBody/simple.kt similarity index 100% rename from idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/simple.kt rename to idea/testData/inspectionsLocal/unusedLambdaExpressionBody/simple.kt diff --git a/idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/simple.kt.after b/idea/testData/inspectionsLocal/unusedLambdaExpressionBody/simple.kt.after similarity index 100% rename from idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/simple.kt.after rename to idea/testData/inspectionsLocal/unusedLambdaExpressionBody/simple.kt.after diff --git a/idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/.inspection b/idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/.inspection deleted file mode 100644 index 607b45277a6..00000000000 --- a/idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/.inspection +++ /dev/null @@ -1 +0,0 @@ -org.jetbrains.kotlin.idea.inspections.UnusedLambdaExpressionBodyInspection \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java index afbe1ab748e..7a05520aacd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/inspections/LocalInspectionTestGenerated.java @@ -3874,6 +3874,12 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedLambdaExpressionBody/inEnumEntry.kt"); doTest(fileName); } + + @TestMetadata("simple.kt") + public void testSimple() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/inspectionsLocal/unusedLambdaExpressionBody/simple.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/inspectionsLocal/unusedReceiverParameter") diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java index 3ea874495bd..7ccabaf6d3f 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixTestGenerated.java @@ -9021,21 +9021,6 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { } } - @TestMetadata("idea/testData/quickfix/removeEqTokenFromFunctionDeclaration") - @TestDataPath("$PROJECT_ROOT") - @RunWith(JUnit3RunnerWithInners.class) - public static class RemoveEqTokenFromFunctionDeclaration extends AbstractQuickFixTest { - public void testAllFilesPresentInRemoveEqTokenFromFunctionDeclaration() throws Exception { - KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/removeEqTokenFromFunctionDeclaration"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), TargetBackend.ANY, true); - } - - @TestMetadata("simple.kt") - public void testSimple() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/removeEqTokenFromFunctionDeclaration/simple.kt"); - doTest(fileName); - } - } - @TestMetadata("idea/testData/quickfix/removeFinalUpperBound") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class)