mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
allow to inline array definition when accessExpression is used for write; exclude new expressions
This commit is contained in:
@@ -195,7 +195,7 @@ public class InlineLocalHandler extends JavaInlineActionHandler {
|
||||
}
|
||||
}
|
||||
|
||||
final PsiElement writeAccess = checkRefsInAugmentedAssignmentOrUnaryModified(refsToInline);
|
||||
final PsiElement writeAccess = checkRefsInAugmentedAssignmentOrUnaryModified(refsToInline, defToInline);
|
||||
if (writeAccess != null) {
|
||||
HighlightManager.getInstance(project).addOccurrenceHighlights(editor, new PsiElement[]{writeAccess}, writeAttributes, true, null);
|
||||
String message = RefactoringBundle.getCannotRefactorMessage(RefactoringBundle.message("variable.is.accessed.for.writing", localName));
|
||||
@@ -273,12 +273,13 @@ public class InlineLocalHandler extends JavaInlineActionHandler {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PsiElement checkRefsInAugmentedAssignmentOrUnaryModified(final PsiElement[] refsToInline) {
|
||||
public static PsiElement checkRefsInAugmentedAssignmentOrUnaryModified(final PsiElement[] refsToInline, PsiElement defToInline) {
|
||||
for (PsiElement element : refsToInline) {
|
||||
|
||||
PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiArrayAccessExpression) {
|
||||
if (((PsiArrayAccessExpression)parent).getIndexExpression() == element) continue;
|
||||
if (defToInline instanceof PsiExpression && !(defToInline instanceof PsiNewExpression)) continue;
|
||||
element = parent;
|
||||
parent = parent.getParent();
|
||||
}
|
||||
|
||||
@@ -125,7 +125,7 @@ public class InlineParameterHandler extends JavaInlineActionHandler {
|
||||
if (rExpr != null) {
|
||||
final PsiElement[] refs = DefUseUtil.getRefs(codeBlock, psiParameter, refExpr);
|
||||
|
||||
if (InlineLocalHandler.checkRefsInAugmentedAssignmentOrUnaryModified(refs) == null) {
|
||||
if (InlineLocalHandler.checkRefsInAugmentedAssignmentOrUnaryModified(refs, def) == null) {
|
||||
new WriteCommandAction(project) {
|
||||
@Override
|
||||
protected void run(Result result) throws Throwable {
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
public class A {
|
||||
|
||||
public void testInlineRefactoring() {
|
||||
int[] array = ar();
|
||||
arr<caret>ay[1] = 22;
|
||||
}
|
||||
|
||||
private int[] ar() {
|
||||
return new int[0];
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
public class A {
|
||||
|
||||
public void testInlineRefactoring() {
|
||||
ar()[1] = 22;
|
||||
}
|
||||
|
||||
private int[] ar() {
|
||||
return new int[0];
|
||||
}
|
||||
}
|
||||
@@ -140,6 +140,10 @@ public class InlineLocalTest extends LightCodeInsightTestCase {
|
||||
"Variable 'arr' is accessed for writing.");
|
||||
}
|
||||
|
||||
public void testArrayMethodCallInitialized() throws Exception {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
public void testArrayIndex() throws Exception {
|
||||
doTest(true);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user