mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
inline field: preserve context for diamonds (IDEA-158604)
This commit is contained in:
+10
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user