From 58d725dac0c092369c0bbb61fbcfd1cd04ded0ee Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Mon, 21 Nov 2016 19:15:58 +0100 Subject: [PATCH] Don't store PsiElement in LocalQuickFix instance (EA-90970 - PIEAE: PsiInvalidElementAccessException.createByNode) --- .../idea/inspections/UnusedSymbolInspection.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 4ca5eeae14c..a4686c64e90 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -56,14 +56,16 @@ import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.handlers.KotlinFindClassUsagesHandler import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.idea.search.usagesSearch.* +import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction +import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor +import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames +import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode -import org.jetbrains.kotlin.util.OperatorNameConventions import org.jetbrains.kotlin.util.findCallableMemberBySignature import org.jetbrains.kotlin.utils.singletonOrEmptyList import java.awt.GridBagConstraints @@ -343,16 +345,19 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { } } -class SafeDeleteFix(val declaration: KtDeclaration) : LocalQuickFix { - override fun getName() = +class SafeDeleteFix(declaration: KtDeclaration) : LocalQuickFix { + private val name = if (declaration is KtConstructor<*>) "Safe delete constructor" else QuickFixBundle.message("safe.delete.text", declaration.name) + override fun getName() = name + override fun getFamilyName() = "Safe delete" override fun startInWriteAction(): Boolean = false override fun applyFix(project: Project, descriptor: ProblemDescriptor) { + val declaration = descriptor.psiElement.getStrictParentOfType() ?: return if (!FileModificationService.getInstance().prepareFileForWrite(declaration.containingFile)) return SwingUtilities.invokeLater { SafeDeleteHandler.invoke(project, arrayOf(declaration), false)