[groovy] fix project leaking via intention (IDEA-175950)

This commit is contained in:
Daniil Ovchinnikov
2017-10-09 12:04:10 +03:00
parent a152ea1932
commit 0ccda8fb23
@@ -3,25 +3,19 @@ package org.jetbrains.plugins.groovy.intentions.conversions
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.SmartPsiElementPointer
import com.intellij.psi.util.createSmartPointer
import com.intellij.refactoring.RefactoringFactory
import com.intellij.util.Consumer
import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle.message
import org.jetbrains.plugins.groovy.intentions.base.Intention
import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition
class RenameClassToFileNameIntention : Intention() {
private lateinit var myClassPointer: SmartPsiElementPointer<GrTypeDefinition>
private lateinit var myFileName: String
override fun getElementPredicate(): PsiElementPredicate = ClassNameDiffersFromFileNamePredicate(
classConsumer = Consumer {
myClassPointer = it.createSmartPointer()
},
fileNameConsumer = Consumer { fileName ->
myFileName = fileName
}
@@ -34,7 +28,10 @@ class RenameClassToFileNameIntention : Intention() {
override fun startInWriteAction(): Boolean = false
override fun processIntention(element: PsiElement, project: Project, editor: Editor?) {
val clazz = myClassPointer.element ?: return
var clazz: PsiClass? = null
val predicate = ClassNameDiffersFromFileNamePredicate(classConsumer = Consumer { clazz = it })
if (!predicate.satisfiedBy(element)) return
assert(clazz != null)
RefactoringFactory.getInstance(project).createRename(clazz, myFileName).run()
}
}