[java] inline parameter: add context to avoid qualify conflicting field names (IDEA-281362)

GitOrigin-RevId: 08cf0efc30b17590e6592e37b7e91910ad6e5da6
This commit is contained in:
Anna Kozlova
2021-11-04 09:15:52 +00:00
committed by intellij-monorepo-bot
parent eacd3576f5
commit 58bb24679c
4 changed files with 42 additions and 12 deletions
@@ -257,22 +257,21 @@ public class InlineParameterExpressionProcessor extends BaseRefactoringProcessor
myInitializer = (PsiExpression)RefactoringUtil.replaceElementsWithMap(myInitializer, replacements);
if (myCreateLocal) {
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(myMethod.getProject());
PsiDeclarationStatement localDeclaration =
factory.createVariableDeclarationStatement(myParameter.getName(), myParameter.getType(), myInitializer);
final PsiLocalVariable declaredVar = (PsiLocalVariable)localDeclaration.getDeclaredElements()[0];
PsiUtil.setModifierProperty(declaredVar, PsiModifier.FINAL, myParameter.hasModifierProperty(PsiModifier.FINAL));
final PsiExpression localVarInitializer =
InlineUtil.inlineVariable(myParameter, myInitializer, (PsiReferenceExpression)factory.createExpressionFromText(myParameter.getName(), myMethod));
final PsiExpression initializer = declaredVar.getInitializer();
LOG.assertTrue(initializer != null);
initializer.replace(localVarInitializer);
final PsiCodeBlock body = myMethod.getBody();
if (body != null) {
PsiElement anchor = findAnchorForLocalVariableDeclaration(body);
body.addAfter(localDeclaration, anchor);
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(myMethod.getProject());
PsiExpression refExpression = factory.createExpressionFromText(myParameter.getName(), anchor);
PsiDeclarationStatement localDeclaration =
factory.createVariableDeclarationStatement(myParameter.getName(), myParameter.getType(), refExpression);
localDeclaration = (PsiDeclarationStatement)body.addAfter(localDeclaration, anchor);
final PsiLocalVariable declaredVar = (PsiLocalVariable)localDeclaration.getDeclaredElements()[0];
PsiUtil.setModifierProperty(declaredVar, PsiModifier.FINAL, myParameter.hasModifierProperty(PsiModifier.FINAL));
InlineUtil.inlineVariable(myParameter, myInitializer, (PsiReferenceExpression)declaredVar.getInitializer());
}
} else {
}
else {
for (PsiJavaCodeReferenceElement paramRef : paramRefsToInline) {
InlineUtil.inlineVariable(myParameter, myInitializer, paramRef);
}
@@ -0,0 +1,13 @@
class A {
private String f;
public void m() {
m1(f);
}
private void m1(String <caret>f) {
if (!f.isEmpty()) {
System.out.println(f);
}
}
}
@@ -0,0 +1,14 @@
class A {
private String f;
public void m() {
m1();
}
private void m1() {
String f = this.f;
if (!f.isEmpty()) {
System.out.println(f);
}
}
}
@@ -188,6 +188,10 @@ public class InlineParameterTest extends LightRefactoringTestCase {
public void testRefNewTopLevel() {
doTest(false);
}
public void testConflictingFieldName() {
doTest(true);
}
public void testRefNewLocal() {
try {