in android/databinding/parser/BindingExpressionParser.java [956:1376]
private ExpressionContext expression(int _p) throws RecognitionException {
ParserRuleContext _parentctx = _ctx;
int _parentState = getState();
ExpressionContext _localctx = new ExpressionContext(_ctx, _parentState);
ExpressionContext _prevctx = _localctx;
int _startState = 12;
enterRecursionRule(_localctx, 12, RULE_expression, _p);
int _la;
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
setState(100);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,6,_ctx) ) {
case 1:
{
_localctx = new GroupingContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(82);
match(T__4);
setState(83);
expression(0);
setState(84);
match(T__5);
}
break;
case 2:
{
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(86);
literal();
}
break;
case 3:
{
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(87);
match(VoidLiteral);
}
break;
case 4:
{
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(88);
identifier();
}
break;
case 5:
{
_localctx = new PrimaryContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(89);
classExtraction();
}
break;
case 6:
{
_localctx = new ResourceContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(90);
resources();
}
break;
case 7:
{
_localctx = new CastOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(91);
match(T__4);
setState(92);
type();
setState(93);
match(T__5);
setState(94);
expression(16);
}
break;
case 8:
{
_localctx = new UnaryOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(96);
((UnaryOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__10 || _la==T__11) ) {
((UnaryOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(97);
expression(15);
}
break;
case 9:
{
_localctx = new UnaryOpContext(_localctx);
_ctx = _localctx;
_prevctx = _localctx;
setState(98);
((UnaryOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__12 || _la==T__13) ) {
((UnaryOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(99);
expression(14);
}
break;
}
_ctx.stop = _input.LT(-1);
setState(165);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,9,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
_prevctx = _localctx;
{
setState(163);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) {
case 1:
{
_localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(102);
if (!(precpred(_ctx, 13))) throw new FailedPredicateException(this, "precpred(_ctx, 13)");
setState(103);
((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__14) | (1L << T__15) | (1L << T__16))) != 0)) ) {
((MathOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(104);
((MathOpContext)_localctx).right = expression(14);
}
break;
case 2:
{
_localctx = new MathOpContext(new ExpressionContext(_parentctx, _parentState));
((MathOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(105);
if (!(precpred(_ctx, 12))) throw new FailedPredicateException(this, "precpred(_ctx, 12)");
setState(106);
((MathOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__10 || _la==T__11) ) {
((MathOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(107);
((MathOpContext)_localctx).right = expression(13);
}
break;
case 3:
{
_localctx = new BitShiftOpContext(new ExpressionContext(_parentctx, _parentState));
((BitShiftOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(108);
if (!(precpred(_ctx, 11))) throw new FailedPredicateException(this, "precpred(_ctx, 11)");
setState(109);
((BitShiftOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__17) | (1L << T__18) | (1L << T__19))) != 0)) ) {
((BitShiftOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(110);
((BitShiftOpContext)_localctx).right = expression(12);
}
break;
case 4:
{
_localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(111);
if (!(precpred(_ctx, 10))) throw new FailedPredicateException(this, "precpred(_ctx, 10)");
setState(112);
((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__20) | (1L << T__21) | (1L << T__22) | (1L << T__23))) != 0)) ) {
((ComparisonOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(113);
((ComparisonOpContext)_localctx).right = expression(11);
}
break;
case 5:
{
_localctx = new ComparisonOpContext(new ExpressionContext(_parentctx, _parentState));
((ComparisonOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(114);
if (!(precpred(_ctx, 8))) throw new FailedPredicateException(this, "precpred(_ctx, 8)");
setState(115);
((ComparisonOpContext)_localctx).op = _input.LT(1);
_la = _input.LA(1);
if ( !(_la==T__25 || _la==T__26) ) {
((ComparisonOpContext)_localctx).op = (Token)_errHandler.recoverInline(this);
} else {
consume();
}
setState(116);
((ComparisonOpContext)_localctx).right = expression(9);
}
break;
case 6:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(117);
if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)");
setState(118);
((BinaryOpContext)_localctx).op = match(T__27);
setState(119);
((BinaryOpContext)_localctx).right = expression(8);
}
break;
case 7:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(120);
if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)");
setState(121);
((BinaryOpContext)_localctx).op = match(T__28);
setState(122);
((BinaryOpContext)_localctx).right = expression(7);
}
break;
case 8:
{
_localctx = new BinaryOpContext(new ExpressionContext(_parentctx, _parentState));
((BinaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(123);
if (!(precpred(_ctx, 5))) throw new FailedPredicateException(this, "precpred(_ctx, 5)");
setState(124);
((BinaryOpContext)_localctx).op = match(T__29);
setState(125);
((BinaryOpContext)_localctx).right = expression(6);
}
break;
case 9:
{
_localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(126);
if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)");
setState(127);
((AndOrOpContext)_localctx).op = match(T__30);
setState(128);
((AndOrOpContext)_localctx).right = expression(5);
}
break;
case 10:
{
_localctx = new AndOrOpContext(new ExpressionContext(_parentctx, _parentState));
((AndOrOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(129);
if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)");
setState(130);
((AndOrOpContext)_localctx).op = match(T__31);
setState(131);
((AndOrOpContext)_localctx).right = expression(4);
}
break;
case 11:
{
_localctx = new TernaryOpContext(new ExpressionContext(_parentctx, _parentState));
((TernaryOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(132);
if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)");
setState(133);
((TernaryOpContext)_localctx).op = match(T__32);
setState(134);
((TernaryOpContext)_localctx).iftrue = expression(0);
setState(135);
match(T__33);
setState(136);
((TernaryOpContext)_localctx).iffalse = expression(2);
}
break;
case 12:
{
_localctx = new QuestionQuestionOpContext(new ExpressionContext(_parentctx, _parentState));
((QuestionQuestionOpContext)_localctx).left = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(138);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
setState(139);
((QuestionQuestionOpContext)_localctx).op = match(T__34);
setState(140);
((QuestionQuestionOpContext)_localctx).right = expression(2);
}
break;
case 13:
{
_localctx = new DotOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(141);
if (!(precpred(_ctx, 20))) throw new FailedPredicateException(this, "precpred(_ctx, 20)");
setState(142);
match(T__6);
setState(143);
match(Identifier);
}
break;
case 14:
{
_localctx = new FunctionRefContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(144);
if (!(precpred(_ctx, 19))) throw new FailedPredicateException(this, "precpred(_ctx, 19)");
setState(145);
match(T__7);
setState(146);
match(Identifier);
}
break;
case 15:
{
_localctx = new BracketOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(147);
if (!(precpred(_ctx, 18))) throw new FailedPredicateException(this, "precpred(_ctx, 18)");
setState(148);
match(T__8);
setState(149);
expression(0);
setState(150);
match(T__9);
}
break;
case 16:
{
_localctx = new MethodInvocationContext(new ExpressionContext(_parentctx, _parentState));
((MethodInvocationContext)_localctx).target = _prevctx;
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(152);
if (!(precpred(_ctx, 17))) throw new FailedPredicateException(this, "precpred(_ctx, 17)");
setState(153);
match(T__6);
setState(154);
((MethodInvocationContext)_localctx).methodName = match(Identifier);
setState(155);
match(T__4);
setState(157);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__4) | (1L << T__10) | (1L << T__11) | (1L << T__12) | (1L << T__13) | (1L << T__36) | (1L << T__37) | (1L << T__38) | (1L << T__39) | (1L << T__40) | (1L << T__41) | (1L << T__42) | (1L << T__43) | (1L << VoidLiteral) | (1L << IntegerLiteral) | (1L << FloatingPointLiteral) | (1L << BooleanLiteral) | (1L << CharacterLiteral) | (1L << SingleQuoteString) | (1L << DoubleQuoteString) | (1L << NullLiteral) | (1L << Identifier) | (1L << ResourceReference))) != 0)) {
{
setState(156);
((MethodInvocationContext)_localctx).args = expressionList();
}
}
setState(159);
match(T__5);
}
break;
case 17:
{
_localctx = new InstanceOfOpContext(new ExpressionContext(_parentctx, _parentState));
pushNewRecursionContext(_localctx, _startState, RULE_expression);
setState(160);
if (!(precpred(_ctx, 9))) throw new FailedPredicateException(this, "precpred(_ctx, 9)");
setState(161);
match(T__24);
setState(162);
type();
}
break;
}
}
}
setState(167);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,9,_ctx);
}
}
}
catch (RecognitionException re) {
_localctx.exception = re;
_errHandler.reportError(this, re);
_errHandler.recover(this, re);
}
finally {
unrollRecursionContexts(_parentctx);
}
return _localctx;
}