mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
separate element types for left and right shifts
This commit is contained in:
@@ -17,15 +17,20 @@
|
||||
package org.jetbrains.plugins.groovy.lang.lexer;
|
||||
|
||||
import com.intellij.psi.TokenType;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
|
||||
import com.intellij.util.containers.hash.HashMap;
|
||||
|
||||
import static org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.*;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Utility classdef, tha contains various useful TokenSets
|
||||
*
|
||||
* @author ilyas
|
||||
*/
|
||||
public abstract class TokenSets implements GroovyTokenTypes, GroovyElementTypes {
|
||||
public abstract class TokenSets {
|
||||
|
||||
public static TokenSet COMMENTS_TOKEN_SET = TokenSet.create(
|
||||
mSL_COMMENT,
|
||||
@@ -150,11 +155,45 @@ public abstract class TokenSets implements GroovyTokenTypes, GroovyElementTypes
|
||||
|
||||
public static final TokenSet POSTFIX_UNARY_OP_SET = TokenSet.create(mDEC, mINC);
|
||||
|
||||
public static final TokenSet BINARY_OP_SET = TokenSet.create(mBAND, mBOR, mBXOR, mDIV, mEQUAL, mGE, mGT, mLAND, mLOR, mLT, mLE, mMINUS,
|
||||
mMOD, mPLUS, mSTAR, mSTAR_STAR, mNOT_EQUAL, mCOMPARE_TO,
|
||||
COMPOSITE_SHIFT_SIGN, kIN, kINSTANCEOF, kAS);
|
||||
public static final TokenSet BINARY_OP_SET = TokenSet.create(mBAND, mBOR, mBXOR, mDIV, mEQUAL, mGE, mGT, mLOR, mLT, mLE, mMINUS, kAS, kIN,
|
||||
mMOD, mPLUS, mSTAR, mSTAR_STAR, mNOT_EQUAL, mCOMPARE_TO, mLAND, kINSTANCEOF,
|
||||
COMPOSITE_LSHIFT_SIGN, COMPOSITE_RSHIFT_SIGN, COMPOSITE_TRIPLE_SHIFT_SIGN);
|
||||
|
||||
public static final TokenSet DOTS = TokenSet.create(mSPREAD_DOT, mOPTIONAL_DOT, mMEMBER_POINTER, mDOT);
|
||||
|
||||
public static final TokenSet WHITE_SPACES_OR_COMMENTS = TokenSet.orSet(WHITE_SPACES_SET, COMMENT_SET);
|
||||
|
||||
public static final Map<IElementType, IElementType> ASSIGNMENTS_TO_OPERATORS = new HashMap<IElementType, IElementType>();
|
||||
static {
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mMINUS_ASSIGN, mMINUS);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mPLUS_ASSIGN, mPLUS);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mDIV_ASSIGN, mDIV);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mSTAR_ASSIGN, mSTAR);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mMOD_ASSIGN, mMOD);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mSL_ASSIGN, COMPOSITE_LSHIFT_SIGN);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mSR_ASSIGN, COMPOSITE_RSHIFT_SIGN);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mBSR_ASSIGN, COMPOSITE_TRIPLE_SHIFT_SIGN);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mBAND_ASSIGN, mBAND);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mBOR_ASSIGN, mBOR);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mBXOR_ASSIGN, mBXOR);
|
||||
ASSIGNMENTS_TO_OPERATORS.put(mSTAR_STAR_ASSIGN, mSTAR_STAR);
|
||||
}
|
||||
|
||||
public static final TokenSet ASSIGNMENTS = TokenSet.create(
|
||||
mASSIGN,
|
||||
mPLUS_ASSIGN,
|
||||
mMINUS_ASSIGN,
|
||||
mSTAR_ASSIGN,
|
||||
mDIV_ASSIGN,
|
||||
mMOD_ASSIGN,
|
||||
mSL_ASSIGN,
|
||||
mSR_ASSIGN,
|
||||
mBSR_ASSIGN,
|
||||
mBAND_ASSIGN,
|
||||
mBOR_ASSIGN,
|
||||
mBXOR_ASSIGN,
|
||||
mSTAR_STAR_ASSIGN
|
||||
);
|
||||
|
||||
public static final TokenSet SHIFT_SIGNS = TokenSet.create(COMPOSITE_LSHIFT_SIGN, COMPOSITE_RSHIFT_SIGN, COMPOSITE_TRIPLE_SHIFT_SIGN);
|
||||
}
|
||||
|
||||
@@ -196,7 +196,10 @@ public interface GroovyElementTypes extends GroovyTokenTypes, GroovyDocElementTy
|
||||
GroovyElementType RELATIONAL_EXPRESSION = new GroovyElementType("Relational expression");
|
||||
GroovyElementType SHIFT_EXPRESSION = new GroovyElementType("Shift expression");
|
||||
GroovyElementType RANGE_EXPRESSION = new GroovyElementType("Range expression");
|
||||
GroovyElementType COMPOSITE_SHIFT_SIGN = new GroovyElementType("Composite shift sign");
|
||||
GroovyElementType COMPOSITE_LSHIFT_SIGN = new GroovyElementType("Composite shift sign <<");
|
||||
GroovyElementType COMPOSITE_RSHIFT_SIGN = new GroovyElementType("Composite shift sign >>");
|
||||
GroovyElementType COMPOSITE_TRIPLE_SHIFT_SIGN = new GroovyElementType("Composite shift sign >>>");
|
||||
GroovyElementType MORE_OR_EQUALS_SIGN = new GroovyElementType(">=");
|
||||
GroovyElementType ADDITIVE_EXPRESSION = new GroovyElementType("Additive expression");
|
||||
GroovyElementType MULTIPLICATIVE_EXPRESSION = new GroovyElementType("Multiplicative expression");
|
||||
GroovyElementType POWER_EXPRESSION = new GroovyElementType("Power expression");
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.intellij.psi.tree.IElementType;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.lexer.IGroovyDocElementType;
|
||||
import org.jetbrains.plugins.groovy.lang.groovydoc.psi.GroovyDocPsiCreator;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.GroovyElementType;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiElementImpl;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.auxiliary.GrLabelImpl;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.auxiliary.GrListOrMapImpl;
|
||||
@@ -212,7 +213,7 @@ public class GroovyPsiCreator implements GroovyElementTypes {
|
||||
if (elem.equals(RELATIONAL_EXPRESSION)) return new GrRelationalExpressionImpl(node);
|
||||
if (elem.equals(SHIFT_EXPRESSION)) return new GrShiftExpressionImpl(node);
|
||||
if (elem.equals(RANGE_EXPRESSION)) return new GrRangeExpressionImpl(node);
|
||||
if (elem.equals(COMPOSITE_SHIFT_SIGN)) return new GrOperationSignImpl(node);
|
||||
if (TokenSets.SHIFT_SIGNS.contains(elem)) return new GrOperationSignImpl(node);
|
||||
if (elem.equals(ADDITIVE_EXPRESSION)) return new GrAdditiveExpressionImpl(node);
|
||||
if (elem.equals(MULTIPLICATIVE_EXPRESSION)) return new GrMultiplicativeExpressionImpl(node);
|
||||
if (elem.equals(POWER_EXPRESSION)) return new GrPowerExpressionImpl(node);
|
||||
|
||||
+2
-18
@@ -18,8 +18,8 @@ package org.jetbrains.plugins.groovy.lang.parser.parsing.statements.expressions;
|
||||
|
||||
import com.intellij.lang.PsiBuilder;
|
||||
import com.intellij.lang.PsiBuilder.Marker;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.plugins.groovy.GroovyBundle;
|
||||
import org.jetbrains.plugins.groovy.lang.lexer.TokenSets;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.GroovyParser;
|
||||
import org.jetbrains.plugins.groovy.lang.parser.parsing.statements.TupleParse;
|
||||
@@ -31,22 +31,6 @@ import org.jetbrains.plugins.groovy.lang.parser.parsing.util.ParserUtils;
|
||||
*/
|
||||
public class AssignmentExpression implements GroovyElementTypes {
|
||||
|
||||
private static final TokenSet ASSIGNMENTS = TokenSet.create(
|
||||
mASSIGN,
|
||||
mPLUS_ASSIGN,
|
||||
mMINUS_ASSIGN,
|
||||
mSTAR_ASSIGN,
|
||||
mDIV_ASSIGN,
|
||||
mMOD_ASSIGN,
|
||||
mSL_ASSIGN,
|
||||
mBAND_ASSIGN,
|
||||
mBOR_ASSIGN,
|
||||
mBXOR_ASSIGN,
|
||||
mSTAR_STAR_ASSIGN,
|
||||
mSR_ASSIGN,
|
||||
mBSR_ASSIGN
|
||||
);
|
||||
|
||||
public static boolean parse(PsiBuilder builder, GroovyParser parser) {
|
||||
return parse(builder, parser, false);
|
||||
}
|
||||
@@ -55,7 +39,7 @@ public class AssignmentExpression implements GroovyElementTypes {
|
||||
Marker marker = builder.mark();
|
||||
final boolean isTuple = ParserUtils.lookAhead(builder, mLPAREN, mIDENT, mCOMMA);
|
||||
if (parseSide(builder, parser, isTuple,comExprAllowed)) {
|
||||
if (ParserUtils.getToken(builder, ASSIGNMENTS)) {
|
||||
if (ParserUtils.getToken(builder, TokenSets.ASSIGNMENTS)) {
|
||||
ParserUtils.getToken(builder, mNLS);
|
||||
if (!parse(builder, parser, comExprAllowed)) {
|
||||
builder.error(GroovyBundle.message("expression.expected"));
|
||||
|
||||
+15
-5
@@ -80,18 +80,28 @@ public class ShiftExpression implements GroovyElementTypes {
|
||||
builder.getTokenText(); //todo[peter] remove look-ahead assertion
|
||||
builder.advanceLexer();
|
||||
}
|
||||
marker.done(COMPOSITE_SHIFT_SIGN);
|
||||
marker.done(COMPOSITE_TRIPLE_SHIFT_SIGN);
|
||||
return true;
|
||||
} else if (ParserUtils.lookAhead(builder, mLT, mLT) ||
|
||||
ParserUtils.lookAhead(builder, mGT, mGT)) {
|
||||
}
|
||||
else if (ParserUtils.lookAhead(builder, mLT, mLT)) {
|
||||
PsiBuilder.Marker marker = builder.mark();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
builder.getTokenText(); //todo[peter] remove look-ahead assertion
|
||||
builder.advanceLexer();
|
||||
}
|
||||
marker.done(COMPOSITE_SHIFT_SIGN);
|
||||
marker.done(COMPOSITE_LSHIFT_SIGN);
|
||||
return true;
|
||||
} else {
|
||||
}
|
||||
else if (ParserUtils.lookAhead(builder, mGT, mGT)) {
|
||||
PsiBuilder.Marker marker = builder.mark();
|
||||
for (int i = 0; i < 2; i++) {
|
||||
builder.getTokenText(); //todo[peter] remove look-ahead assertion
|
||||
builder.advanceLexer();
|
||||
}
|
||||
marker.done(COMPOSITE_RSHIFT_SIGN);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -82,7 +82,7 @@ public class RelationalExpression implements GroovyElementTypes {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
builder.advanceLexer();
|
||||
}
|
||||
marker.done(COMPOSITE_SHIFT_SIGN);
|
||||
marker.done(MORE_OR_EQUALS_SIGN);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
||||
@@ -62,8 +62,7 @@ import java.util.List;
|
||||
|
||||
import static com.intellij.psi.impl.source.tree.Factory.createSingleLeafElement;
|
||||
import static org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes.*;
|
||||
import static org.jetbrains.plugins.groovy.lang.lexer.TokenSets.RELATIONS;
|
||||
import static org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes.COMPOSITE_SHIFT_SIGN;
|
||||
import static org.jetbrains.plugins.groovy.lang.lexer.TokenSets.*;
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -176,7 +175,7 @@ public class PsiImplUtil {
|
||||
}
|
||||
return RELATIONS.contains(opToken) || opToken == mCOMPARE_TO
|
||||
|| opToken == mREGEX_FIND || opToken == mREGEX_MATCH
|
||||
|| opToken == COMPOSITE_SHIFT_SIGN
|
||||
|| SHIFT_SIGNS.contains(opToken)
|
||||
|| opToken==mSTAR;
|
||||
}
|
||||
|
||||
@@ -263,7 +262,7 @@ public class PsiImplUtil {
|
||||
if (opToken == mSTAR_STAR) priority = 7;
|
||||
else if (opToken == mSTAR || opToken == mDIV) priority = 8;
|
||||
else if (opToken == mPLUS || opToken == mMINUS) priority = 9;
|
||||
else if (opToken == COMPOSITE_SHIFT_SIGN) priority = 10;
|
||||
else if (SHIFT_SIGNS.contains(opToken)) priority = 10;
|
||||
else if (RELATIONS.contains(opToken)) priority = 12;
|
||||
else if (opToken == mEQUAL || opToken == mNOT_EQUAL || opToken == mCOMPARE_TO) priority = 13;
|
||||
else if (opToken == mREGEX_FIND || opToken == mREGEX_MATCH) priority = 14;
|
||||
|
||||
Reference in New Issue
Block a user