mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inline parameter: take advantages from inline local (IDEA-135610)
This commit is contained in:
@@ -337,9 +337,9 @@ public class InlineLocalHandler extends JavaInlineActionHandler {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiExpression getDefToInline(final PsiLocalVariable local,
|
||||
final PsiElement refExpr,
|
||||
final PsiCodeBlock block) {
|
||||
static PsiExpression getDefToInline(final PsiVariable local,
|
||||
final PsiElement refExpr,
|
||||
final PsiCodeBlock block) {
|
||||
if (refExpr != null) {
|
||||
PsiElement def;
|
||||
if (refExpr instanceof PsiReferenceExpression && PsiUtil.isAccessedForWriting((PsiExpression) refExpr)) {
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.refactoring.inline;
|
||||
|
||||
import com.intellij.codeInsight.PsiEquivalenceUtil;
|
||||
import com.intellij.codeInsight.TargetElementUtilBase;
|
||||
import com.intellij.codeInspection.sameParameterValue.SameParameterValueInspection;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
@@ -117,8 +118,8 @@ public class InlineParameterHandler extends JavaInlineActionHandler {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
final int offset = editor.getCaretModel().getOffset();
|
||||
final PsiElement refExpr = psiElement.getContainingFile().findElementAt(offset);
|
||||
final PsiReference reference = TargetElementUtilBase.findReference(editor);
|
||||
final PsiReferenceExpression refExpr = reference instanceof PsiReferenceExpression ? ((PsiReferenceExpression)reference) : null;
|
||||
final PsiCodeBlock codeBlock = PsiTreeUtil.getParentOfType(refExpr, PsiCodeBlock.class);
|
||||
if (codeBlock != null) {
|
||||
final PsiElement[] defs = DefUseUtil.getDefs(codeBlock, psiParameter, refExpr);
|
||||
@@ -127,19 +128,22 @@ public class InlineParameterHandler extends JavaInlineActionHandler {
|
||||
if (def instanceof PsiReferenceExpression && PsiUtil.isOnAssignmentLeftHand((PsiExpression)def)) {
|
||||
final PsiExpression rExpr = ((PsiAssignmentExpression)def.getParent()).getRExpression();
|
||||
if (rExpr != null) {
|
||||
final PsiElement[] refs = DefUseUtil.getRefs(codeBlock, psiParameter, refExpr);
|
||||
PsiExpression toInline = InlineLocalHandler.getDefToInline(psiParameter, refExpr, codeBlock);
|
||||
if (toInline != null) {
|
||||
final PsiElement[] refs = DefUseUtil.getRefs(codeBlock, psiParameter, toInline);
|
||||
|
||||
if (InlineLocalHandler.checkRefsInAugmentedAssignmentOrUnaryModified(refs, def) == null) {
|
||||
new WriteCommandAction(project) {
|
||||
@Override
|
||||
protected void run(Result result) throws Throwable {
|
||||
for (final PsiElement ref : refs) {
|
||||
InlineUtil.inlineVariable(psiParameter, rExpr, (PsiJavaCodeReferenceElement)ref);
|
||||
if (InlineLocalHandler.checkRefsInAugmentedAssignmentOrUnaryModified(refs, def) == null) {
|
||||
new WriteCommandAction(project) {
|
||||
@Override
|
||||
protected void run(Result result) throws Throwable {
|
||||
for (final PsiElement ref : refs) {
|
||||
InlineUtil.inlineVariable(psiParameter, rExpr, (PsiJavaCodeReferenceElement)ref);
|
||||
}
|
||||
def.getParent().delete();
|
||||
}
|
||||
def.getParent().delete();
|
||||
}
|
||||
}.execute();
|
||||
return;
|
||||
}.execute();
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
class Test {
|
||||
String foo(String content) {
|
||||
content = content.replace("a", "b");
|
||||
return con<caret>tent;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
class Test {
|
||||
String foo(String content) {
|
||||
return content.replace("a", "b");
|
||||
}
|
||||
}
|
||||
@@ -122,6 +122,10 @@ public class InlineParameterTest extends LightRefactoringTestCase {
|
||||
}
|
||||
}
|
||||
|
||||
public void testRightSideAssignment() throws Exception {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
public void testRefNewInnerForMethod() throws Exception {
|
||||
doTest(false);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user