@ SuppressWarnings ( "incomplete-switch" ) private ParseTree parseLeftHandSideExpression ( ) { SourcePosition start = getTreeStartLocation ( ) ; ParseTree operand = parseNewExpression ( ) ; // this test is equivalent to is member expression if ( ! ( operand instanceof NewExpressionTree ) || ( ( NewExpressionTree ) operand ) . arguments != null ) { // The Call expression productions while ( peekCallSuffix ( ) ) { switch ( peekType ( ) ) { case OPEN_PAREN : ArgumentListTree arguments = parseArguments ( ) ; operand = new CallExpressionTree ( getTreeLocation ( start ) , operand , arguments ) ; break ; case OPEN_SQUARE : eat ( TokenType . OPEN_SQUARE ) ; ParseTree member = parseExpression ( ) ; eat ( TokenType . CLOSE_SQUARE ) ; operand = new MemberLookupExpressionTree ( getTreeLocation ( start ) , operand , member ) ; break ; case PERIOD : eat ( TokenType . PERIOD ) ; IdentifierToken id = eatIdOrKeywordAsId ( ) ; operand = new MemberExpressionTree ( getTreeLocation ( start ) , operand , id ) ; break ; case NO_SUBSTITUTION_TEMPLATE : case TEMPLATE_HEAD : operand = parseTemplateLiteral ( operand ) ; break ; default : throw new AssertionError ( "unexpected case: " + peekType ( ) ) ; } } } return operand ; }
Also inlines the call expression productions