[java-refactoring] Support parameters on conflict detection

GitOrigin-RevId: 308c1da92a04f6212c0e6bb764bdf6d940192b2d
This commit is contained in:
Tagir Valeev
2024-04-10 16:22:43 +02:00
committed by intellij-monorepo-bot
parent 92ac28f978
commit 43b02d2a23
5 changed files with 16 additions and 32 deletions

View File

@@ -31,17 +31,20 @@ public final class JavaUnresolvableLocalCollisionDetector {
// element is a PsiParameter
scope = ((PsiParameter)element).getDeclarationScope();
}
String oldName = variable.getName();
LOG.assertTrue(scope != null, element.getClass().getName());
boolean methodParameter = element instanceof PsiParameter parameter && parameter.getDeclarationScope() instanceof PsiMethod;
PsiResolveHelper helper = PsiResolveHelper.getInstance(element.getProject());
final CollidingVariableVisitor collidingNameVisitor = new CollidingVariableVisitor() {
@Override
public void visitCollidingElement(PsiVariable collidingVariable) {
if (collidingVariable.equals(element)) return;
if (collidingVariable.isUnnamed()) return;
if (helper.resolveAccessibleReferencedVariable(newName, element) != collidingVariable &&
helper.resolveAccessibleReferencedVariable(variable.getName(), collidingVariable) != element) return;
LocalHidesRenamedLocalUsageInfo collision = new LocalHidesRenamedLocalUsageInfo(element, collidingVariable);
if (!methodParameter &&
helper.resolveAccessibleReferencedVariable(newName, element) != collidingVariable &&
helper.resolveAccessibleReferencedVariable(oldName, collidingVariable) != element) return;
LocalHidesRenamedLocalUsageInfo collision = new LocalHidesRenamedLocalUsageInfo(collidingVariable, element);
result.add(collision);
}
};

View File

@@ -1,41 +1,22 @@
/*
* Copyright 2000-2009 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.refactoring.rename;
import com.intellij.java.refactoring.JavaRefactoringBundle;
import com.intellij.psi.PsiElement;
import com.intellij.refactoring.util.RefactoringUIUtil;
import com.intellij.usageView.UsageViewUtil;
public class LocalHidesRenamedLocalUsageInfo extends UnresolvableCollisionUsageInfo {
private final PsiElement myConflictingElement;
public LocalHidesRenamedLocalUsageInfo(PsiElement element, PsiElement conflictingElement) {
super(element, null);
myConflictingElement = conflictingElement;
public LocalHidesRenamedLocalUsageInfo(PsiElement element, PsiElement referencedElement) {
super(element, referencedElement);
myConflictingElement = element;
}
@Override
public String getDescription() {
PsiElement element = getElement();
String type = element == null ? "element" : UsageViewUtil.getType(element);
return JavaRefactoringBundle.message("there.is.already.a.0.it.will.conflict.with.the.renamed.1",
RefactoringUIUtil.getDescription(myConflictingElement, true),
type);
RefactoringUIUtil.getDescription(myConflictingElement, true));
}
}