mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] fix project leaking via intention (IDEA-175950)
This commit is contained in:
+5
-8
@@ -3,25 +3,19 @@ package org.jetbrains.plugins.groovy.intentions.conversions
|
|||||||
|
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.SmartPsiElementPointer
|
|
||||||
import com.intellij.psi.util.createSmartPointer
|
|
||||||
import com.intellij.refactoring.RefactoringFactory
|
import com.intellij.refactoring.RefactoringFactory
|
||||||
import com.intellij.util.Consumer
|
import com.intellij.util.Consumer
|
||||||
import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle.message
|
import org.jetbrains.plugins.groovy.intentions.GroovyIntentionsBundle.message
|
||||||
import org.jetbrains.plugins.groovy.intentions.base.Intention
|
import org.jetbrains.plugins.groovy.intentions.base.Intention
|
||||||
import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate
|
import org.jetbrains.plugins.groovy.intentions.base.PsiElementPredicate
|
||||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition
|
|
||||||
|
|
||||||
class RenameClassToFileNameIntention : Intention() {
|
class RenameClassToFileNameIntention : Intention() {
|
||||||
|
|
||||||
private lateinit var myClassPointer: SmartPsiElementPointer<GrTypeDefinition>
|
|
||||||
private lateinit var myFileName: String
|
private lateinit var myFileName: String
|
||||||
|
|
||||||
override fun getElementPredicate(): PsiElementPredicate = ClassNameDiffersFromFileNamePredicate(
|
override fun getElementPredicate(): PsiElementPredicate = ClassNameDiffersFromFileNamePredicate(
|
||||||
classConsumer = Consumer {
|
|
||||||
myClassPointer = it.createSmartPointer()
|
|
||||||
},
|
|
||||||
fileNameConsumer = Consumer { fileName ->
|
fileNameConsumer = Consumer { fileName ->
|
||||||
myFileName = fileName
|
myFileName = fileName
|
||||||
}
|
}
|
||||||
@@ -34,7 +28,10 @@ class RenameClassToFileNameIntention : Intention() {
|
|||||||
override fun startInWriteAction(): Boolean = false
|
override fun startInWriteAction(): Boolean = false
|
||||||
|
|
||||||
override fun processIntention(element: PsiElement, project: Project, editor: Editor?) {
|
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()
|
RefactoringFactory.getInstance(project).createRename(clazz, myFileName).run()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user