remove assignment: fix for assignment nested in expression, not statement (IDEA-123903)

This commit is contained in:
Anna Kozlova
2014-04-16 20:35:09 +02:00
parent 1471847207
commit 8cd1ee6344
3 changed files with 27 additions and 2 deletions

View File

@@ -68,10 +68,21 @@ public class DefUseInspection extends DefUseInspectionBase {
if (!(left instanceof PsiReferenceExpression)) return;
final PsiElement parent = left.getParent();
if (!(parent instanceof PsiAssignmentExpression)) return;
final PsiExpression rExpression = ((PsiAssignmentExpression)parent).getRExpression();
final PsiElement gParent = parent.getParent();
if (gParent instanceof PsiExpression && rExpression != null) {
if (!FileModificationService.getInstance().prepareFileForWrite(gParent.getContainingFile())) return;
if (gParent instanceof PsiParenthesizedExpression) {
gParent.replace(rExpression);
} else {
parent.replace(rExpression);
}
return;
}
final PsiElement resolve = ((PsiReferenceExpression)left).resolve();
if (!(resolve instanceof PsiVariable)) return;
sideEffectAwareRemove(project, ((PsiAssignmentExpression)parent).getRExpression(), parent, (PsiVariable)resolve);
sideEffectAwareRemove(project, rExpression, parent, (PsiVariable)resolve);
}
}
private static class RemoveInitializerFix implements LocalQuickFix {
@@ -92,7 +103,7 @@ public class DefUseInspection extends DefUseInspectionBase {
}
protected void sideEffectAwareRemove(Project project, PsiElement psiInitializer, PsiElement elementToDelete, PsiVariable variable) {
if (!FileModificationService.getInstance().prepareFileForWrite(psiInitializer.getContainingFile())) return;
if (!FileModificationService.getInstance().prepareFileForWrite(elementToDelete.getContainingFile())) return;
final PsiElement declaration = variable.getParent();
final List<PsiElement> sideEffects = new ArrayList<PsiElement>();

View File

@@ -0,0 +1,7 @@
// "Remove redundant assignment" "true"
class A {
public static void main(String[] args) {
int x = 3 * 4;
System.out.println(x);
}
}

View File

@@ -0,0 +1,7 @@
// "Remove redundant assignment" "true"
class A {
public static void main(String[] args) {
int x = (<caret>x = 3) * 4;
System.out.println(x);
}
}