docs: public final EObject ruleXbaseConstructorCall() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_1=null;
          Token otherlv_3=null;
          Token otherlv_5=null;
          Token otherlv_7=null;
          Token lv_explicitConstructorCall_8_0=null;
          Token otherlv_11=null;
          Token otherlv_13=null;
          EObject lv_typeArguments_4_0 = null;
  
          EObject lv_typeArguments_6_0 = null;
  
          EObject lv_arguments_9_0 = null;
  
          EObject lv_arguments_10_0 = null;
  
          EObject lv_arguments_12_0 = null;
  
          EObject lv_arguments_14_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:10182:2: ( ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? ) )
              // InternalSARL.g:10183:2: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? )
              {
              // InternalSARL.g:10183:2: ( () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )? )
              // InternalSARL.g:10184:3: () otherlv_1= 'new' ( ( ruleQualifiedName ) ) ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )? ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )? ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?
              {
              // InternalSARL.g:10184:3: ()
              // InternalSARL.g:10185:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getXbaseConstructorCallAccess().getXConstructorCallAction_0(),
                					current);
                			
              }
  
              }
  
              otherlv_1=(Token)match(input,48,FOLLOW_3); if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                			newLeafNode(otherlv_1, grammarAccess.getXbaseConstructorCallAccess().getNewKeyword_1());
                		
              }
              // InternalSARL.g:10195:3: ( ( ruleQualifiedName ) )
              // InternalSARL.g:10196:4: ( ruleQualifiedName )
              {
              // InternalSARL.g:10196:4: ( ruleQualifiedName )
              // InternalSARL.g:10197:5: ruleQualifiedName
              {
              if ( state.backtracking==0 ) {
  
                					if (current==null) {
                						current = createModelElement(grammarAccess.getXbaseConstructorCallRule());
                					}
                				
              }
              if ( state.backtracking==0 ) {
  
                					newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getConstructorJvmConstructorCrossReference_2_0());
                				
              }
              pushFollow(FOLLOW_95);
              ruleQualifiedName();
  
              state._fsp--;
              if (state.failed) return current;
              if ( state.backtracking==0 ) {
  
                					afterParserOrEnumRuleCall();
                				
              }
  
              }
  
  
              }
  
              // InternalSARL.g:10211:3: ( ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>' )?
              int alt261=2;
              alt261 = dfa261.predict(input);
              switch (alt261) {
                  case 1 :
                      // InternalSARL.g:10212:4: ( ( '<' )=>otherlv_3= '<' ) ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) ) (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )* otherlv_7= '>'
                      {
                      // InternalSARL.g:10212:4: ( ( '<' )=>otherlv_3= '<' )
                      // InternalSARL.g:10213:5: ( '<' )=>otherlv_3= '<'
                      {
                      otherlv_3=(Token)match(input,40,FOLLOW_92); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_3, grammarAccess.getXbaseConstructorCallAccess().getLessThanSignKeyword_3_0());
                        				
                      }
  
                      }
  
                      // InternalSARL.g:10219:4: ( (lv_typeArguments_4_0= ruleJvmArgumentTypeReference ) )
                      // InternalSARL.g:10220:5: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                      {
                      // InternalSARL.g:10220:5: (lv_typeArguments_4_0= ruleJvmArgumentTypeReference )
                      // InternalSARL.g:10221:6: lv_typeArguments_4_0= ruleJvmArgumentTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        						newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_1_0());
                        					
                      }
                      pushFollow(FOLLOW_28);
                      lv_typeArguments_4_0=ruleJvmArgumentTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                        						}
                        						add(
                        							current,
                        							"typeArguments",
                        							lv_typeArguments_4_0,
                        							"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                        						afterParserOrEnumRuleCall();
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:10238:4: (otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) ) )*
                      loop260:
                      do {
                          int alt260=2;
                          int LA260_0 = input.LA(1);
  
                          if ( (LA260_0==32) ) {
                              alt260=1;
                          }
  
  
                          switch (alt260) {
                      	case 1 :
                      	    // InternalSARL.g:10239:5: otherlv_5= ',' ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                      	    {
                      	    otherlv_5=(Token)match(input,32,FOLLOW_92); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      					newLeafNode(otherlv_5, grammarAccess.getXbaseConstructorCallAccess().getCommaKeyword_3_2_0());
                      	      				
                      	    }
                      	    // InternalSARL.g:10243:5: ( (lv_typeArguments_6_0= ruleJvmArgumentTypeReference ) )
                      	    // InternalSARL.g:10244:6: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                      	    {
                      	    // InternalSARL.g:10244:6: (lv_typeArguments_6_0= ruleJvmArgumentTypeReference )
                      	    // InternalSARL.g:10245:7: lv_typeArguments_6_0= ruleJvmArgumentTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getTypeArgumentsJvmArgumentTypeReferenceParserRuleCall_3_2_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_28);
                      	    lv_typeArguments_6_0=ruleJvmArgumentTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"typeArguments",
                      	      								lv_typeArguments_6_0,
                      	      								"org.eclipse.xtext.xbase.Xtype.JvmArgumentTypeReference");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop260;
                          }
                      } while (true);
  
                      otherlv_7=(Token)match(input,41,FOLLOW_96); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_7, grammarAccess.getXbaseConstructorCallAccess().getGreaterThanSignKeyword_3_3());
                        			
                      }
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:10268:3: ( ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')' )?
              int alt264=2;
              alt264 = dfa264.predict(input);
              switch (alt264) {
                  case 1 :
                      // InternalSARL.g:10269:4: ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) ) ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )? otherlv_13= ')'
                      {
                      // InternalSARL.g:10269:4: ( ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' ) )
                      // InternalSARL.g:10270:5: ( ( '(' ) )=> (lv_explicitConstructorCall_8_0= '(' )
                      {
                      // InternalSARL.g:10274:5: (lv_explicitConstructorCall_8_0= '(' )
                      // InternalSARL.g:10275:6: lv_explicitConstructorCall_8_0= '('
                      {
                      lv_explicitConstructorCall_8_0=(Token)match(input,49,FOLLOW_97); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        						newLeafNode(lv_explicitConstructorCall_8_0, grammarAccess.getXbaseConstructorCallAccess().getExplicitConstructorCallLeftParenthesisKeyword_4_0_0());
                        					
                      }
                      if ( state.backtracking==0 ) {
  
                        						if (current==null) {
                        							current = createModelElement(grammarAccess.getXbaseConstructorCallRule());
                        						}
                        						setWithLastConsumed(current, "explicitConstructorCall", true, "(");
                        					
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:10287:4: ( ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) ) | ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* ) )?
                      int alt263=3;
                      alt263 = dfa263.predict(input);
                      switch (alt263) {
                          case 1 :
                              // InternalSARL.g:10288:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                              {
                              // InternalSARL.g:10288:5: ( ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure ) )
                              // InternalSARL.g:10289:6: ( ( () ( ( ( ruleJvmFormalParameter ) ) ( ',' ( ( ruleJvmFormalParameter ) ) )* )? ( ( '|' ) ) ) )=> (lv_arguments_9_0= ruleXShortClosure )
                              {
                              // InternalSARL.g:10314:6: (lv_arguments_9_0= ruleXShortClosure )
                              // InternalSARL.g:10315:7: lv_arguments_9_0= ruleXShortClosure
                              {
                              if ( state.backtracking==0 ) {
  
                                							newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getArgumentsXShortClosureParserRuleCall_4_1_0_0());
                                						
                              }
                              pushFollow(FOLLOW_81);
                              lv_arguments_9_0=ruleXShortClosure();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							if (current==null) {
                                								current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                                							}
                                							add(
                                								current,
                                								"arguments",
                                								lv_arguments_9_0,
                                								"org.eclipse.xtext.xbase.Xbase.XShortClosure");
                                							afterParserOrEnumRuleCall();
                                						
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:10333:5: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                              {
                              // InternalSARL.g:10333:5: ( ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )* )
                              // InternalSARL.g:10334:6: ( (lv_arguments_10_0= ruleXExpression ) ) (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                              {
                              // InternalSARL.g:10334:6: ( (lv_arguments_10_0= ruleXExpression ) )
                              // InternalSARL.g:10335:7: (lv_arguments_10_0= ruleXExpression )
                              {
                              // InternalSARL.g:10335:7: (lv_arguments_10_0= ruleXExpression )
                              // InternalSARL.g:10336:8: lv_arguments_10_0= ruleXExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_0_0());
                                							
                              }
                              pushFollow(FOLLOW_51);
                              lv_arguments_10_0=ruleXExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                                								}
                                								add(
                                									current,
                                									"arguments",
                                									lv_arguments_10_0,
                                									"org.eclipse.xtext.xbase.Xbase.XExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:10353:6: (otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) ) )*
                              loop262:
                              do {
                                  int alt262=2;
                                  int LA262_0 = input.LA(1);
  
                                  if ( (LA262_0==32) ) {
                                      alt262=1;
                                  }
  
  
                                  switch (alt262) {
                              	case 1 :
                              	    // InternalSARL.g:10354:7: otherlv_11= ',' ( (lv_arguments_12_0= ruleXExpression ) )
                              	    {
                              	    otherlv_11=(Token)match(input,32,FOLLOW_45); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_11, grammarAccess.getXbaseConstructorCallAccess().getCommaKeyword_4_1_1_1_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:10358:7: ( (lv_arguments_12_0= ruleXExpression ) )
                              	    // InternalSARL.g:10359:8: (lv_arguments_12_0= ruleXExpression )
                              	    {
                              	    // InternalSARL.g:10359:8: (lv_arguments_12_0= ruleXExpression )
                              	    // InternalSARL.g:10360:9: lv_arguments_12_0= ruleXExpression
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getArgumentsXExpressionParserRuleCall_4_1_1_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_51);
                              	    lv_arguments_12_0=ruleXExpression();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"arguments",
                              	      										lv_arguments_12_0,
                              	      										"org.eclipse.xtext.xbase.Xbase.XExpression");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop262;
                                  }
                              } while (true);
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      otherlv_13=(Token)match(input,50,FOLLOW_89); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        				newLeafNode(otherlv_13, grammarAccess.getXbaseConstructorCallAccess().getRightParenthesisKeyword_4_2());
                        			
                      }
  
                      }
                      break;
  
              }
  
              // InternalSARL.g:10385:3: ( ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure ) )?
              int alt265=2;
              alt265 = dfa265.predict(input);
              switch (alt265) {
                  case 1 :
                      // InternalSARL.g:10386:4: ( ( () '[' ) )=> (lv_arguments_14_0= ruleXClosure )
                      {
                      // InternalSARL.g:10392:4: (lv_arguments_14_0= ruleXClosure )
                      // InternalSARL.g:10393:5: lv_arguments_14_0= ruleXClosure
                      {
                      if ( state.backtracking==0 ) {
  
                        					newCompositeNode(grammarAccess.getXbaseConstructorCallAccess().getArgumentsXClosureParserRuleCall_5_0());
                        				
                      }
                      pushFollow(FOLLOW_2);
                      lv_arguments_14_0=ruleXClosure();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					if (current==null) {
                        						current = createModelElementForParent(grammarAccess.getXbaseConstructorCallRule());
                        					}
                        					add(
                        						current,
                        						"arguments",
                        						lv_arguments_14_0,
                        						"org.eclipse.xtext.xbase.Xbase.XClosure");
                        					afterParserOrEnumRuleCall();
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }