8f0d7936878feb04b1e6c759b480f8e56b1a94ed
[idea/community.git] / plugins / IntentionPowerPak / src / com / siyeh / ipp / bool / FlipComparisonIntention.java
1 /*
2  * Copyright 2003-2009 Dave Griffith, Bas Leijdekkers
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.siyeh.ipp.bool;
17
18 import com.intellij.psi.PsiBinaryExpression;
19 import com.intellij.psi.PsiElement;
20 import com.intellij.psi.PsiExpression;
21 import com.intellij.psi.PsiJavaToken;
22 import com.intellij.psi.tree.IElementType;
23 import com.intellij.util.IncorrectOperationException;
24 import com.siyeh.IntentionPowerPackBundle;
25 import com.siyeh.ig.PsiReplacementUtil;
26 import com.siyeh.ipp.base.MutablyNamedIntention;
27 import com.siyeh.ipp.base.PsiElementPredicate;
28 import com.siyeh.ipp.psiutils.ComparisonUtils;
29 import org.jetbrains.annotations.NotNull;
30
31 public class FlipComparisonIntention extends MutablyNamedIntention {
32
33   public String getTextForElement(PsiElement element) {
34     String operatorText = "";
35     String flippedOperatorText = "";
36     final PsiBinaryExpression expression = (PsiBinaryExpression)element;
37     if (expression != null) {
38       final PsiJavaToken sign = expression.getOperationSign();
39       operatorText = sign.getText();
40       flippedOperatorText =
41         ComparisonUtils.getFlippedComparison(sign);
42     }
43     if (operatorText.equals(flippedOperatorText)) {
44       return IntentionPowerPackBundle.message("flip.smth.intention.name",
45                                               operatorText);
46     }
47     else {
48       return IntentionPowerPackBundle.message(
49         "flip.comparison.intention.name",
50         operatorText, flippedOperatorText);
51     }
52   }
53
54   @NotNull
55   public PsiElementPredicate getElementPredicate() {
56     return new ComparisonPredicate();
57   }
58
59   public void processIntention(@NotNull PsiElement element)
60     throws IncorrectOperationException {
61     final PsiBinaryExpression expression =
62       (PsiBinaryExpression)element;
63     final PsiExpression lhs = expression.getLOperand();
64     final PsiExpression rhs = expression.getROperand();
65     final IElementType tokenType = expression.getOperationTokenType();
66     assert rhs != null;
67     final String expString = rhs.getText() +
68                              ComparisonUtils.getFlippedComparison(tokenType) +
69                              lhs.getText();
70     PsiReplacementUtil.replaceExpression(expression, expString);
71   }
72 }