fix operation assignment (IDEA-143986)

This commit is contained in:
Anna Kozlova
2015-08-17 14:49:58 +02:00
parent 210d5de79a
commit bbda6d8b02
4 changed files with 38 additions and 5 deletions

View File

@@ -104,6 +104,12 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate {
public static PsiExpression getInitializerExpression(PsiLocalVariable var,
PsiAssignmentExpression assignment) {
return getInitializerExpression(var.getInitializer(),
assignment);
}
public static PsiExpression getInitializerExpression(PsiExpression initializer,
PsiAssignmentExpression assignment) {
PsiExpression initializerExpression;
final IElementType originalOpSign = assignment.getOperationTokenType();
final PsiExpression rExpression = assignment.getRExpression();
@@ -111,7 +117,7 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate {
initializerExpression = rExpression;
}
else {
if (var.getInitializer() == null) return null;
if (initializer == null) return null;
String opSign = null;
if (originalOpSign == JavaTokenType.ANDEQ) {
opSign = "&";
@@ -148,8 +154,8 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate {
}
try {
final Project project = var.getProject();
String initializerText = var.getInitializer().getText() + opSign;
final Project project = assignment.getProject();
String initializerText = initializer.getText() + opSign;
final String rightText = rExpression.getText();
if (ParenthesesUtils.areParenthesesNeeded(assignment.getOperationSign(), rExpression)) {
initializerText += "(" + rightText + ")";
@@ -157,7 +163,7 @@ public class DeclarationJoinLinesHandler implements JoinLinesHandlerDelegate {
else {
initializerText += rightText;
}
initializerExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(initializerText, var);
initializerExpression = JavaPsiFacade.getElementFactory(project).createExpressionFromText(initializerText, assignment);
initializerExpression = (PsiExpression)CodeStyleManager.getInstance(project).reformat(initializerExpression);
}
catch (IncorrectOperationException e) {

View File

@@ -16,8 +16,10 @@
package com.intellij.codeInspection;
import com.intellij.codeInsight.FileModificationService;
import com.intellij.codeInsight.editorActions.DeclarationJoinLinesHandler;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiUtil;
import org.jetbrains.annotations.NotNull;
@@ -38,7 +40,12 @@ public class RemoveAssignmentFix extends RemoveInitializerFix {
parent = element;
}
if (!(parent instanceof PsiAssignmentExpression)) return;
final PsiExpression rExpression = ((PsiAssignmentExpression)parent).getRExpression();
final IElementType operationSign = ((PsiAssignmentExpression)parent).getOperationTokenType();
PsiExpression rExpression = ((PsiAssignmentExpression)parent).getRExpression();
if (JavaTokenType.EQ != operationSign && rExpression != null ) {
rExpression = DeclarationJoinLinesHandler.getInitializerExpression(((PsiAssignmentExpression)parent).getLExpression(),
(PsiAssignmentExpression)parent);
}
final PsiElement gParent = parent.getParent();
if ((gParent instanceof PsiExpression || gParent instanceof PsiExpressionList || gParent instanceof PsiReturnStatement) && rExpression != null) {
if (!FileModificationService.getInstance().prepareFileForWrite(gParent.getContainingFile())) return;

View File

@@ -0,0 +1,10 @@
// "Remove redundant assignment" "true"
class A {
public String getContexts(final String env) {
String contexts = "a";
if ("dev".equals(env)) {
return contexts + ",b";
}
return contexts;
}
}

View File

@@ -0,0 +1,10 @@
// "Remove redundant assignment" "true"
class A {
public String getContexts(final String env) {
String contexts = "a";
if ("dev".equals(env)) {
return cont<caret>exts += ",b";
}
return contexts;
}
}