1
+ package io.runescript.plugin.ide.refactoring
2
+
3
+ import com.intellij.openapi.editor.Editor
4
+ import com.intellij.openapi.project.Project
5
+ import com.intellij.openapi.util.NlsContexts
6
+ import com.intellij.psi.PsiElement
7
+ import com.intellij.psi.ResolveState
8
+ import com.intellij.refactoring.rename.RenamePsiElementProcessor
9
+ import com.intellij.refactoring.rename.RenamePsiFileProcessor
10
+ import com.intellij.refactoring.rename.RenameRefactoringDialog
11
+ import com.intellij.util.containers.MultiMap
12
+ import io.runescript.plugin.ide.RsBundle
13
+ import io.runescript.plugin.lang.psi.RsLocalVariableExpression
14
+ import io.runescript.plugin.lang.psi.scope.RsLocalVariableResolver
15
+ import io.runescript.plugin.lang.psi.scope.RsResolveMode
16
+ import io.runescript.plugin.lang.psi.scope.RsScopesUtil
17
+
18
+ class RsRenameProcessor : RenamePsiElementProcessor () {
19
+
20
+ override fun createDialog (
21
+ project : Project , element : PsiElement , nameSuggestionContext : PsiElement ? , editor : Editor ?
22
+ ): RenameRefactoringDialog ? {
23
+ return RenamePsiFileProcessor .PsiFileRenameDialog (project, element, nameSuggestionContext, editor)
24
+ }
25
+
26
+ override fun findExistingNameConflicts (
27
+ element : PsiElement , newName : String , conflicts : MultiMap <PsiElement ?, @NlsContexts.DialogMessage String ?>
28
+ ) {
29
+ val resolver = RsLocalVariableResolver (newName, RsResolveMode .Both )
30
+ RsScopesUtil .walkUpScopes(resolver, ResolveState .initial(), element)
31
+ if (resolver.declaration != null ) {
32
+ conflicts.putValue(
33
+ resolver.declaration, RsBundle .message(" refactoring.error.duplicate.local.variable" , newName)
34
+ )
35
+ }
36
+ }
37
+
38
+ override fun canProcessElement (element : PsiElement ): Boolean {
39
+ return element is RsLocalVariableExpression
40
+ }
41
+ }
0 commit comments