From a4ebbece45a1f949f597601ec0c4b00543b1ab53 Mon Sep 17 00:00:00 2001 From: Mikhail Golubev Date: Thu, 25 Jan 2018 19:06:39 +0300 Subject: [PATCH] Don't pass null value for allRenames to RenamePsiElementProcessor#findCollisions() since its nullability contract has changed. Additionally, properly pass all elements renamed during change signature instead, despite the fact that implementations of RenamePsiElementProcessor for Python don't use it anyhow at the moment. --- .../PyChangeSignatureUsageProcessor.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java index c898ed7de823..8d2eeeee8e3f 100644 --- a/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java +++ b/python/src/com/jetbrains/python/refactoring/changeSignature/PyChangeSignatureUsageProcessor.java @@ -28,7 +28,6 @@ import com.intellij.refactoring.rename.RenameUtil; import com.intellij.refactoring.rename.ResolveSnapshotProvider; import com.intellij.usageView.UsageInfo; import com.intellij.util.Query; -import java.util.HashSet; import com.intellij.util.containers.JBIterable; import com.intellij.util.containers.MultiMap; import com.jetbrains.python.PyNames; @@ -41,6 +40,7 @@ import com.jetbrains.python.psi.search.PyOverridingMethodsSearch; import com.jetbrains.python.psi.types.PyCallableParameter; import com.jetbrains.python.psi.types.TypeEvalContext; import com.jetbrains.python.refactoring.PyRefactoringUtil; +import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -264,13 +264,20 @@ public class PyChangeSignatureUsageProcessor implements ChangeSignatureUsageProc private static void processFunctionDeclaration(@NotNull PyChangeInfo changeInfo, @NotNull PyFunction function) { if (changeInfo.isParameterNamesChanged()) { final PyParameter[] oldParameters = function.getParameterList().getParameters(); - for (PyParameterInfo paramInfo: changeInfo.getNewParameters()) { - if (paramInfo.getOldIndex() >= 0 && paramInfo.isRenamed()) { - final String newName = StringUtil.trimLeading(paramInfo.getName(), '*').trim(); - final UsageInfo[] usages = RenameUtil.findUsages(oldParameters[paramInfo.getOldIndex()], newName, true, false, null); - for (UsageInfo info : usages) { - RenameUtil.rename(info, newName); - } + final Map paramRenames = StreamEx.of(changeInfo.getNewParameters()) + .filter(info -> info.getOldIndex() >= 0 && info.isRenamed()) + .toMap(info -> oldParameters[info.getOldIndex()], + info -> StringUtil.trimLeading(info.getName(), '*').trim()); + final Map allRenames = new HashMap<>(paramRenames); + if (changeInfo.isNameChanged()) { + allRenames.put(function, changeInfo.getNewName()); + } + for (Map.Entry entry : paramRenames.entrySet()) { + final PyParameter oldParameter = entry.getKey(); + final String newName = entry.getValue(); + final UsageInfo[] usages = RenameUtil.findUsages(oldParameter, newName, true, false, allRenames); + for (UsageInfo info : usages) { + RenameUtil.rename(info, newName); } } }