From 5bbed1994bdd84eadd62178cb1908569a3fc686e Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Tue, 1 Nov 2016 13:15:02 +0300 Subject: [PATCH] [groovy] hand qualification check logic over to extensions --- .../groovy/refactoring/rename/GrRenameHelper.java | 15 ++++++++++++++- .../rename/RenameGrFieldProcessor.java | 8 ++++++-- .../groovy/refactoring/rename/renameHelper.kt | 5 +++++ .../transformations/impl/DefaultRenameHelper.kt | 8 ++++++++ .../transformations/impl/TraitRenameHelper.kt | 8 ++++++++ 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/GrRenameHelper.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/GrRenameHelper.java index be7e1032bf77..fcd885bbc438 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/GrRenameHelper.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/GrRenameHelper.java @@ -16,6 +16,8 @@ package org.jetbrains.plugins.groovy.refactoring.rename; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiManager; import com.intellij.psi.PsiMember; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -47,5 +49,16 @@ public interface GrRenameHelper { * @see DefaultRenameHelper */ @Nullable - String getNewMemberName(@NotNull PsiMember member, @NotNull String newOriginalName); + default String getNewMemberName(@NotNull PsiMember member, @NotNull String newOriginalName) { + return null; + } + + /** + * @param manager + * @param before element to which the reference resolved before rename + * @param after element to which the reference resolves after rename + */ + default boolean isQualificationNeeded(@NotNull PsiManager manager, @NotNull PsiElement before, @NotNull PsiElement after) { + return false; + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java index 5c6985af2cec..e26e37961fd6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/RenameGrFieldProcessor.java @@ -51,6 +51,7 @@ import java.util.List; import java.util.Map; import static org.jetbrains.plugins.groovy.refactoring.rename.RenameHelperKt.getNewNameFromTransformations; +import static org.jetbrains.plugins.groovy.refactoring.rename.RenameHelperKt.isQualificationNeeded; /** * @author ilyas @@ -100,13 +101,16 @@ public class RenameGrFieldProcessor extends RenameJavaVariableProcessor { field.setName(newName); + PsiManager manager = psiElement.getManager(); for (GrReferenceExpression expression : handled.keySet()) { PsiElement oldResolved = handled.get(expression); if (oldResolved == null) continue; PsiElement resolved = expression.resolve(); if (resolved == null) continue; - if (expression.getManager().areElementsEquivalent(oldResolved, resolved)) continue; - qualify(field, expression); + if (manager.areElementsEquivalent(oldResolved, resolved)) continue; + if (oldResolved.equals(field) || isQualificationNeeded(manager, oldResolved, resolved)) { + qualify(field, expression); + } } if (listener != null) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/renameHelper.kt b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/renameHelper.kt index 1b835d558838..8b420ab23664 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/renameHelper.kt +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/rename/renameHelper.kt @@ -16,6 +16,7 @@ package org.jetbrains.plugins.groovy.refactoring.rename import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager import com.intellij.psi.PsiMember fun PsiElement?.getNewNameFromTransformations(newName: String) = (this as? PsiMember)?.let { @@ -29,4 +30,8 @@ private fun doGetNewNameFromTransformations(member: PsiMember, newName: String): if (newMemberName != null) return newMemberName } return null +} + +fun isQualificationNeeded(manager: PsiManager, before: PsiElement, after: PsiElement) = GrRenameHelper.EP_NAME.extensions.any { + it.isQualificationNeeded(manager, before, after) } \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/DefaultRenameHelper.kt b/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/DefaultRenameHelper.kt index 19c9558957cf..3d43309587e1 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/DefaultRenameHelper.kt +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/DefaultRenameHelper.kt @@ -15,6 +15,8 @@ */ package org.jetbrains.plugins.groovy.transformations.impl +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager import com.intellij.psi.PsiMember import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils.getAccessorName @@ -32,4 +34,10 @@ class DefaultRenameHelper : GrRenameHelper { getAccessorName(if (member.name.startsWith("is")) "is" else "get", newOriginalName) } } + + override fun isQualificationNeeded(manager: PsiManager, + before: PsiElement, + after: PsiElement): Boolean { + return before is GrAccessorMethod && (after !is GrAccessorMethod || !manager.areElementsEquivalent(before.property, after.property)) + } } \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/TraitRenameHelper.kt b/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/TraitRenameHelper.kt index 90f0e0969bce..673c6dee342a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/TraitRenameHelper.kt +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/transformations/impl/TraitRenameHelper.kt @@ -15,6 +15,8 @@ */ package org.jetbrains.plugins.groovy.transformations.impl +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager import com.intellij.psi.PsiMember import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GrTraitField import org.jetbrains.plugins.groovy.lang.psi.util.GrTraitUtil @@ -28,4 +30,10 @@ class TraitRenameHelper : GrRenameHelper { val containingClass = prototype.containingClass ?: return null return GrTraitUtil.getTraitFieldPrefix(containingClass) + newOriginalName } + + override fun isQualificationNeeded(manager: PsiManager, + before: PsiElement, + after: PsiElement): Boolean { + return before is GrTraitField && (after !is GrTraitField || !manager.areElementsEquivalent(after.prototype, before.prototype)) + } } \ No newline at end of file