2 * Copyright 2003-2006 Dave Griffith, Bas Leijdekkers
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
16 package com
.siyeh
.ig
.psiutils
;
18 import com
.intellij
.psi
.JavaTokenType
;
19 import com
.intellij
.psi
.PsiBinaryExpression
;
20 import com
.intellij
.psi
.PsiExpression
;
21 import com
.intellij
.psi
.PsiJavaToken
;
22 import com
.intellij
.psi
.tree
.IElementType
;
23 import org
.jetbrains
.annotations
.NotNull
;
24 import org
.jetbrains
.annotations
.Nullable
;
26 import java
.util
.HashMap
;
27 import java
.util
.HashSet
;
31 public class ComparisonUtils
{
33 private ComparisonUtils() {
37 private static final Set
<IElementType
> s_comparisonTokens
=
38 new HashSet
<IElementType
>(6);
40 private static final Map
<IElementType
,String
> s_swappedComparisons
=
41 new HashMap
<IElementType
, String
>(6);
43 private static final Map
<IElementType
,String
> s_invertedComparisons
=
44 new HashMap
<IElementType
, String
>(6);
48 s_comparisonTokens
.add(JavaTokenType
.EQEQ
);
49 s_comparisonTokens
.add(JavaTokenType
.NE
);
50 s_comparisonTokens
.add(JavaTokenType
.GT
);
51 s_comparisonTokens
.add(JavaTokenType
.LT
);
52 s_comparisonTokens
.add(JavaTokenType
.GE
);
53 s_comparisonTokens
.add(JavaTokenType
.LE
);
55 s_swappedComparisons
.put(JavaTokenType
.EQEQ
, "==");
56 s_swappedComparisons
.put(JavaTokenType
.NE
, "!=");
57 s_swappedComparisons
.put(JavaTokenType
.GT
, "<");
58 s_swappedComparisons
.put(JavaTokenType
.LT
, ">");
59 s_swappedComparisons
.put(JavaTokenType
.GE
, "<=");
60 s_swappedComparisons
.put(JavaTokenType
.LE
, ">=");
62 s_invertedComparisons
.put(JavaTokenType
.EQEQ
, "!=");
63 s_invertedComparisons
.put(JavaTokenType
.NE
, "==");
64 s_invertedComparisons
.put(JavaTokenType
.GT
, "<=");
65 s_invertedComparisons
.put(JavaTokenType
.LT
, ">=");
66 s_invertedComparisons
.put(JavaTokenType
.GE
, "<");
67 s_invertedComparisons
.put(JavaTokenType
.LE
, ">");
71 public static boolean isComparison(@Nullable PsiExpression expression
) {
72 if(!(expression
instanceof PsiBinaryExpression
)) {
75 final PsiBinaryExpression binaryExpression
=
76 (PsiBinaryExpression
) expression
;
77 final PsiJavaToken sign
= binaryExpression
.getOperationSign();
78 final IElementType tokenType
= sign
.getTokenType();
79 return s_comparisonTokens
.contains(tokenType
);
82 public static String
getFlippedComparison(@NotNull PsiJavaToken token
) {
83 final IElementType tokenType
= token
.getTokenType();
84 return s_swappedComparisons
.get(tokenType
);
87 public static boolean isEqualityComparison(
88 @NotNull PsiBinaryExpression expression
) {
89 final IElementType tokenType
= expression
.getOperationTokenType();
90 return tokenType
.equals(JavaTokenType
.EQEQ
) ||
91 tokenType
.equals(JavaTokenType
.NE
);
94 public static String
getNegatedComparison(@NotNull PsiJavaToken token
) {
95 final IElementType tokenType
= token
.getTokenType();
96 return s_invertedComparisons
.get(tokenType
);