/*
- * Copyright 2003-2015 Dave Griffith, Bas Leijdekkers
+ * Copyright 2003-2016 Dave Griffith, Bas Leijdekkers
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilCore;
-import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.BaseInspection;
import com.siyeh.ig.psiutils.BoolUtils;
import com.siyeh.ig.psiutils.ControlFlowUtils;
import com.siyeh.ig.psiutils.EquivalenceChecker;
+import com.siyeh.ig.psiutils.ParenthesesUtils;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
}
}
- private static void replaceSimplifiableImplicitReturn(
- PsiIfStatement statement) throws IncorrectOperationException {
+ private static void replaceSimplifiableImplicitReturn(PsiIfStatement statement) {
final PsiExpression condition = statement.getCondition();
if (condition == null) {
return;
nextStatement.delete();
}
- private static void replaceSimplifiableReturn(PsiIfStatement statement)
- throws IncorrectOperationException {
+ private static void replaceSimplifiableReturn(PsiIfStatement statement) {
final PsiExpression condition = statement.getCondition();
if (condition == null) {
return;
}
- final String conditionText = condition.getText();
- @NonNls final String newStatement = "return " + conditionText + ';';
final Collection<PsiComment> comments = PsiTreeUtil.findChildrenOfType(statement, PsiComment.class);
final PsiElement parent = statement.getParent();
for (PsiComment comment : comments) {
parent.addBefore(comment.copy(), statement);
}
+ final String conditionText = condition.getText();
+ final @NonNls String newStatement = "return " + conditionText + ';';
PsiReplacementUtil.replaceStatement(statement, newStatement);
}
- private static void replaceSimplifiableAssignment(PsiIfStatement statement)
- throws IncorrectOperationException {
+ private static void replaceSimplifiableAssignment(PsiIfStatement statement) {
final PsiExpression condition = statement.getCondition();
if (condition == null) {
return;
PsiReplacementUtil.replaceStatement(statement, lhsText + operand + conditionText + ';');
}
- private static void replaceSimplifiableImplicitAssignment(PsiIfStatement statement) throws IncorrectOperationException {
+ private static void replaceSimplifiableImplicitAssignment(PsiIfStatement statement) {
final PsiElement prevStatement = PsiTreeUtil.skipSiblingsBackward(statement, PsiWhiteSpace.class);
if (prevStatement == null) {
return;
}
final String conditionText = condition.getText();
final PsiStatement thenBranch = statement.getThenBranch();
- final PsiExpressionStatement assignmentStatement =
- (PsiExpressionStatement)
- ControlFlowUtils.stripBraces(thenBranch);
+ final PsiExpressionStatement assignmentStatement = (PsiExpressionStatement)ControlFlowUtils.stripBraces(thenBranch);
if (assignmentStatement == null) {
return;
}
- final PsiAssignmentExpression assignmentExpression =
- (PsiAssignmentExpression)assignmentStatement.getExpression();
- final PsiJavaToken operator =
- assignmentExpression.getOperationSign();
+ final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression)assignmentStatement.getExpression();
+ final PsiJavaToken operator = assignmentExpression.getOperationSign();
final String operand = operator.getText();
final PsiExpression lhs = assignmentExpression.getLExpression();
final String lhsText = lhs.getText();
return;
}
final PsiAssignmentExpression assignmentExpression = (PsiAssignmentExpression) assignmentStatement.getExpression();
- final PsiJavaToken operator =
- assignmentExpression.getOperationSign();
+ final PsiJavaToken operator = assignmentExpression.getOperationSign();
final String operand = operator.getText();
final PsiExpression lhs = assignmentExpression.getLExpression();
final String lhsText = lhs.getText();
return false;
}
- public static boolean isSimplifiableImplicitReturn(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableImplicitReturn(PsiIfStatement ifStatement) {
return isSimplifiableImplicitReturn(ifStatement, PsiKeyword.TRUE, PsiKeyword.FALSE);
}
- public static boolean isSimplifiableImplicitReturnNegated(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableImplicitReturnNegated(PsiIfStatement ifStatement) {
return isSimplifiableImplicitReturn(ifStatement, PsiKeyword.FALSE, PsiKeyword.TRUE);
}
- public static boolean isSimplifiableImplicitReturn(PsiIfStatement ifStatement, String thenReturn, String elseReturn) {
+ private static boolean isSimplifiableImplicitReturn(PsiIfStatement ifStatement, String thenReturn, String elseReturn) {
if (ifStatement.getElseBranch() != null) {
return false;
}
if (!(nextStatement instanceof PsiStatement)) {
return false;
}
-
final PsiStatement elseBranch = (PsiStatement)nextStatement;
- return ConditionalUtils.isReturn(thenBranch, thenReturn) && ConditionalUtils.isReturn(elseBranch, elseReturn);
+ return isReturn(thenBranch, thenReturn) && isReturn(elseBranch, elseReturn);
}
- public static boolean isSimplifiableReturn(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableReturn(PsiIfStatement ifStatement) {
return isSimplifiableReturn(ifStatement, PsiKeyword.TRUE, PsiKeyword.FALSE);
}
- public static boolean isSimplifiableReturnNegated(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableReturnNegated(PsiIfStatement ifStatement) {
return isSimplifiableReturn(ifStatement, PsiKeyword.FALSE, PsiKeyword.TRUE);
}
- public static boolean isSimplifiableReturn(PsiIfStatement ifStatement, String thenReturn, String elseReturn) {
+ private static boolean isSimplifiableReturn(PsiIfStatement ifStatement, String thenReturn, String elseReturn) {
final PsiStatement thenBranch = ControlFlowUtils.stripBraces(ifStatement.getThenBranch());
final PsiStatement elseBranch = ControlFlowUtils.stripBraces(ifStatement.getElseBranch());
- return ConditionalUtils.isReturn(thenBranch, thenReturn) && ConditionalUtils.isReturn(elseBranch, elseReturn);
+ return isReturn(thenBranch, thenReturn) && isReturn(elseBranch, elseReturn);
}
- public static boolean isSimplifiableAssignment(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableAssignment(PsiIfStatement ifStatement) {
return isSimplifiableAssignment(ifStatement, PsiKeyword.TRUE, PsiKeyword.FALSE);
}
- public static boolean isSimplifiableAssignmentNegated(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableAssignmentNegated(PsiIfStatement ifStatement) {
return isSimplifiableAssignment(ifStatement, PsiKeyword.FALSE, PsiKeyword.TRUE);
}
- public static boolean isSimplifiableAssignment(PsiIfStatement ifStatement, String thenAssignment, String elseAssignment) {
+ private static boolean isSimplifiableAssignment(PsiIfStatement ifStatement, String thenAssignment, String elseAssignment) {
final PsiStatement thenBranch = ControlFlowUtils.stripBraces(ifStatement.getThenBranch());
final PsiStatement elseBranch = ControlFlowUtils.stripBraces(ifStatement.getElseBranch());
return isSimplifiableAssignment(thenBranch, elseBranch, thenAssignment, elseAssignment);
}
- public static boolean isSimplifiableImplicitAssignment(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableImplicitAssignment(PsiIfStatement ifStatement) {
return isSimplifiableImplicitAssignment(ifStatement, PsiKeyword.TRUE, PsiKeyword.FALSE);
}
- public static boolean isSimplifiableImplicitAssignmentNegated(PsiIfStatement ifStatement) {
+ private static boolean isSimplifiableImplicitAssignmentNegated(PsiIfStatement ifStatement) {
return isSimplifiableImplicitAssignment(ifStatement, PsiKeyword.FALSE, PsiKeyword.TRUE);
}
- public static boolean isSimplifiableImplicitAssignment(PsiIfStatement ifStatement, String thenAssignment, String elseAssignment) {
+ private static boolean isSimplifiableImplicitAssignment(PsiIfStatement ifStatement, String thenAssignment, String elseAssignment) {
if (ifStatement.getElseBranch() != null) {
return false;
}
PsiStatement thenBranch = ifStatement.getThenBranch();
thenBranch = ControlFlowUtils.stripBraces(thenBranch);
- final PsiElement nextStatement =
- PsiTreeUtil.skipSiblingsBackward(ifStatement, PsiWhiteSpace.class);
+ final PsiElement nextStatement = PsiTreeUtil.skipSiblingsBackward(ifStatement, PsiWhiteSpace.class);
if (!(nextStatement instanceof PsiStatement)) {
return false;
}
PsiStatement elseBranch,
String thenAssignment,
String elseAssignment) {
- if (ConditionalUtils.isAssignment(thenBranch, thenAssignment) &&
- ConditionalUtils.isAssignment(elseBranch, elseAssignment)) {
- final PsiExpressionStatement thenExpressionStatement =
- (PsiExpressionStatement)thenBranch;
- final PsiAssignmentExpression thenExpression =
- (PsiAssignmentExpression)
- thenExpressionStatement.getExpression();
- final PsiExpressionStatement elseExpressionStatement =
- (PsiExpressionStatement)elseBranch;
- final PsiAssignmentExpression elseExpression =
- (PsiAssignmentExpression)
- elseExpressionStatement.getExpression();
- final IElementType thenTokenType = thenExpression.getOperationTokenType();
- if (!thenTokenType.equals(elseExpression.getOperationTokenType())) {
- return false;
- }
- final PsiExpression thenLhs = thenExpression.getLExpression();
- final PsiExpression elseLhs = elseExpression.getLExpression();
- return EquivalenceChecker.getCanonicalPsiEquivalence().expressionsAreEquivalent(thenLhs, elseLhs);
+ if (!isAssignment(thenBranch, thenAssignment) || !isAssignment(elseBranch, elseAssignment)) {
+ return false;
+ }
+ final PsiExpressionStatement thenExpressionStatement = (PsiExpressionStatement)thenBranch;
+ final PsiAssignmentExpression thenExpression = (PsiAssignmentExpression)thenExpressionStatement.getExpression();
+ final PsiExpressionStatement elseExpressionStatement = (PsiExpressionStatement)elseBranch;
+ final PsiAssignmentExpression elseExpression = (PsiAssignmentExpression)elseExpressionStatement.getExpression();
+ final IElementType thenTokenType = thenExpression.getOperationTokenType();
+ if (!thenTokenType.equals(elseExpression.getOperationTokenType())) {
+ return false;
+ }
+ final PsiExpression thenLhs = thenExpression.getLExpression();
+ final PsiExpression elseLhs = elseExpression.getLExpression();
+ return EquivalenceChecker.getCanonicalPsiEquivalence().expressionsAreEquivalent(thenLhs, elseLhs);
+ }
+
+ private static boolean isReturn(PsiStatement statement, String value) {
+ if (!(statement instanceof PsiReturnStatement)) {
+ return false;
+ }
+ final PsiReturnStatement returnStatement = (PsiReturnStatement)statement;
+ final PsiExpression returnValue = ParenthesesUtils.stripParentheses(returnStatement.getReturnValue());
+ return returnValue != null && value.equals(returnValue.getText());
+ }
+
+ private static boolean isAssignment(PsiStatement statement, String value) {
+ if (!(statement instanceof PsiExpressionStatement)) {
+ return false;
}
- else {
+ final PsiExpressionStatement expressionStatement = (PsiExpressionStatement)statement;
+ final PsiExpression expression = expressionStatement.getExpression();
+ if (!(expression instanceof PsiAssignmentExpression)) {
return false;
}
+ final PsiAssignmentExpression assignment = (PsiAssignmentExpression)expression;
+ final PsiExpression rhs = ParenthesesUtils.stripParentheses(assignment.getRExpression());
+ return rhs != null && value.equals(rhs.getText());
}
}
\ No newline at end of file