Remove ComparisonUtils duplication
[idea/community.git] / plugins / IntentionPowerPak / src / com / siyeh / ipp / expression / ExpressionPredicate.java
1 /*
2  * Copyright 2007-2014 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.expression;
17
18 import com.intellij.psi.PsiElement;
19 import com.intellij.psi.PsiExpression;
20 import com.intellij.psi.PsiJavaToken;
21 import com.intellij.psi.PsiPolyadicExpression;
22 import com.siyeh.ig.psiutils.ComparisonUtils;
23 import com.siyeh.ipp.base.PsiElementPredicate;
24
25 class ExpressionPredicate implements PsiElementPredicate {
26
27   public boolean satisfiedBy(PsiElement element) {
28     if (!(element instanceof PsiJavaToken)) {
29       return false;
30     }
31     final PsiElement parent = element.getParent();
32     if (!(parent instanceof PsiPolyadicExpression)) {
33       return false;
34     }
35     final PsiPolyadicExpression expression = (PsiPolyadicExpression)parent;
36     final PsiExpression[] operands = expression.getOperands();
37     if (operands.length < 2) {
38       return false;
39     }
40     PsiExpression prevOperand = null;
41     for (PsiExpression operand : operands) {
42       final PsiJavaToken token = expression.getTokenBeforeOperand(operand);
43       if (element == token) {
44         if (prevOperand == null || operand.getText().equals(prevOperand.getText())) {
45           return false;
46         }
47         break;
48       }
49       prevOperand = operand;
50     }
51     return !ComparisonUtils.isComparison(expression);
52   }
53 }