IDEA-95818 Inspection to flip between operator and method call. Revert GroovyTokentTypes shift operations.

This commit is contained in:
alexey.afanasiev
2017-01-16 12:43:11 +03:00
parent dc43b371e4
commit 27a29922bb
14 changed files with 46 additions and 41 deletions
@@ -34,7 +34,7 @@ import org.jetbrains.plugins.gradle.settings.GradleExtensionsSettings
import org.jetbrains.plugins.gradle.settings.GradleExtensionsSettings.GradleProp
import org.jetbrains.plugins.gradle.settings.GradleExtensionsSettings.GradleTask
import org.jetbrains.plugins.groovy.dsl.holders.NonCodeMembersHolder.DOCUMENTATION
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.mLSHIFT
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.COMPOSITE_LSHIFT_SIGN
import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression
@@ -230,7 +230,7 @@ class GradleExtensionsContributor : GradleMethodContextContributor {
val closureInLeftShiftMethod = groovyClosure().withTreeParent(
groovyBinaryExpression().with(object : PatternCondition<GrBinaryExpression?>("leftShiftCondition") {
override fun accepts(t: GrBinaryExpression, context: ProcessingContext?): Boolean {
return t.operationTokenType == mLSHIFT
return t.operationTokenType == COMPOSITE_LSHIFT_SIGN
}
}))
@@ -262,7 +262,7 @@ class GradleExtensionsContributor : GradleMethodContextContributor {
buffer.append(" " + gradleProp.name)
val hasInitializer = !gradleProp.value.isNullOrBlank()
if (hasInitializer) {
buffer.append(" = ")
buffer.append(" = ");
val longString = gradleProp.value!!.toString().length > 100
if (longString) {
buffer.append("<blockquote>")
@@ -21,7 +21,7 @@ import com.intellij.psi.scope.PsiScopeProcessor;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.gradle.util.GradleLog;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.arguments.GrArgumentList;
@@ -149,6 +149,6 @@ public class GradleResolverUtil {
public static boolean isLShiftElement(@Nullable PsiElement psiElement) {
return (psiElement instanceof GrBinaryExpression &&
GroovyTokenTypes.mLSHIFT.equals(GrBinaryExpression.class.cast(psiElement).getOperationTokenType()));
GroovyElementTypes.COMPOSITE_LSHIFT_SIGN.equals(GrBinaryExpression.class.cast(psiElement).getOperationTokenType()));
}
}
@@ -16,6 +16,7 @@
package org.jetbrains.plugins.groovy.codeInspection.changeToOperator.transformations;
import com.intellij.util.containers.ContainerUtil.ImmutableMapBuilder;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import java.util.Map;
@@ -44,9 +45,9 @@ public interface Transformations {
.put(OR, new SimpleBinaryTransformation(mBOR))
.put(AND, new SimpleBinaryTransformation(mBAND))
.put(XOR, new SimpleBinaryTransformation(mBXOR))
.put(LEFT_SHIFT, new SimpleBinaryTransformation(mLSHIFT))
.put(RIGHT_SHIFT, new SimpleBinaryTransformation(mRSHIFT))
.put(RIGHT_SHIFT_UNSIGNED, new SimpleBinaryTransformation(mTRIPLE_SHIFT))
.put(LEFT_SHIFT, new SimpleBinaryTransformation(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN))
.put(RIGHT_SHIFT, new SimpleBinaryTransformation(GroovyElementTypes.COMPOSITE_RSHIFT_SIGN))
.put(RIGHT_SHIFT_UNSIGNED, new SimpleBinaryTransformation(GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN))
.put(AS_TYPE, new SimpleBinaryTransformation(kAS))
.put(IS_CASE, new IsCaseTransformation())
.put(EQUALS, new EqualsTransformation())
@@ -145,10 +145,6 @@ public interface GroovyTokenTypes {
IElementType mSTAR_STAR_ASSIGN = new GroovyElementType("**=");
IElementType mCLOSABLE_BLOCK_OP = new GroovyElementType("->");
IElementType mAT = new GroovyElementType("@");
IElementType mLSHIFT = new GroovyElementType("<<");
IElementType mRSHIFT = new GroovyElementType(">>");
IElementType mTRIPLE_SHIFT = new GroovyElementType(">>>");
/* **************************************************************************************************
* Keywords (in alphabetic order)
@@ -210,9 +210,9 @@ public abstract class TokenSets {
GroovyTokenTypes.mSTAR_STAR, GroovyTokenTypes.mNOT_EQUAL,
GroovyTokenTypes.mCOMPARE_TO, GroovyTokenTypes.mLAND,
GroovyTokenTypes.kINSTANCEOF,
GroovyTokenTypes.mLSHIFT,
GroovyTokenTypes.mRSHIFT,
GroovyTokenTypes.mTRIPLE_SHIFT,
GroovyElementTypes.COMPOSITE_LSHIFT_SIGN,
GroovyElementTypes.COMPOSITE_RSHIFT_SIGN,
GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN,
GroovyTokenTypes.mREGEX_FIND, GroovyTokenTypes.mREGEX_MATCH,
GroovyTokenTypes.mRANGE_INCLUSIVE, GroovyTokenTypes.mRANGE_EXCLUSIVE);
@@ -253,9 +253,9 @@ public abstract class TokenSets {
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mDIV_ASSIGN, GroovyTokenTypes.mDIV);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSTAR_ASSIGN, GroovyTokenTypes.mSTAR);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mMOD_ASSIGN, GroovyTokenTypes.mMOD);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSL_ASSIGN, GroovyTokenTypes.mLSHIFT);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSR_ASSIGN, GroovyTokenTypes.mRSHIFT);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBSR_ASSIGN, GroovyTokenTypes.mTRIPLE_SHIFT);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSL_ASSIGN, GroovyElementTypes.COMPOSITE_LSHIFT_SIGN);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mSR_ASSIGN, GroovyElementTypes.COMPOSITE_RSHIFT_SIGN);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBSR_ASSIGN, GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBAND_ASSIGN, GroovyTokenTypes.mBAND);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBOR_ASSIGN, GroovyTokenTypes.mBOR);
ASSIGNMENTS_TO_OPERATORS.put(GroovyTokenTypes.mBXOR_ASSIGN, GroovyTokenTypes.mBXOR);
@@ -278,9 +278,9 @@ public abstract class TokenSets {
GroovyTokenTypes.mSTAR_STAR_ASSIGN
);
public static final TokenSet SHIFT_SIGNS = TokenSet.create(GroovyTokenTypes.mLSHIFT,
GroovyTokenTypes.mRSHIFT,
GroovyTokenTypes.mTRIPLE_SHIFT);
public static final TokenSet SHIFT_SIGNS = TokenSet.create(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN,
GroovyElementTypes.COMPOSITE_RSHIFT_SIGN,
GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN);
public static final TokenSet CODE_REFERENCE_ELEMENT_NAME_TOKENS = TokenSet.create(GroovyTokenTypes.mIDENT, GroovyTokenTypes.kDEF,
GroovyTokenTypes.kIN, GroovyTokenTypes.kAS,
GroovyTokenTypes.kTRAIT);
@@ -217,6 +217,9 @@ public interface GroovyElementTypes {
GroovyElementType RELATIONAL_EXPRESSION = new GroovyElementType("Relational expression");
GroovyElementType SHIFT_EXPRESSION = new GroovyElementType("Shift expression");
GroovyElementType RANGE_EXPRESSION = new GroovyElementType("Range expression");
GroovyElementType COMPOSITE_LSHIFT_SIGN = new GroovyElementType("<<");
GroovyElementType COMPOSITE_RSHIFT_SIGN = new GroovyElementType(">>");
GroovyElementType COMPOSITE_TRIPLE_SHIFT_SIGN = new GroovyElementType(">>>");
GroovyElementType MORE_OR_EQUALS_SIGN = new GroovyElementType(">=");
GroovyElementType ADDITIVE_EXPRESSION = new GroovyElementType("Additive expression");
GroovyElementType MULTIPLICATIVE_EXPRESSION = new GroovyElementType("Multiplicative expression");
@@ -81,7 +81,7 @@ public class ShiftExpression {
builder.getTokenText(); //todo[peter] remove look-ahead assertion
builder.advanceLexer();
}
marker.done(GroovyTokenTypes.mTRIPLE_SHIFT);
marker.done(GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN);
return true;
}
else if (ParserUtils.lookAhead(builder, GroovyTokenTypes.mLT, GroovyTokenTypes.mLT)) {
@@ -90,7 +90,7 @@ public class ShiftExpression {
builder.getTokenText(); //todo[peter] remove look-ahead assertion
builder.advanceLexer();
}
marker.done(GroovyTokenTypes.mLSHIFT);
marker.done(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN);
return true;
}
else if (ParserUtils.lookAhead(builder, GroovyTokenTypes.mGT, GroovyTokenTypes.mGT)) {
@@ -99,7 +99,7 @@ public class ShiftExpression {
builder.getTokenText(); //todo[peter] remove look-ahead assertion
builder.advanceLexer();
}
marker.done(GroovyTokenTypes.mRSHIFT);
marker.done(GroovyElementTypes.COMPOSITE_RSHIFT_SIGN);
return true;
}
else {
@@ -35,6 +35,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult;
import org.jetbrains.plugins.groovy.lang.psi.api.SpreadState;
@@ -150,9 +151,9 @@ public class TypesUtil {
ourOperationsToOperatorNames.put(GroovyTokenTypes.mLT, COMPARE_TO);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mLE, COMPARE_TO);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mSTAR_STAR, POWER);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mLSHIFT, LEFT_SHIFT);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mRSHIFT, RIGHT_SHIFT);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mTRIPLE_SHIFT, RIGHT_SHIFT_UNSIGNED);
ourOperationsToOperatorNames.put(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, LEFT_SHIFT);
ourOperationsToOperatorNames.put(GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, RIGHT_SHIFT);
ourOperationsToOperatorNames.put(GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN, RIGHT_SHIFT_UNSIGNED);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mEQUAL, EQUALS);
ourOperationsToOperatorNames.put(GroovyTokenTypes.mNOT_EQUAL, EQUALS);
@@ -22,6 +22,7 @@ import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrOperatorExpression;
import java.util.Map;
@@ -49,11 +50,11 @@ public class GrBinaryExpressionTypeCalculators {
MAP.put(GroovyTokenTypes.mSTAR_STAR, GrNumericBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mSTAR_STAR_ASSIGN, GrNumericBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mRSHIFT, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mSR_ASSIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mLSHIFT, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mSL_ASSIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mTRIPLE_SHIFT, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mBSR_ASSIGN, GrDecimalBinaryExpressionTypeCalculator.INSTANCE);
MAP.put(GroovyTokenTypes.mRANGE_EXCLUSIVE, GrRangeExpressionTypeCalculator.INSTANCE);
@@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.utils;
import com.intellij.psi.tree.IElementType;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.*;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.literals.GrLiteral;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrMethodCallExpression;
@@ -99,9 +100,9 @@ public class ParenthesesUtils {
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mBAND, BINARY_AND_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mBOR, BINARY_OR_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mBXOR, BINARY_XOR_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mLSHIFT, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mRSHIFT, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mTRIPLE_SHIFT, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN, SHIFT_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mGT, RELATIONAL_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mGE, RELATIONAL_PRECEDENCE);
s_binaryOperatorPrecedence.put(GroovyTokenTypes.mLT, RELATIONAL_PRECEDENCE);
@@ -24,6 +24,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrListOrMap;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrLabeledStatement;
import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrStatement;
@@ -114,7 +115,7 @@ public class SpockUtils {
PsiElement e = elementUnderLabel;
while (e != null) {
if (e instanceof GrBinaryExpression && ((GrBinaryExpression)e).getOperationTokenType() == GroovyTokenTypes.mLSHIFT) {
if (e instanceof GrBinaryExpression && ((GrBinaryExpression)e).getOperationTokenType() == GroovyElementTypes.COMPOSITE_LSHIFT_SIGN) {
GrBinaryExpression shift = (GrBinaryExpression)e;
GrExpression leftOperand = shift.getLeftOperand();
GrExpression rightOperand = shift.getRightOperand();
@@ -45,7 +45,7 @@ public interface SpacingTokens {
TokenSet BITWISE_OPERATORS = TokenSet.create(GroovyTokenTypes.mBAND, GroovyTokenTypes.mBOR, GroovyTokenTypes.mBXOR);
TokenSet ADDITIVE_OPERATORS = TokenSet.create(GroovyTokenTypes.mPLUS, GroovyTokenTypes.mMINUS);
TokenSet MULTIPLICATIVE_OPERATORS = TokenSet.create(GroovyTokenTypes.mSTAR, GroovyTokenTypes.mDIV, GroovyTokenTypes.mMOD);
TokenSet SHIFT_OPERATORS = TokenSet.create(GroovyTokenTypes.mLSHIFT, GroovyTokenTypes.mRSHIFT,
GroovyTokenTypes.mTRIPLE_SHIFT);
TokenSet SHIFT_OPERATORS = TokenSet.create(GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, GroovyElementTypes.COMPOSITE_RSHIFT_SIGN,
GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN);
TokenSet REGEX_OPERATORS = TokenSet.create(GroovyTokenTypes.mREGEX_FIND, GroovyTokenTypes.mREGEX_MATCH);
}
@@ -72,7 +72,7 @@ public class GroovyWrappingProcessor {
GroovyTokenTypes.kAS, GroovyTokenTypes.kIN,
GroovyTokenTypes.mMOD, GroovyTokenTypes.mPLUS, GroovyTokenTypes.mSTAR, GroovyTokenTypes.mSTAR_STAR, GroovyTokenTypes.mNOT_EQUAL,
GroovyTokenTypes.mCOMPARE_TO, GroovyTokenTypes.mLAND, GroovyTokenTypes.kINSTANCEOF,
GroovyTokenTypes.mLSHIFT, GroovyTokenTypes.mRSHIFT, GroovyTokenTypes.mTRIPLE_SHIFT,
GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN,
GroovyTokenTypes.mREGEX_FIND, GroovyTokenTypes.mREGEX_MATCH, GroovyTokenTypes.mRANGE_INCLUSIVE, GroovyTokenTypes.mRANGE_EXCLUSIVE,
GroovyTokenTypes.mBNOT, GroovyTokenTypes.mLNOT, GroovyTokenTypes.mMINUS, GroovyTokenTypes.mDEC, GroovyTokenTypes.mPLUS,
@@ -80,7 +80,7 @@ public class GroovyWrappingProcessor {
GroovyTokenTypes.mSPREAD_DOT, GroovyTokenTypes.mOPTIONAL_DOT, GroovyTokenTypes.mMEMBER_POINTER, GroovyTokenTypes.mDOT,
GroovyTokenTypes.mLSHIFT, GroovyTokenTypes.mRSHIFT, GroovyTokenTypes.mTRIPLE_SHIFT,
GroovyElementTypes.COMPOSITE_LSHIFT_SIGN, GroovyElementTypes.COMPOSITE_RSHIFT_SIGN, GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN,
GroovyTokenTypes.mLT, GroovyTokenTypes.mGT, GroovyTokenTypes.mLE, GroovyTokenTypes.mGE, GroovyTokenTypes.kIN,
@@ -28,6 +28,7 @@ import com.intellij.util.containers.hash.HashSet;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes;
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
import org.jetbrains.plugins.groovy.lang.psi.GroovyFile;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory;
@@ -482,9 +483,9 @@ public class GenerationUtil {
binOpTypes.put(GroovyTokenTypes.mSTAR_ASSIGN, Pair.create("*", GroovyTokenTypes.mSTAR));
binOpTypes.put(GroovyTokenTypes.mDIV_ASSIGN, Pair.create("/", GroovyTokenTypes.mDIV));
binOpTypes.put(GroovyTokenTypes.mMOD_ASSIGN, Pair.create("%", GroovyTokenTypes.mMOD));
binOpTypes.put(GroovyTokenTypes.mSL_ASSIGN, Pair.create("<<", GroovyTokenTypes.mLSHIFT));
binOpTypes.put(GroovyTokenTypes.mSR_ASSIGN, Pair.create(">>", GroovyTokenTypes.mRSHIFT));
binOpTypes.put(GroovyTokenTypes.mBSR_ASSIGN, Pair.create(">>>", GroovyTokenTypes.mTRIPLE_SHIFT));
binOpTypes.put(GroovyTokenTypes.mSL_ASSIGN, new Pair<>("<<", GroovyElementTypes.COMPOSITE_LSHIFT_SIGN));
binOpTypes.put(GroovyTokenTypes.mSR_ASSIGN, new Pair<>(">>", GroovyElementTypes.COMPOSITE_RSHIFT_SIGN));
binOpTypes.put(GroovyTokenTypes.mBSR_ASSIGN, new Pair<>(">>>", GroovyElementTypes.COMPOSITE_TRIPLE_SHIFT_SIGN));
binOpTypes.put(GroovyTokenTypes.mBAND_ASSIGN, Pair.create("&", GroovyTokenTypes.mBAND));
binOpTypes.put(GroovyTokenTypes.mBOR_ASSIGN, Pair.create("|", GroovyTokenTypes.mBOR));
binOpTypes.put(GroovyTokenTypes.mBXOR_ASSIGN, Pair.create("^", GroovyTokenTypes.mBXOR));