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.
This commit is contained in:
Mikhail Golubev
2018-01-25 19:38:40 +03:00
parent c668c24626
commit a4ebbece45
@@ -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<PyParameter, String> 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<PsiElement, String> allRenames = new HashMap<>(paramRenames);
if (changeInfo.isNameChanged()) {
allRenames.put(function, changeInfo.getNewName());
}
for (Map.Entry<PyParameter, String> 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);
}
}
}