inline field: preserve context for diamonds (IDEA-158604)

This commit is contained in:
Anna.Kozlova
2016-07-18 20:41:24 +02:00
parent 6e99f31873
commit cfe8570309
4 changed files with 33 additions and 4 deletions
@@ -139,8 +139,9 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
protected void performRefactoring(@NotNull UsageInfo[] usages) {
PsiExpression initializer = InlineConstantFieldHandler.getInitializer(myField);
LOG.assertTrue(initializer != null);
initializer = normalize (initializer);
initializer = normalize ((PsiExpression)initializer.copy());
final Set<PsiAssignmentExpression> assignments = new HashSet<>();
for (UsageInfo info : usages) {
if (info instanceof UsageFromJavaDoc) continue;
if (info instanceof NonCodeUsageInfo) continue;
@@ -148,7 +149,7 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
if (element == null) continue;
try {
if (element instanceof PsiExpression) {
inlineExpressionUsage((PsiExpression)element, initializer);
inlineExpressionUsage((PsiExpression)element, initializer, assignments);
}
else {
PsiImportStaticStatement importStaticStatement = PsiTreeUtil.getParentOfType(element, PsiImportStaticStatement.class);
@@ -161,6 +162,10 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
}
}
for (PsiAssignmentExpression assignment : assignments) {
assignment.delete();
}
if (!myInlineThisOnly) {
try {
myField.delete();
@@ -186,7 +191,8 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
}
private void inlineExpressionUsage(PsiExpression expr,
PsiExpression initializer1) throws IncorrectOperationException {
PsiExpression initializer1,
Set<PsiAssignmentExpression> assignments) throws IncorrectOperationException {
if (myField.isWritable()) {
myField.normalizeDeclaration();
}
@@ -194,7 +200,7 @@ public class InlineConstantFieldProcessor extends BaseRefactoringProcessor {
if (isAccessedForWriting(expr)) {
PsiAssignmentExpression assignmentExpression = PsiTreeUtil.getParentOfType(expr, PsiAssignmentExpression.class);
if (assignmentExpression != null) {
assignmentExpression.delete();
assignments.add(assignmentExpression);
}
return;
}
@@ -0,0 +1,10 @@
import java.util.HashMap;
import java.util.Map;
final class Foo {
private Map<String, Object> map = new HashMap<>();
private Map<String, Object> getMap() {
return m<caret>ap;
}
}
@@ -0,0 +1,9 @@
import java.util.HashMap;
import java.util.Map;
final class Foo {
private Map<String, Object> getMap() {
return new HashMap<>();
}
}
@@ -42,6 +42,10 @@ public class InlineConstantFieldTest extends LightRefactoringTestCase {
doTest();
}
public void testDiamondInitializer() throws Exception {
doTest();
}
public void testMultipleInitializers() throws Exception {
configureByFile("/refactoring/inlineConstantField/" + getTestName(false) + ".java");
PsiElement element = TargetElementUtil