docs: public final EObject ruleAOPMember() throws RecognitionException {
          EObject current = null;
  
          Token otherlv_3=null;
          Token otherlv_5=null;
          Token otherlv_7=null;
          Token otherlv_10=null;
          Token otherlv_12=null;
          Token otherlv_14=null;
          Token otherlv_16=null;
          Token otherlv_18=null;
          Token otherlv_20=null;
          Token lv_modifiers_23_0=null;
          Token otherlv_27=null;
          Token lv_modifiers_31_0=null;
          Token otherlv_33=null;
          Token otherlv_36=null;
          Token otherlv_38=null;
          Token otherlv_40=null;
          Token otherlv_43=null;
          Token otherlv_44=null;
          Token otherlv_46=null;
          Token otherlv_48=null;
          Token otherlv_49=null;
          Token otherlv_51=null;
          Token otherlv_53=null;
          Token otherlv_55=null;
          Token otherlv_57=null;
          Token otherlv_59=null;
          Token otherlv_61=null;
          Token otherlv_69=null;
          Token otherlv_71=null;
          Token otherlv_73=null;
          Token otherlv_75=null;
          Token otherlv_77=null;
          Token otherlv_79=null;
          Token otherlv_80=null;
          Token otherlv_84=null;
          Token otherlv_86=null;
          Token otherlv_88=null;
          Token otherlv_90=null;
          Token otherlv_92=null;
          Token otherlv_94=null;
          Token otherlv_97=null;
          Token otherlv_100=null;
          Token otherlv_102=null;
          Token otherlv_104=null;
          Token otherlv_106=null;
          Token otherlv_108=null;
          Token otherlv_110=null;
          Token otherlv_112=null;
          Token otherlv_114=null;
          Token otherlv_116=null;
          Token otherlv_119=null;
          Token otherlv_121=null;
          Token otherlv_123=null;
          Token otherlv_125=null;
          Token otherlv_126=null;
          Token otherlv_128=null;
          Token otherlv_130=null;
          Token otherlv_132=null;
          Token otherlv_135=null;
          Token otherlv_137=null;
          Token otherlv_139=null;
          Token otherlv_141=null;
          Token otherlv_142=null;
          Token otherlv_145=null;
          Token otherlv_147=null;
          Token otherlv_149=null;
          EObject lv_annotations_1_0 = null;
  
          EObject lv_name_4_0 = null;
  
          EObject lv_guard_6_0 = null;
  
          EObject lv_expression_8_0 = null;
  
          EObject lv_capacities_11_0 = null;
  
          EObject lv_capacities_13_0 = null;
  
          EObject lv_capacities_17_0 = null;
  
          EObject lv_capacities_19_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_22_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_24_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_25_0 = null;
  
          AntlrDatatypeRuleToken lv_name_26_0 = null;
  
          EObject lv_type_28_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_29_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_30_0 = null;
  
          AntlrDatatypeRuleToken lv_name_32_0 = null;
  
          EObject lv_type_34_0 = null;
  
          AntlrDatatypeRuleToken lv_name_35_0 = null;
  
          EObject lv_type_37_0 = null;
  
          EObject lv_initialValue_39_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_42_0 = null;
  
          EObject lv_typeParameters_45_0 = null;
  
          EObject lv_typeParameters_47_0 = null;
  
          EObject lv_parameters_50_0 = null;
  
          EObject lv_parameters_52_0 = null;
  
          EObject lv_exceptions_56_0 = null;
  
          EObject lv_exceptions_58_0 = null;
  
          EObject lv_typeParameters_60_0 = null;
  
          EObject lv_typeParameters_62_0 = null;
  
          EObject lv_expression_63_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_65_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_66_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_67_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_68_0 = null;
  
          EObject lv_typeParameters_70_0 = null;
  
          EObject lv_typeParameters_72_0 = null;
  
          AntlrDatatypeRuleToken lv_name_74_0 = null;
  
          EObject lv_parameters_76_0 = null;
  
          EObject lv_parameters_78_0 = null;
  
          EObject lv_returnType_81_0 = null;
  
          EObject lv_returnType_82_0 = null;
  
          EObject lv_exceptions_85_0 = null;
  
          EObject lv_exceptions_87_0 = null;
  
          EObject lv_firedEvents_89_0 = null;
  
          EObject lv_firedEvents_91_0 = null;
  
          EObject lv_typeParameters_93_0 = null;
  
          EObject lv_typeParameters_95_0 = null;
  
          EObject lv_expression_96_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_99_0 = null;
  
          AntlrDatatypeRuleToken lv_name_101_0 = null;
  
          EObject lv_typeParameters_103_0 = null;
  
          EObject lv_typeParameters_105_0 = null;
  
          EObject lv_extends_109_0 = null;
  
          EObject lv_implements_111_0 = null;
  
          EObject lv_implements_113_0 = null;
  
          EObject lv_members_115_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_118_0 = null;
  
          AntlrDatatypeRuleToken lv_name_120_0 = null;
  
          EObject lv_typeParameters_122_0 = null;
  
          EObject lv_typeParameters_124_0 = null;
  
          EObject lv_extends_127_0 = null;
  
          EObject lv_extends_129_0 = null;
  
          EObject lv_members_131_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_134_0 = null;
  
          AntlrDatatypeRuleToken lv_name_136_0 = null;
  
          EObject lv_members_138_0 = null;
  
          EObject lv_members_140_0 = null;
  
          AntlrDatatypeRuleToken lv_modifiers_144_0 = null;
  
          AntlrDatatypeRuleToken lv_name_146_0 = null;
  
          EObject lv_members_148_0 = null;
  
  
  
          	enterRule();
  
          try {
              // InternalSARL.g:2752:2: ( ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) ) | ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? ) | ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? ) | ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? ) | ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' ) | ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' ) | ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' ) | ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' ) ) ) )
              // InternalSARL.g:2753:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) ) | ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? ) | ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? ) | ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? ) | ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' ) | ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' ) | ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' ) | ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' ) ) )
              {
              // InternalSARL.g:2753:2: ( () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) ) | ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? ) | ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? ) | ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? ) | ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' ) | ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' ) | ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' ) | ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' ) ) )
              // InternalSARL.g:2754:3: () ( (lv_annotations_1_0= ruleXAnnotation ) )* ( ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) ) | ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? ) | ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? ) | ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? ) | ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' ) | ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' ) | ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' ) | ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' ) )
              {
              // InternalSARL.g:2754:3: ()
              // InternalSARL.g:2755:4: 
              {
              if ( state.backtracking==0 ) {
  
                				current = forceCreateModelElement(
                					grammarAccess.getAOPMemberAccess().getXtendMemberAction_0(),
                					current);
                			
              }
  
              }
  
              // InternalSARL.g:2761:3: ( (lv_annotations_1_0= ruleXAnnotation ) )*
              loop79:
              do {
                  int alt79=2;
                  int LA79_0 = input.LA(1);
  
                  if ( (LA79_0==105) ) {
                      alt79=1;
                  }
  
  
                  switch (alt79) {
              	case 1 :
              	    // InternalSARL.g:2762:4: (lv_annotations_1_0= ruleXAnnotation )
              	    {
              	    // InternalSARL.g:2762:4: (lv_annotations_1_0= ruleXAnnotation )
              	    // InternalSARL.g:2763:5: lv_annotations_1_0= ruleXAnnotation
              	    {
              	    if ( state.backtracking==0 ) {
  
              	      					newCompositeNode(grammarAccess.getAOPMemberAccess().getAnnotationsXAnnotationParserRuleCall_1_0());
              	      				
              	    }
              	    pushFollow(FOLLOW_61);
              	    lv_annotations_1_0=ruleXAnnotation();
  
              	    state._fsp--;
              	    if (state.failed) return current;
              	    if ( state.backtracking==0 ) {
  
              	      					if (current==null) {
              	      						current = createModelElementForParent(grammarAccess.getAOPMemberRule());
              	      					}
              	      					add(
              	      						current,
              	      						"annotations",
              	      						lv_annotations_1_0,
              	      						"org.eclipse.xtext.xbase.annotations.XbaseWithAnnotations.XAnnotation");
              	      					afterParserOrEnumRuleCall();
              	      				
              	    }
  
              	    }
  
  
              	    }
              	    break;
  
              	default :
              	    break loop79;
                  }
              } while (true);
  
              // InternalSARL.g:2780:3: ( ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) ) | ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? ) | ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? ) | ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? ) | ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) ) | ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? ) | ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' ) | ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' ) | ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' ) | ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' ) )
              int alt134=10;
              alt134 = dfa134.predict(input);
              switch (alt134) {
                  case 1 :
                      // InternalSARL.g:2781:4: ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) )
                      {
                      // InternalSARL.g:2781:4: ( () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) ) )
                      // InternalSARL.g:2782:5: () otherlv_3= 'on' ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) ) (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )? ( (lv_expression_8_0= ruleXBlockExpression ) )
                      {
                      // InternalSARL.g:2782:5: ()
                      // InternalSARL.g:2783:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlBehaviorUnitAnnotationInfoAction_2_0_0(),
                        							current);
                        					
                      }
  
                      }
  
                      otherlv_3=(Token)match(input,54,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_3, grammarAccess.getAOPMemberAccess().getOnKeyword_2_0_1());
                        				
                      }
                      // InternalSARL.g:2793:5: ( (lv_name_4_0= ruleJvmParameterizedTypeReference ) )
                      // InternalSARL.g:2794:6: (lv_name_4_0= ruleJvmParameterizedTypeReference )
                      {
                      // InternalSARL.g:2794:6: (lv_name_4_0= ruleJvmParameterizedTypeReference )
                      // InternalSARL.g:2795:7: lv_name_4_0= ruleJvmParameterizedTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameJvmParameterizedTypeReferenceParserRuleCall_2_0_2_0());
                        						
                      }
                      pushFollow(FOLLOW_62);
                      lv_name_4_0=ruleJvmParameterizedTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_4_0,
                        								"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:2812:5: (otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']' )?
                      int alt80=2;
                      int LA80_0 = input.LA(1);
  
                      if ( (LA80_0==55) ) {
                          alt80=1;
                      }
                      switch (alt80) {
                          case 1 :
                              // InternalSARL.g:2813:6: otherlv_5= '[' ( (lv_guard_6_0= ruleXExpression ) ) otherlv_7= ']'
                              {
                              otherlv_5=(Token)match(input,55,FOLLOW_45); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_5, grammarAccess.getAOPMemberAccess().getLeftSquareBracketKeyword_2_0_3_0());
                                					
                              }
                              // InternalSARL.g:2817:6: ( (lv_guard_6_0= ruleXExpression ) )
                              // InternalSARL.g:2818:7: (lv_guard_6_0= ruleXExpression )
                              {
                              // InternalSARL.g:2818:7: (lv_guard_6_0= ruleXExpression )
                              // InternalSARL.g:2819:8: lv_guard_6_0= ruleXExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getGuardXExpressionParserRuleCall_2_0_3_1_0());
                                							
                              }
                              pushFollow(FOLLOW_63);
                              lv_guard_6_0=ruleXExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								set(
                                									current,
                                									"guard",
                                									lv_guard_6_0,
                                									"org.eclipse.xtext.xbase.Xbase.XExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              otherlv_7=(Token)match(input,56,FOLLOW_17); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_7, grammarAccess.getAOPMemberAccess().getRightSquareBracketKeyword_2_0_3_2());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:2841:5: ( (lv_expression_8_0= ruleXBlockExpression ) )
                      // InternalSARL.g:2842:6: (lv_expression_8_0= ruleXBlockExpression )
                      {
                      // InternalSARL.g:2842:6: (lv_expression_8_0= ruleXBlockExpression )
                      // InternalSARL.g:2843:7: lv_expression_8_0= ruleXBlockExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getExpressionXBlockExpressionParserRuleCall_2_0_4_0());
                        						
                      }
                      pushFollow(FOLLOW_2);
                      lv_expression_8_0=ruleXBlockExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"expression",
                        								lv_expression_8_0,
                        								"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 2 :
                      // InternalSARL.g:2862:4: ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? )
                      {
                      // InternalSARL.g:2862:4: ( () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )? )
                      // InternalSARL.g:2863:5: () otherlv_10= 'uses' ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) ) (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_14= ';' )?
                      {
                      // InternalSARL.g:2863:5: ()
                      // InternalSARL.g:2864:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlCapacityUsesAnnotationInfoAction_2_1_0(),
                        							current);
                        					
                      }
  
                      }
  
                      otherlv_10=(Token)match(input,57,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_10, grammarAccess.getAOPMemberAccess().getUsesKeyword_2_1_1());
                        				
                      }
                      // InternalSARL.g:2874:5: ( (lv_capacities_11_0= ruleJvmParameterizedTypeReference ) )
                      // InternalSARL.g:2875:6: (lv_capacities_11_0= ruleJvmParameterizedTypeReference )
                      {
                      // InternalSARL.g:2875:6: (lv_capacities_11_0= ruleJvmParameterizedTypeReference )
                      // InternalSARL.g:2876:7: lv_capacities_11_0= ruleJvmParameterizedTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getCapacitiesJvmParameterizedTypeReferenceParserRuleCall_2_1_2_0());
                        						
                      }
                      pushFollow(FOLLOW_64);
                      lv_capacities_11_0=ruleJvmParameterizedTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							add(
                        								current,
                        								"capacities",
                        								lv_capacities_11_0,
                        								"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:2893:5: (otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) ) )*
                      loop81:
                      do {
                          int alt81=2;
                          int LA81_0 = input.LA(1);
  
                          if ( (LA81_0==32) ) {
                              alt81=1;
                          }
  
  
                          switch (alt81) {
                      	case 1 :
                      	    // InternalSARL.g:2894:6: otherlv_12= ',' ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) )
                      	    {
                      	    otherlv_12=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      						newLeafNode(otherlv_12, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_1_3_0());
                      	      					
                      	    }
                      	    // InternalSARL.g:2898:6: ( (lv_capacities_13_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:2899:7: (lv_capacities_13_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:2899:7: (lv_capacities_13_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:2900:8: lv_capacities_13_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getAOPMemberAccess().getCapacitiesJvmParameterizedTypeReferenceParserRuleCall_2_1_3_1_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_64);
                      	    lv_capacities_13_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"capacities",
                      	      									lv_capacities_13_0,
                      	      									"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop81;
                          }
                      } while (true);
  
                      // InternalSARL.g:2918:5: (otherlv_14= ';' )?
                      int alt82=2;
                      int LA82_0 = input.LA(1);
  
                      if ( (LA82_0==26) ) {
                          alt82=1;
                      }
                      switch (alt82) {
                          case 1 :
                              // InternalSARL.g:2919:6: otherlv_14= ';'
                              {
                              otherlv_14=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_14, grammarAccess.getAOPMemberAccess().getSemicolonKeyword_2_1_4());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 3 :
                      // InternalSARL.g:2926:4: ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? )
                      {
                      // InternalSARL.g:2926:4: ( () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )? )
                      // InternalSARL.g:2927:5: () otherlv_16= 'requires' ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) ) (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )* (otherlv_20= ';' )?
                      {
                      // InternalSARL.g:2927:5: ()
                      // InternalSARL.g:2928:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlRequiredCapacityAnnotationInfoAction_2_2_0(),
                        							current);
                        					
                      }
  
                      }
  
                      otherlv_16=(Token)match(input,58,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_16, grammarAccess.getAOPMemberAccess().getRequiresKeyword_2_2_1());
                        				
                      }
                      // InternalSARL.g:2938:5: ( (lv_capacities_17_0= ruleJvmParameterizedTypeReference ) )
                      // InternalSARL.g:2939:6: (lv_capacities_17_0= ruleJvmParameterizedTypeReference )
                      {
                      // InternalSARL.g:2939:6: (lv_capacities_17_0= ruleJvmParameterizedTypeReference )
                      // InternalSARL.g:2940:7: lv_capacities_17_0= ruleJvmParameterizedTypeReference
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getCapacitiesJvmParameterizedTypeReferenceParserRuleCall_2_2_2_0());
                        						
                      }
                      pushFollow(FOLLOW_64);
                      lv_capacities_17_0=ruleJvmParameterizedTypeReference();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							add(
                        								current,
                        								"capacities",
                        								lv_capacities_17_0,
                        								"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:2957:5: (otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) ) )*
                      loop83:
                      do {
                          int alt83=2;
                          int LA83_0 = input.LA(1);
  
                          if ( (LA83_0==32) ) {
                              alt83=1;
                          }
  
  
                          switch (alt83) {
                      	case 1 :
                      	    // InternalSARL.g:2958:6: otherlv_18= ',' ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) )
                      	    {
                      	    otherlv_18=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      						newLeafNode(otherlv_18, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_2_3_0());
                      	      					
                      	    }
                      	    // InternalSARL.g:2962:6: ( (lv_capacities_19_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:2963:7: (lv_capacities_19_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:2963:7: (lv_capacities_19_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:2964:8: lv_capacities_19_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getAOPMemberAccess().getCapacitiesJvmParameterizedTypeReferenceParserRuleCall_2_2_3_1_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_64);
                      	    lv_capacities_19_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"capacities",
                      	      									lv_capacities_19_0,
                      	      									"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop83;
                          }
                      } while (true);
  
                      // InternalSARL.g:2982:5: (otherlv_20= ';' )?
                      int alt84=2;
                      int LA84_0 = input.LA(1);
  
                      if ( (LA84_0==26) ) {
                          alt84=1;
                      }
                      switch (alt84) {
                          case 1 :
                              // InternalSARL.g:2983:6: otherlv_20= ';'
                              {
                              otherlv_20=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_20, grammarAccess.getAOPMemberAccess().getSemicolonKeyword_2_2_4());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 4 :
                      // InternalSARL.g:2990:4: ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? )
                      {
                      // InternalSARL.g:2990:4: ( () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )? )
                      // InternalSARL.g:2991:5: () ( (lv_modifiers_22_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) ) (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )? (otherlv_40= ';' )?
                      {
                      // InternalSARL.g:2991:5: ()
                      // InternalSARL.g:2992:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlFieldAnnotationInfoAction_2_3_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:2998:5: ( (lv_modifiers_22_0= ruleCommonModifier ) )*
                      loop85:
                      do {
                          int alt85=2;
                          int LA85_0 = input.LA(1);
  
                          if ( (LA85_0==25||(LA85_0>=78 && LA85_0<=89)) ) {
                              alt85=1;
                          }
  
  
                          switch (alt85) {
                      	case 1 :
                      	    // InternalSARL.g:2999:6: (lv_modifiers_22_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:2999:6: (lv_modifiers_22_0= ruleCommonModifier )
                      	    // InternalSARL.g:3000:7: lv_modifiers_22_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_3_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_38);
                      	    lv_modifiers_22_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_22_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop85;
                          }
                      } while (true);
  
                      // InternalSARL.g:3017:5: ( ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) ) | ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) ) )
                      int alt90=2;
                      int LA90_0 = input.LA(1);
  
                      if ( (LA90_0==45) ) {
                          alt90=1;
                      }
                      else if ( ((LA90_0>=65 && LA90_0<=66)) ) {
                          alt90=2;
                      }
                      else {
                          if (state.backtracking>0) {state.failed=true; return current;}
                          NoViableAltException nvae =
                              new NoViableAltException("", 90, 0, input);
  
                          throw nvae;
                      }
                      switch (alt90) {
                          case 1 :
                              // InternalSARL.g:3018:6: ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) )
                              {
                              // InternalSARL.g:3018:6: ( ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) ) )
                              // InternalSARL.g:3019:7: ( (lv_modifiers_23_0= 'extension' ) ) ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )* ( (lv_name_26_0= ruleValidID ) ) otherlv_27= ':' ( (lv_type_28_0= ruleJvmTypeReference ) )
                              {
                              // InternalSARL.g:3019:7: ( (lv_modifiers_23_0= 'extension' ) )
                              // InternalSARL.g:3020:8: (lv_modifiers_23_0= 'extension' )
                              {
                              // InternalSARL.g:3020:8: (lv_modifiers_23_0= 'extension' )
                              // InternalSARL.g:3021:9: lv_modifiers_23_0= 'extension'
                              {
                              lv_modifiers_23_0=(Token)match(input,45,FOLLOW_39); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									newLeafNode(lv_modifiers_23_0, grammarAccess.getAOPMemberAccess().getModifiersExtensionKeyword_2_3_2_0_0_0());
                                								
                              }
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElement(grammarAccess.getAOPMemberRule());
                                									}
                                									addWithLastConsumed(current, "modifiers", lv_modifiers_23_0, "extension");
                                								
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:3033:7: ( ( (lv_modifiers_24_0= ruleFieldModifier ) ) | ( (lv_modifiers_25_0= ruleCommonModifier ) ) )*
                              loop86:
                              do {
                                  int alt86=3;
                                  int LA86_0 = input.LA(1);
  
                                  if ( ((LA86_0>=65 && LA86_0<=66)) ) {
                                      alt86=1;
                                  }
                                  else if ( (LA86_0==25||(LA86_0>=78 && LA86_0<=89)) ) {
                                      alt86=2;
                                  }
  
  
                                  switch (alt86) {
                              	case 1 :
                              	    // InternalSARL.g:3034:8: ( (lv_modifiers_24_0= ruleFieldModifier ) )
                              	    {
                              	    // InternalSARL.g:3034:8: ( (lv_modifiers_24_0= ruleFieldModifier ) )
                              	    // InternalSARL.g:3035:9: (lv_modifiers_24_0= ruleFieldModifier )
                              	    {
                              	    // InternalSARL.g:3035:9: (lv_modifiers_24_0= ruleFieldModifier )
                              	    // InternalSARL.g:3036:10: lv_modifiers_24_0= ruleFieldModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      										newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersFieldModifierParserRuleCall_2_3_2_0_1_0_0());
                              	      									
                              	    }
                              	    pushFollow(FOLLOW_39);
                              	    lv_modifiers_24_0=ruleFieldModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      										if (current==null) {
                              	      											current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      										}
                              	      										add(
                              	      											current,
                              	      											"modifiers",
                              	      											lv_modifiers_24_0,
                              	      											"org.eclipse.xtend.core.Xtend.FieldModifier");
                              	      										afterParserOrEnumRuleCall();
                              	      									
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
                              	case 2 :
                              	    // InternalSARL.g:3054:8: ( (lv_modifiers_25_0= ruleCommonModifier ) )
                              	    {
                              	    // InternalSARL.g:3054:8: ( (lv_modifiers_25_0= ruleCommonModifier ) )
                              	    // InternalSARL.g:3055:9: (lv_modifiers_25_0= ruleCommonModifier )
                              	    {
                              	    // InternalSARL.g:3055:9: (lv_modifiers_25_0= ruleCommonModifier )
                              	    // InternalSARL.g:3056:10: lv_modifiers_25_0= ruleCommonModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      										newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_3_2_0_1_1_0());
                              	      									
                              	    }
                              	    pushFollow(FOLLOW_39);
                              	    lv_modifiers_25_0=ruleCommonModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      										if (current==null) {
                              	      											current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      										}
                              	      										add(
                              	      											current,
                              	      											"modifiers",
                              	      											lv_modifiers_25_0,
                              	      											"org.eclipse.xtend.core.Xtend.CommonModifier");
                              	      										afterParserOrEnumRuleCall();
                              	      									
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop86;
                                  }
                              } while (true);
  
                              // InternalSARL.g:3074:7: ( (lv_name_26_0= ruleValidID ) )
                              // InternalSARL.g:3075:8: (lv_name_26_0= ruleValidID )
                              {
                              // InternalSARL.g:3075:8: (lv_name_26_0= ruleValidID )
                              // InternalSARL.g:3076:9: lv_name_26_0= ruleValidID
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_3_2_0_2_0());
                                								
                              }
                              pushFollow(FOLLOW_40);
                              lv_name_26_0=ruleValidID();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                									}
                                									set(
                                										current,
                                										"name",
                                										lv_name_26_0,
                                										"org.eclipse.xtend.core.Xtend.ValidID");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
                              otherlv_27=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                							newLeafNode(otherlv_27, grammarAccess.getAOPMemberAccess().getColonKeyword_2_3_2_0_3());
                                						
                              }
                              // InternalSARL.g:3097:7: ( (lv_type_28_0= ruleJvmTypeReference ) )
                              // InternalSARL.g:3098:8: (lv_type_28_0= ruleJvmTypeReference )
                              {
                              // InternalSARL.g:3098:8: (lv_type_28_0= ruleJvmTypeReference )
                              // InternalSARL.g:3099:9: lv_type_28_0= ruleJvmTypeReference
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_3_2_0_4_0());
                                								
                              }
                              pushFollow(FOLLOW_42);
                              lv_type_28_0=ruleJvmTypeReference();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                									}
                                									set(
                                										current,
                                										"type",
                                										lv_type_28_0,
                                										"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:3118:6: ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) )
                              {
                              // InternalSARL.g:3118:6: ( ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) ) )
                              // InternalSARL.g:3119:7: ( (lv_modifiers_29_0= ruleFieldModifier ) ) ( (lv_modifiers_30_0= ruleCommonModifier ) )* ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) )
                              {
                              // InternalSARL.g:3119:7: ( (lv_modifiers_29_0= ruleFieldModifier ) )
                              // InternalSARL.g:3120:8: (lv_modifiers_29_0= ruleFieldModifier )
                              {
                              // InternalSARL.g:3120:8: (lv_modifiers_29_0= ruleFieldModifier )
                              // InternalSARL.g:3121:9: lv_modifiers_29_0= ruleFieldModifier
                              {
                              if ( state.backtracking==0 ) {
  
                                									newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersFieldModifierParserRuleCall_2_3_2_1_0_0());
                                								
                              }
                              pushFollow(FOLLOW_43);
                              lv_modifiers_29_0=ruleFieldModifier();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                									if (current==null) {
                                										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                									}
                                									add(
                                										current,
                                										"modifiers",
                                										lv_modifiers_29_0,
                                										"org.eclipse.xtend.core.Xtend.FieldModifier");
                                									afterParserOrEnumRuleCall();
                                								
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:3138:7: ( (lv_modifiers_30_0= ruleCommonModifier ) )*
                              loop87:
                              do {
                                  int alt87=2;
                                  int LA87_0 = input.LA(1);
  
                                  if ( (LA87_0==25||(LA87_0>=78 && LA87_0<=89)) ) {
                                      alt87=1;
                                  }
  
  
                                  switch (alt87) {
                              	case 1 :
                              	    // InternalSARL.g:3139:8: (lv_modifiers_30_0= ruleCommonModifier )
                              	    {
                              	    // InternalSARL.g:3139:8: (lv_modifiers_30_0= ruleCommonModifier )
                              	    // InternalSARL.g:3140:9: lv_modifiers_30_0= ruleCommonModifier
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_3_2_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_43);
                              	    lv_modifiers_30_0=ruleCommonModifier();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"modifiers",
                              	      										lv_modifiers_30_0,
                              	      										"org.eclipse.xtend.core.Xtend.CommonModifier");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop87;
                                  }
                              } while (true);
  
                              // InternalSARL.g:3157:7: ( ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) ) | ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? ) )
                              int alt89=2;
                              int LA89_0 = input.LA(1);
  
                              if ( (LA89_0==45) ) {
                                  alt89=1;
                              }
                              else if ( (LA89_0==RULE_ID||LA89_0==44||(LA89_0>=92 && LA89_0<=95)) ) {
                                  alt89=2;
                              }
                              else {
                                  if (state.backtracking>0) {state.failed=true; return current;}
                                  NoViableAltException nvae =
                                      new NoViableAltException("", 89, 0, input);
  
                                  throw nvae;
                              }
                              switch (alt89) {
                                  case 1 :
                                      // InternalSARL.g:3158:8: ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) )
                                      {
                                      // InternalSARL.g:3158:8: ( ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) ) )
                                      // InternalSARL.g:3159:9: ( (lv_modifiers_31_0= 'extension' ) ) ( (lv_name_32_0= ruleValidID ) ) otherlv_33= ':' ( (lv_type_34_0= ruleJvmTypeReference ) )
                                      {
                                      // InternalSARL.g:3159:9: ( (lv_modifiers_31_0= 'extension' ) )
                                      // InternalSARL.g:3160:10: (lv_modifiers_31_0= 'extension' )
                                      {
                                      // InternalSARL.g:3160:10: (lv_modifiers_31_0= 'extension' )
                                      // InternalSARL.g:3161:11: lv_modifiers_31_0= 'extension'
                                      {
                                      lv_modifiers_31_0=(Token)match(input,45,FOLLOW_3); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											newLeafNode(lv_modifiers_31_0, grammarAccess.getAOPMemberAccess().getModifiersExtensionKeyword_2_3_2_1_2_0_0_0());
                                        										
                                      }
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElement(grammarAccess.getAOPMemberRule());
                                        											}
                                        											addWithLastConsumed(current, "modifiers", lv_modifiers_31_0, "extension");
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:3173:9: ( (lv_name_32_0= ruleValidID ) )
                                      // InternalSARL.g:3174:10: (lv_name_32_0= ruleValidID )
                                      {
                                      // InternalSARL.g:3174:10: (lv_name_32_0= ruleValidID )
                                      // InternalSARL.g:3175:11: lv_name_32_0= ruleValidID
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_3_2_1_2_0_1_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_40);
                                      lv_name_32_0=ruleValidID();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"name",
                                        												lv_name_32_0,
                                        												"org.eclipse.xtend.core.Xtend.ValidID");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      otherlv_33=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									newLeafNode(otherlv_33, grammarAccess.getAOPMemberAccess().getColonKeyword_2_3_2_1_2_0_2());
                                        								
                                      }
                                      // InternalSARL.g:3196:9: ( (lv_type_34_0= ruleJvmTypeReference ) )
                                      // InternalSARL.g:3197:10: (lv_type_34_0= ruleJvmTypeReference )
                                      {
                                      // InternalSARL.g:3197:10: (lv_type_34_0= ruleJvmTypeReference )
                                      // InternalSARL.g:3198:11: lv_type_34_0= ruleJvmTypeReference
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_3_2_1_2_0_3_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_42);
                                      lv_type_34_0=ruleJvmTypeReference();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"type",
                                        												lv_type_34_0,
                                        												"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
                                  case 2 :
                                      // InternalSARL.g:3217:8: ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? )
                                      {
                                      // InternalSARL.g:3217:8: ( ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )? )
                                      // InternalSARL.g:3218:9: ( (lv_name_35_0= ruleValidID ) ) (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )?
                                      {
                                      // InternalSARL.g:3218:9: ( (lv_name_35_0= ruleValidID ) )
                                      // InternalSARL.g:3219:10: (lv_name_35_0= ruleValidID )
                                      {
                                      // InternalSARL.g:3219:10: (lv_name_35_0= ruleValidID )
                                      // InternalSARL.g:3220:11: lv_name_35_0= ruleValidID
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        											newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_3_2_1_2_1_0_0());
                                        										
                                      }
                                      pushFollow(FOLLOW_44);
                                      lv_name_35_0=ruleValidID();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        											if (current==null) {
                                        												current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        											}
                                        											set(
                                        												current,
                                        												"name",
                                        												lv_name_35_0,
                                        												"org.eclipse.xtend.core.Xtend.ValidID");
                                        											afterParserOrEnumRuleCall();
                                        										
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:3237:9: (otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) ) )?
                                      int alt88=2;
                                      int LA88_0 = input.LA(1);
  
                                      if ( (LA88_0==46) ) {
                                          alt88=1;
                                      }
                                      switch (alt88) {
                                          case 1 :
                                              // InternalSARL.g:3238:10: otherlv_36= ':' ( (lv_type_37_0= ruleJvmTypeReference ) )
                                              {
                                              otherlv_36=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                                              if ( state.backtracking==0 ) {
  
                                                										newLeafNode(otherlv_36, grammarAccess.getAOPMemberAccess().getColonKeyword_2_3_2_1_2_1_1_0());
                                                									
                                              }
                                              // InternalSARL.g:3242:10: ( (lv_type_37_0= ruleJvmTypeReference ) )
                                              // InternalSARL.g:3243:11: (lv_type_37_0= ruleJvmTypeReference )
                                              {
                                              // InternalSARL.g:3243:11: (lv_type_37_0= ruleJvmTypeReference )
                                              // InternalSARL.g:3244:12: lv_type_37_0= ruleJvmTypeReference
                                              {
                                              if ( state.backtracking==0 ) {
  
                                                												newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeJvmTypeReferenceParserRuleCall_2_3_2_1_2_1_1_1_0());
                                                											
                                              }
                                              pushFollow(FOLLOW_42);
                                              lv_type_37_0=ruleJvmTypeReference();
  
                                              state._fsp--;
                                              if (state.failed) return current;
                                              if ( state.backtracking==0 ) {
  
                                                												if (current==null) {
                                                													current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                                												}
                                                												set(
                                                													current,
                                                													"type",
                                                													lv_type_37_0,
                                                													"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                                                												afterParserOrEnumRuleCall();
                                                											
                                              }
  
                                              }
  
  
                                              }
  
  
                                              }
                                              break;
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
  
                              }
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3266:5: (otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) ) )?
                      int alt91=2;
                      int LA91_0 = input.LA(1);
  
                      if ( (LA91_0==47) ) {
                          alt91=1;
                      }
                      switch (alt91) {
                          case 1 :
                              // InternalSARL.g:3267:6: otherlv_38= '=' ( (lv_initialValue_39_0= ruleXExpression ) )
                              {
                              otherlv_38=(Token)match(input,47,FOLLOW_45); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_38, grammarAccess.getAOPMemberAccess().getEqualsSignKeyword_2_3_3_0());
                                					
                              }
                              // InternalSARL.g:3271:6: ( (lv_initialValue_39_0= ruleXExpression ) )
                              // InternalSARL.g:3272:7: (lv_initialValue_39_0= ruleXExpression )
                              {
                              // InternalSARL.g:3272:7: (lv_initialValue_39_0= ruleXExpression )
                              // InternalSARL.g:3273:8: lv_initialValue_39_0= ruleXExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getInitialValueXExpressionParserRuleCall_2_3_3_1_0());
                                							
                              }
                              pushFollow(FOLLOW_46);
                              lv_initialValue_39_0=ruleXExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								set(
                                									current,
                                									"initialValue",
                                									lv_initialValue_39_0,
                                									"org.eclipse.xtext.xbase.Xbase.XExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3291:5: (otherlv_40= ';' )?
                      int alt92=2;
                      int LA92_0 = input.LA(1);
  
                      if ( (LA92_0==26) ) {
                          alt92=1;
                      }
                      switch (alt92) {
                          case 1 :
                              // InternalSARL.g:3292:6: otherlv_40= ';'
                              {
                              otherlv_40=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_40, grammarAccess.getAOPMemberAccess().getSemicolonKeyword_2_3_4());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 5 :
                      // InternalSARL.g:3299:4: ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) )
                      {
                      // InternalSARL.g:3299:4: ( () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) ) )
                      // InternalSARL.g:3300:5: () ( (lv_modifiers_42_0= ruleCommonModifier ) )* otherlv_43= 'new' (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )? (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( (lv_expression_63_0= ruleXBlockExpression ) )
                      {
                      // InternalSARL.g:3300:5: ()
                      // InternalSARL.g:3301:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlConstructorAnnotationInfoAction_2_4_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:3307:5: ( (lv_modifiers_42_0= ruleCommonModifier ) )*
                      loop93:
                      do {
                          int alt93=2;
                          int LA93_0 = input.LA(1);
  
                          if ( (LA93_0==25||(LA93_0>=78 && LA93_0<=89)) ) {
                              alt93=1;
                          }
  
  
                          switch (alt93) {
                      	case 1 :
                      	    // InternalSARL.g:3308:6: (lv_modifiers_42_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:3308:6: (lv_modifiers_42_0= ruleCommonModifier )
                      	    // InternalSARL.g:3309:7: lv_modifiers_42_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_4_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_47);
                      	    lv_modifiers_42_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_42_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop93;
                          }
                      } while (true);
  
                      otherlv_43=(Token)match(input,48,FOLLOW_48); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_43, grammarAccess.getAOPMemberAccess().getNewKeyword_2_4_2());
                        				
                      }
                      // InternalSARL.g:3330:5: (otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>' )?
                      int alt95=2;
                      int LA95_0 = input.LA(1);
  
                      if ( (LA95_0==40) ) {
                          alt95=1;
                      }
                      switch (alt95) {
                          case 1 :
                              // InternalSARL.g:3331:6: otherlv_44= '<' ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) ) (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )* otherlv_48= '>'
                              {
                              otherlv_44=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_44, grammarAccess.getAOPMemberAccess().getLessThanSignKeyword_2_4_3_0());
                                					
                              }
                              // InternalSARL.g:3335:6: ( (lv_typeParameters_45_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:3336:7: (lv_typeParameters_45_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:3336:7: (lv_typeParameters_45_0= ruleJvmTypeParameter )
                              // InternalSARL.g:3337:8: lv_typeParameters_45_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_3_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_45_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_45_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:3354:6: (otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) ) )*
                              loop94:
                              do {
                                  int alt94=2;
                                  int LA94_0 = input.LA(1);
  
                                  if ( (LA94_0==32) ) {
                                      alt94=1;
                                  }
  
  
                                  switch (alt94) {
                              	case 1 :
                              	    // InternalSARL.g:3355:7: otherlv_46= ',' ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_46=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_46, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_4_3_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:3359:7: ( (lv_typeParameters_47_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:3360:8: (lv_typeParameters_47_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:3360:8: (lv_typeParameters_47_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:3361:9: lv_typeParameters_47_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_3_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_47_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_47_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop94;
                                  }
                              } while (true);
  
                              otherlv_48=(Token)match(input,41,FOLLOW_49); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_48, grammarAccess.getAOPMemberAccess().getGreaterThanSignKeyword_2_4_3_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3384:5: (otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')' )?
                      int alt98=2;
                      int LA98_0 = input.LA(1);
  
                      if ( (LA98_0==49) ) {
                          alt98=1;
                      }
                      switch (alt98) {
                          case 1 :
                              // InternalSARL.g:3385:6: otherlv_49= '(' ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )? otherlv_53= ')'
                              {
                              otherlv_49=(Token)match(input,49,FOLLOW_50); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_49, grammarAccess.getAOPMemberAccess().getLeftParenthesisKeyword_2_4_4_0());
                                					
                              }
                              // InternalSARL.g:3389:6: ( ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )* )?
                              int alt97=2;
                              int LA97_0 = input.LA(1);
  
                              if ( (LA97_0==RULE_ID||(LA97_0>=44 && LA97_0<=45)||(LA97_0>=92 && LA97_0<=95)||LA97_0==105) ) {
                                  alt97=1;
                              }
                              switch (alt97) {
                                  case 1 :
                                      // InternalSARL.g:3390:7: ( (lv_parameters_50_0= ruleParameter ) ) (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )*
                                      {
                                      // InternalSARL.g:3390:7: ( (lv_parameters_50_0= ruleParameter ) )
                                      // InternalSARL.g:3391:8: (lv_parameters_50_0= ruleParameter )
                                      {
                                      // InternalSARL.g:3391:8: (lv_parameters_50_0= ruleParameter )
                                      // InternalSARL.g:3392:9: lv_parameters_50_0= ruleParameter
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getAOPMemberAccess().getParametersParameterParserRuleCall_2_4_4_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_51);
                                      lv_parameters_50_0=ruleParameter();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        									}
                                        									add(
                                        										current,
                                        										"parameters",
                                        										lv_parameters_50_0,
                                        										"io.sarl.lang.SARL.Parameter");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:3409:7: (otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) ) )*
                                      loop96:
                                      do {
                                          int alt96=2;
                                          int LA96_0 = input.LA(1);
  
                                          if ( (LA96_0==32) ) {
                                              alt96=1;
                                          }
  
  
                                          switch (alt96) {
                                      	case 1 :
                                      	    // InternalSARL.g:3410:8: otherlv_51= ',' ( (lv_parameters_52_0= ruleParameter ) )
                                      	    {
                                      	    otherlv_51=(Token)match(input,32,FOLLOW_52); if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      								newLeafNode(otherlv_51, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_4_4_1_1_0());
                                      	      							
                                      	    }
                                      	    // InternalSARL.g:3414:8: ( (lv_parameters_52_0= ruleParameter ) )
                                      	    // InternalSARL.g:3415:9: (lv_parameters_52_0= ruleParameter )
                                      	    {
                                      	    // InternalSARL.g:3415:9: (lv_parameters_52_0= ruleParameter )
                                      	    // InternalSARL.g:3416:10: lv_parameters_52_0= ruleParameter
                                      	    {
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										newCompositeNode(grammarAccess.getAOPMemberAccess().getParametersParameterParserRuleCall_2_4_4_1_1_1_0());
                                      	      									
                                      	    }
                                      	    pushFollow(FOLLOW_51);
                                      	    lv_parameters_52_0=ruleParameter();
  
                                      	    state._fsp--;
                                      	    if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										if (current==null) {
                                      	      											current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                      	      										}
                                      	      										add(
                                      	      											current,
                                      	      											"parameters",
                                      	      											lv_parameters_52_0,
                                      	      											"io.sarl.lang.SARL.Parameter");
                                      	      										afterParserOrEnumRuleCall();
                                      	      									
                                      	    }
  
                                      	    }
  
  
                                      	    }
  
  
                                      	    }
                                      	    break;
  
                                      	default :
                                      	    break loop96;
                                          }
                                      } while (true);
  
  
                                      }
                                      break;
  
                              }
  
                              otherlv_53=(Token)match(input,50,FOLLOW_53); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_53, grammarAccess.getAOPMemberAccess().getRightParenthesisKeyword_2_4_4_2());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3440:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:3441:6: ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:3441:6: ( ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:3442:7: ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5());
                      // InternalSARL.g:3445:7: ( ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:3446:8: ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:3446:8: ( ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      loop101:
                      do {
                          int alt101=3;
                          int LA101_0 = input.LA(1);
  
                          if ( LA101_0 == 51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 0) ) {
                              alt101=1;
                          }
                          else if ( LA101_0 == 52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 1) ) {
                              alt101=2;
                          }
  
  
                          switch (alt101) {
                      	case 1 :
                      	    // InternalSARL.g:3447:6: ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:3447:6: ({...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:3448:7: {...}? => ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 0)");
                      	    }
                      	    // InternalSARL.g:3448:112: ( ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:3449:8: ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 0);
                      	    // InternalSARL.g:3452:11: ({...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:3452:12: {...}? => (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:3452:21: (otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:3452:22: otherlv_55= 'throws' ( (lv_exceptions_56_0= ruleJvmTypeReference ) ) (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_55=(Token)match(input,51,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_55, grammarAccess.getAOPMemberAccess().getThrowsKeyword_2_4_5_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:3456:11: ( (lv_exceptions_56_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:3457:12: (lv_exceptions_56_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:3457:12: (lv_exceptions_56_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:3458:13: lv_exceptions_56_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_4_5_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_54);
                      	    lv_exceptions_56_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"exceptions",
                      	      														lv_exceptions_56_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:3475:11: (otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) ) )*
                      	    loop99:
                      	    do {
                      	        int alt99=2;
                      	        int LA99_0 = input.LA(1);
  
                      	        if ( (LA99_0==32) ) {
                      	            alt99=1;
                      	        }
  
  
                      	        switch (alt99) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:3476:12: otherlv_57= ',' ( (lv_exceptions_58_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_57=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_57, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_4_5_0_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:3480:12: ( (lv_exceptions_58_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:3481:13: (lv_exceptions_58_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:3481:13: (lv_exceptions_58_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:3482:14: lv_exceptions_58_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_4_5_0_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_54);
                      	    	    lv_exceptions_58_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"exceptions",
                      	    	      															lv_exceptions_58_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop99;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:3506:6: ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:3506:6: ({...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    // InternalSARL.g:3507:7: {...}? => ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 1)");
                      	    }
                      	    // InternalSARL.g:3507:112: ( ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    // InternalSARL.g:3508:8: ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5(), 1);
                      	    // InternalSARL.g:3511:11: ({...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* ) )
                      	    // InternalSARL.g:3511:12: {...}? => (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:3511:21: (otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )* )
                      	    // InternalSARL.g:3511:22: otherlv_59= 'with' ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) ) (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )*
                      	    {
                      	    otherlv_59=(Token)match(input,52,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_59, grammarAccess.getAOPMemberAccess().getWithKeyword_2_4_5_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:3515:11: ( (lv_typeParameters_60_0= ruleJvmTypeParameter ) )
                      	    // InternalSARL.g:3516:12: (lv_typeParameters_60_0= ruleJvmTypeParameter )
                      	    {
                      	    // InternalSARL.g:3516:12: (lv_typeParameters_60_0= ruleJvmTypeParameter )
                      	    // InternalSARL.g:3517:13: lv_typeParameters_60_0= ruleJvmTypeParameter
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_5_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_54);
                      	    lv_typeParameters_60_0=ruleJvmTypeParameter();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"typeParameters",
                      	      														lv_typeParameters_60_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:3534:11: (otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) ) )*
                      	    loop100:
                      	    do {
                      	        int alt100=2;
                      	        int LA100_0 = input.LA(1);
  
                      	        if ( (LA100_0==32) ) {
                      	            alt100=1;
                      	        }
  
  
                      	        switch (alt100) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:3535:12: otherlv_61= ',' ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) )
                      	    	    {
                      	    	    otherlv_61=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_61, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_4_5_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:3539:12: ( (lv_typeParameters_62_0= ruleJvmTypeParameter ) )
                      	    	    // InternalSARL.g:3540:13: (lv_typeParameters_62_0= ruleJvmTypeParameter )
                      	    	    {
                      	    	    // InternalSARL.g:3540:13: (lv_typeParameters_62_0= ruleJvmTypeParameter )
                      	    	    // InternalSARL.g:3541:14: lv_typeParameters_62_0= ruleJvmTypeParameter
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_4_5_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_54);
                      	    	    lv_typeParameters_62_0=ruleJvmTypeParameter();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"typeParameters",
                      	    	      															lv_typeParameters_62_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop100;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop101;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_4_5());
  
                      }
  
                      // InternalSARL.g:3572:5: ( (lv_expression_63_0= ruleXBlockExpression ) )
                      // InternalSARL.g:3573:6: (lv_expression_63_0= ruleXBlockExpression )
                      {
                      // InternalSARL.g:3573:6: (lv_expression_63_0= ruleXBlockExpression )
                      // InternalSARL.g:3574:7: lv_expression_63_0= ruleXBlockExpression
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getExpressionXBlockExpressionParserRuleCall_2_4_6_0());
                        						
                      }
                      pushFollow(FOLLOW_2);
                      lv_expression_63_0=ruleXBlockExpression();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"expression",
                        								lv_expression_63_0,
                        								"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 6 :
                      // InternalSARL.g:3593:4: ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? )
                      {
                      // InternalSARL.g:3593:4: ( () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )? )
                      // InternalSARL.g:3594:5: () ( (lv_modifiers_65_0= ruleCommonModifier ) )* ( (lv_modifiers_66_0= ruleMethodModifier ) ) ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )* (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )? ( (lv_name_74_0= ruleFunctionID ) ) (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )? (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) ) ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )?
                      {
                      // InternalSARL.g:3594:5: ()
                      // InternalSARL.g:3595:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlActionAnnotationInfoAction_2_5_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:3601:5: ( (lv_modifiers_65_0= ruleCommonModifier ) )*
                      loop102:
                      do {
                          int alt102=2;
                          int LA102_0 = input.LA(1);
  
                          if ( (LA102_0==25||(LA102_0>=78 && LA102_0<=89)) ) {
                              alt102=1;
                          }
  
  
                          switch (alt102) {
                      	case 1 :
                      	    // InternalSARL.g:3602:6: (lv_modifiers_65_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:3602:6: (lv_modifiers_65_0= ruleCommonModifier )
                      	    // InternalSARL.g:3603:7: lv_modifiers_65_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_5_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_55);
                      	    lv_modifiers_65_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_65_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop102;
                          }
                      } while (true);
  
                      // InternalSARL.g:3620:5: ( (lv_modifiers_66_0= ruleMethodModifier ) )
                      // InternalSARL.g:3621:6: (lv_modifiers_66_0= ruleMethodModifier )
                      {
                      // InternalSARL.g:3621:6: (lv_modifiers_66_0= ruleMethodModifier )
                      // InternalSARL.g:3622:7: lv_modifiers_66_0= ruleMethodModifier
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersMethodModifierParserRuleCall_2_5_2_0());
                        						
                      }
                      pushFollow(FOLLOW_65);
                      lv_modifiers_66_0=ruleMethodModifier();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							add(
                        								current,
                        								"modifiers",
                        								lv_modifiers_66_0,
                        								"org.eclipse.xtend.core.Xtend.MethodModifier");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:3639:5: ( ( (lv_modifiers_67_0= ruleCommonModifier ) ) | ( (lv_modifiers_68_0= ruleMethodModifier ) ) )*
                      loop103:
                      do {
                          int alt103=3;
                          int LA103_0 = input.LA(1);
  
                          if ( (LA103_0==25||(LA103_0>=78 && LA103_0<=89)) ) {
                              alt103=1;
                          }
                          else if ( ((LA103_0>=90 && LA103_0<=91)) ) {
                              alt103=2;
                          }
  
  
                          switch (alt103) {
                      	case 1 :
                      	    // InternalSARL.g:3640:6: ( (lv_modifiers_67_0= ruleCommonModifier ) )
                      	    {
                      	    // InternalSARL.g:3640:6: ( (lv_modifiers_67_0= ruleCommonModifier ) )
                      	    // InternalSARL.g:3641:7: (lv_modifiers_67_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:3641:7: (lv_modifiers_67_0= ruleCommonModifier )
                      	    // InternalSARL.g:3642:8: lv_modifiers_67_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_5_3_0_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_65);
                      	    lv_modifiers_67_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"modifiers",
                      	      									lv_modifiers_67_0,
                      	      									"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:3660:6: ( (lv_modifiers_68_0= ruleMethodModifier ) )
                      	    {
                      	    // InternalSARL.g:3660:6: ( (lv_modifiers_68_0= ruleMethodModifier ) )
                      	    // InternalSARL.g:3661:7: (lv_modifiers_68_0= ruleMethodModifier )
                      	    {
                      	    // InternalSARL.g:3661:7: (lv_modifiers_68_0= ruleMethodModifier )
                      	    // InternalSARL.g:3662:8: lv_modifiers_68_0= ruleMethodModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      								newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersMethodModifierParserRuleCall_2_5_3_1_0());
                      	      							
                      	    }
                      	    pushFollow(FOLLOW_65);
                      	    lv_modifiers_68_0=ruleMethodModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      								if (current==null) {
                      	      									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      								}
                      	      								add(
                      	      									current,
                      	      									"modifiers",
                      	      									lv_modifiers_68_0,
                      	      									"org.eclipse.xtend.core.Xtend.MethodModifier");
                      	      								afterParserOrEnumRuleCall();
                      	      							
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop103;
                          }
                      } while (true);
  
                      // InternalSARL.g:3680:5: (otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>' )?
                      int alt105=2;
                      int LA105_0 = input.LA(1);
  
                      if ( (LA105_0==40) ) {
                          int LA105_1 = input.LA(2);
  
                          if ( (LA105_1==RULE_ID||(LA105_1>=92 && LA105_1<=95)) ) {
                              alt105=1;
                          }
                          else if ( (LA105_1==44) ) {
                              int LA105_4 = input.LA(3);
  
                              if ( (LA105_4==28||LA105_4==32||LA105_4==41) ) {
                                  alt105=1;
                              }
                          }
                      }
                      switch (alt105) {
                          case 1 :
                              // InternalSARL.g:3681:6: otherlv_69= '<' ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) ) (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )* otherlv_73= '>'
                              {
                              otherlv_69=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_69, grammarAccess.getAOPMemberAccess().getLessThanSignKeyword_2_5_4_0());
                                					
                              }
                              // InternalSARL.g:3685:6: ( (lv_typeParameters_70_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:3686:7: (lv_typeParameters_70_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:3686:7: (lv_typeParameters_70_0= ruleJvmTypeParameter )
                              // InternalSARL.g:3687:8: lv_typeParameters_70_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_5_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_70_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_70_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:3704:6: (otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) ) )*
                              loop104:
                              do {
                                  int alt104=2;
                                  int LA104_0 = input.LA(1);
  
                                  if ( (LA104_0==32) ) {
                                      alt104=1;
                                  }
  
  
                                  switch (alt104) {
                              	case 1 :
                              	    // InternalSARL.g:3705:7: otherlv_71= ',' ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_71=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_71, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_5_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:3709:7: ( (lv_typeParameters_72_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:3710:8: (lv_typeParameters_72_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:3710:8: (lv_typeParameters_72_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:3711:9: lv_typeParameters_72_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_5_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_72_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_72_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop104;
                                  }
                              } while (true);
  
                              otherlv_73=(Token)match(input,41,FOLLOW_56); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_73, grammarAccess.getAOPMemberAccess().getGreaterThanSignKeyword_2_5_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3734:5: ( (lv_name_74_0= ruleFunctionID ) )
                      // InternalSARL.g:3735:6: (lv_name_74_0= ruleFunctionID )
                      {
                      // InternalSARL.g:3735:6: (lv_name_74_0= ruleFunctionID )
                      // InternalSARL.g:3736:7: lv_name_74_0= ruleFunctionID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameFunctionIDParserRuleCall_2_5_5_0());
                        						
                      }
                      pushFollow(FOLLOW_57);
                      lv_name_74_0=ruleFunctionID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_74_0,
                        								"org.eclipse.xtend.core.Xtend.FunctionID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:3753:5: (otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')' )?
                      int alt108=2;
                      int LA108_0 = input.LA(1);
  
                      if ( (LA108_0==49) ) {
                          alt108=1;
                      }
                      switch (alt108) {
                          case 1 :
                              // InternalSARL.g:3754:6: otherlv_75= '(' ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )? otherlv_79= ')'
                              {
                              otherlv_75=(Token)match(input,49,FOLLOW_50); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_75, grammarAccess.getAOPMemberAccess().getLeftParenthesisKeyword_2_5_6_0());
                                					
                              }
                              // InternalSARL.g:3758:6: ( ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )* )?
                              int alt107=2;
                              int LA107_0 = input.LA(1);
  
                              if ( (LA107_0==RULE_ID||(LA107_0>=44 && LA107_0<=45)||(LA107_0>=92 && LA107_0<=95)||LA107_0==105) ) {
                                  alt107=1;
                              }
                              switch (alt107) {
                                  case 1 :
                                      // InternalSARL.g:3759:7: ( (lv_parameters_76_0= ruleParameter ) ) (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )*
                                      {
                                      // InternalSARL.g:3759:7: ( (lv_parameters_76_0= ruleParameter ) )
                                      // InternalSARL.g:3760:8: (lv_parameters_76_0= ruleParameter )
                                      {
                                      // InternalSARL.g:3760:8: (lv_parameters_76_0= ruleParameter )
                                      // InternalSARL.g:3761:9: lv_parameters_76_0= ruleParameter
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getAOPMemberAccess().getParametersParameterParserRuleCall_2_5_6_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_51);
                                      lv_parameters_76_0=ruleParameter();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        									}
                                        									add(
                                        										current,
                                        										"parameters",
                                        										lv_parameters_76_0,
                                        										"io.sarl.lang.SARL.Parameter");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
                                      // InternalSARL.g:3778:7: (otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) ) )*
                                      loop106:
                                      do {
                                          int alt106=2;
                                          int LA106_0 = input.LA(1);
  
                                          if ( (LA106_0==32) ) {
                                              alt106=1;
                                          }
  
  
                                          switch (alt106) {
                                      	case 1 :
                                      	    // InternalSARL.g:3779:8: otherlv_77= ',' ( (lv_parameters_78_0= ruleParameter ) )
                                      	    {
                                      	    otherlv_77=(Token)match(input,32,FOLLOW_52); if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      								newLeafNode(otherlv_77, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_5_6_1_1_0());
                                      	      							
                                      	    }
                                      	    // InternalSARL.g:3783:8: ( (lv_parameters_78_0= ruleParameter ) )
                                      	    // InternalSARL.g:3784:9: (lv_parameters_78_0= ruleParameter )
                                      	    {
                                      	    // InternalSARL.g:3784:9: (lv_parameters_78_0= ruleParameter )
                                      	    // InternalSARL.g:3785:10: lv_parameters_78_0= ruleParameter
                                      	    {
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										newCompositeNode(grammarAccess.getAOPMemberAccess().getParametersParameterParserRuleCall_2_5_6_1_1_1_0());
                                      	      									
                                      	    }
                                      	    pushFollow(FOLLOW_51);
                                      	    lv_parameters_78_0=ruleParameter();
  
                                      	    state._fsp--;
                                      	    if (state.failed) return current;
                                      	    if ( state.backtracking==0 ) {
  
                                      	      										if (current==null) {
                                      	      											current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                      	      										}
                                      	      										add(
                                      	      											current,
                                      	      											"parameters",
                                      	      											lv_parameters_78_0,
                                      	      											"io.sarl.lang.SARL.Parameter");
                                      	      										afterParserOrEnumRuleCall();
                                      	      									
                                      	    }
  
                                      	    }
  
  
                                      	    }
  
  
                                      	    }
                                      	    break;
  
                                      	default :
                                      	    break loop106;
                                          }
                                      } while (true);
  
  
                                      }
                                      break;
  
                              }
  
                              otherlv_79=(Token)match(input,50,FOLLOW_58); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_79, grammarAccess.getAOPMemberAccess().getRightParenthesisKeyword_2_5_6_2());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3809:5: (otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) ) )?
                      int alt110=2;
                      int LA110_0 = input.LA(1);
  
                      if ( (LA110_0==46) ) {
                          alt110=1;
                      }
                      switch (alt110) {
                          case 1 :
                              // InternalSARL.g:3810:6: otherlv_80= ':' ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) )
                              {
                              otherlv_80=(Token)match(input,46,FOLLOW_41); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_80, grammarAccess.getAOPMemberAccess().getColonKeyword_2_5_7_0());
                                					
                              }
                              // InternalSARL.g:3814:6: ( ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) ) | ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) ) )
                              int alt109=2;
                              alt109 = dfa109.predict(input);
                              switch (alt109) {
                                  case 1 :
                                      // InternalSARL.g:3815:7: ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) )
                                      {
                                      // InternalSARL.g:3815:7: ( (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs ) )
                                      // InternalSARL.g:3816:8: (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs )
                                      {
                                      // InternalSARL.g:3816:8: (lv_returnType_81_0= ruleTypeReferenceWithTypeArgs )
                                      // InternalSARL.g:3817:9: lv_returnType_81_0= ruleTypeReferenceWithTypeArgs
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getAOPMemberAccess().getReturnTypeTypeReferenceWithTypeArgsParserRuleCall_2_5_7_1_0_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_59);
                                      lv_returnType_81_0=ruleTypeReferenceWithTypeArgs();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        									}
                                        									set(
                                        										current,
                                        										"returnType",
                                        										lv_returnType_81_0,
                                        										"org.eclipse.xtend.core.Xtend.TypeReferenceWithTypeArgs");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
                                  case 2 :
                                      // InternalSARL.g:3835:7: ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) )
                                      {
                                      // InternalSARL.g:3835:7: ( (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs ) )
                                      // InternalSARL.g:3836:8: (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs )
                                      {
                                      // InternalSARL.g:3836:8: (lv_returnType_82_0= ruleTypeReferenceNoTypeArgs )
                                      // InternalSARL.g:3837:9: lv_returnType_82_0= ruleTypeReferenceNoTypeArgs
                                      {
                                      if ( state.backtracking==0 ) {
  
                                        									newCompositeNode(grammarAccess.getAOPMemberAccess().getReturnTypeTypeReferenceNoTypeArgsParserRuleCall_2_5_7_1_1_0());
                                        								
                                      }
                                      pushFollow(FOLLOW_59);
                                      lv_returnType_82_0=ruleTypeReferenceNoTypeArgs();
  
                                      state._fsp--;
                                      if (state.failed) return current;
                                      if ( state.backtracking==0 ) {
  
                                        									if (current==null) {
                                        										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                        									}
                                        									set(
                                        										current,
                                        										"returnType",
                                        										lv_returnType_82_0,
                                        										"org.eclipse.xtend.core.Xtend.TypeReferenceNoTypeArgs");
                                        									afterParserOrEnumRuleCall();
                                        								
                                      }
  
                                      }
  
  
                                      }
  
  
                                      }
                                      break;
  
                              }
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:3856:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:3857:6: ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:3857:6: ( ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:3858:7: ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8());
                      // InternalSARL.g:3861:7: ( ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:3862:8: ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:3862:8: ( ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) ) | ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) ) )*
                      loop114:
                      do {
                          int alt114=4;
                          int LA114_0 = input.LA(1);
  
                          if ( LA114_0 == 51 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 0) ) {
                              alt114=1;
                          }
                          else if ( LA114_0 == 53 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 1) ) {
                              alt114=2;
                          }
                          else if ( LA114_0 == 52 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 2) ) {
                              alt114=3;
                          }
  
  
                          switch (alt114) {
                      	case 1 :
                      	    // InternalSARL.g:3863:6: ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:3863:6: ({...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:3864:7: {...}? => ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 0)");
                      	    }
                      	    // InternalSARL.g:3864:112: ( ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:3865:8: ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 0);
                      	    // InternalSARL.g:3868:11: ({...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:3868:12: {...}? => (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:3868:21: (otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:3868:22: otherlv_84= 'throws' ( (lv_exceptions_85_0= ruleJvmTypeReference ) ) (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_84=(Token)match(input,51,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_84, grammarAccess.getAOPMemberAccess().getThrowsKeyword_2_5_8_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:3872:11: ( (lv_exceptions_85_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:3873:12: (lv_exceptions_85_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:3873:12: (lv_exceptions_85_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:3874:13: lv_exceptions_85_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_5_8_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_exceptions_85_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"exceptions",
                      	      														lv_exceptions_85_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:3891:11: (otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) ) )*
                      	    loop111:
                      	    do {
                      	        int alt111=2;
                      	        int LA111_0 = input.LA(1);
  
                      	        if ( (LA111_0==32) ) {
                      	            alt111=1;
                      	        }
  
  
                      	        switch (alt111) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:3892:12: otherlv_86= ',' ( (lv_exceptions_87_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_86=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_86, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_5_8_0_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:3896:12: ( (lv_exceptions_87_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:3897:13: (lv_exceptions_87_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:3897:13: (lv_exceptions_87_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:3898:14: lv_exceptions_87_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getExceptionsJvmTypeReferenceParserRuleCall_2_5_8_0_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_exceptions_87_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"exceptions",
                      	    	      															lv_exceptions_87_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop111;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:3922:6: ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:3922:6: ({...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:3923:7: {...}? => ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 1)");
                      	    }
                      	    // InternalSARL.g:3923:112: ( ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:3924:8: ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 1);
                      	    // InternalSARL.g:3927:11: ({...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* ) )
                      	    // InternalSARL.g:3927:12: {...}? => (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:3927:21: (otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )* )
                      	    // InternalSARL.g:3927:22: otherlv_88= 'fires' ( (lv_firedEvents_89_0= ruleJvmTypeReference ) ) (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )*
                      	    {
                      	    otherlv_88=(Token)match(input,53,FOLLOW_41); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_88, grammarAccess.getAOPMemberAccess().getFiresKeyword_2_5_8_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:3931:11: ( (lv_firedEvents_89_0= ruleJvmTypeReference ) )
                      	    // InternalSARL.g:3932:12: (lv_firedEvents_89_0= ruleJvmTypeReference )
                      	    {
                      	    // InternalSARL.g:3932:12: (lv_firedEvents_89_0= ruleJvmTypeReference )
                      	    // InternalSARL.g:3933:13: lv_firedEvents_89_0= ruleJvmTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_2_5_8_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_firedEvents_89_0=ruleJvmTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"firedEvents",
                      	      														lv_firedEvents_89_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:3950:11: (otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) ) )*
                      	    loop112:
                      	    do {
                      	        int alt112=2;
                      	        int LA112_0 = input.LA(1);
  
                      	        if ( (LA112_0==32) ) {
                      	            alt112=1;
                      	        }
  
  
                      	        switch (alt112) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:3951:12: otherlv_90= ',' ( (lv_firedEvents_91_0= ruleJvmTypeReference ) )
                      	    	    {
                      	    	    otherlv_90=(Token)match(input,32,FOLLOW_41); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_90, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_5_8_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:3955:12: ( (lv_firedEvents_91_0= ruleJvmTypeReference ) )
                      	    	    // InternalSARL.g:3956:13: (lv_firedEvents_91_0= ruleJvmTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:3956:13: (lv_firedEvents_91_0= ruleJvmTypeReference )
                      	    	    // InternalSARL.g:3957:14: lv_firedEvents_91_0= ruleJvmTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getFiredEventsJvmTypeReferenceParserRuleCall_2_5_8_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_firedEvents_91_0=ruleJvmTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"firedEvents",
                      	    	      															lv_firedEvents_91_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop112;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 3 :
                      	    // InternalSARL.g:3981:6: ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:3981:6: ({...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) ) )
                      	    // InternalSARL.g:3982:7: {...}? => ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 2) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 2)");
                      	    }
                      	    // InternalSARL.g:3982:112: ( ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) ) )
                      	    // InternalSARL.g:3983:8: ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8(), 2);
                      	    // InternalSARL.g:3986:11: ({...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* ) )
                      	    // InternalSARL.g:3986:12: {...}? => (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:3986:21: (otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )* )
                      	    // InternalSARL.g:3986:22: otherlv_92= 'with' ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) ) (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )*
                      	    {
                      	    otherlv_92=(Token)match(input,52,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_92, grammarAccess.getAOPMemberAccess().getWithKeyword_2_5_8_2_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:3990:11: ( (lv_typeParameters_93_0= ruleJvmTypeParameter ) )
                      	    // InternalSARL.g:3991:12: (lv_typeParameters_93_0= ruleJvmTypeParameter )
                      	    {
                      	    // InternalSARL.g:3991:12: (lv_typeParameters_93_0= ruleJvmTypeParameter )
                      	    // InternalSARL.g:3992:13: lv_typeParameters_93_0= ruleJvmTypeParameter
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_5_8_2_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_60);
                      	    lv_typeParameters_93_0=ruleJvmTypeParameter();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"typeParameters",
                      	      														lv_typeParameters_93_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:4009:11: (otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) ) )*
                      	    loop113:
                      	    do {
                      	        int alt113=2;
                      	        int LA113_0 = input.LA(1);
  
                      	        if ( (LA113_0==32) ) {
                      	            alt113=1;
                      	        }
  
  
                      	        switch (alt113) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:4010:12: otherlv_94= ',' ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) )
                      	    	    {
                      	    	    otherlv_94=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_94, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_5_8_2_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:4014:12: ( (lv_typeParameters_95_0= ruleJvmTypeParameter ) )
                      	    	    // InternalSARL.g:4015:13: (lv_typeParameters_95_0= ruleJvmTypeParameter )
                      	    	    {
                      	    	    // InternalSARL.g:4015:13: (lv_typeParameters_95_0= ruleJvmTypeParameter )
                      	    	    // InternalSARL.g:4016:14: lv_typeParameters_95_0= ruleJvmTypeParameter
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_5_8_2_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_60);
                      	    	    lv_typeParameters_95_0=ruleJvmTypeParameter();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"typeParameters",
                      	    	      															lv_typeParameters_95_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop113;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop114;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_5_8());
  
                      }
  
                      // InternalSARL.g:4047:5: ( ( (lv_expression_96_0= ruleXBlockExpression ) ) | otherlv_97= ';' )?
                      int alt115=3;
                      int LA115_0 = input.LA(1);
  
                      if ( (LA115_0==29) ) {
                          alt115=1;
                      }
                      else if ( (LA115_0==26) ) {
                          alt115=2;
                      }
                      switch (alt115) {
                          case 1 :
                              // InternalSARL.g:4048:6: ( (lv_expression_96_0= ruleXBlockExpression ) )
                              {
                              // InternalSARL.g:4048:6: ( (lv_expression_96_0= ruleXBlockExpression ) )
                              // InternalSARL.g:4049:7: (lv_expression_96_0= ruleXBlockExpression )
                              {
                              // InternalSARL.g:4049:7: (lv_expression_96_0= ruleXBlockExpression )
                              // InternalSARL.g:4050:8: lv_expression_96_0= ruleXBlockExpression
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getExpressionXBlockExpressionParserRuleCall_2_5_9_0_0());
                                							
                              }
                              pushFollow(FOLLOW_2);
                              lv_expression_96_0=ruleXBlockExpression();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								set(
                                									current,
                                									"expression",
                                									lv_expression_96_0,
                                									"org.eclipse.xtext.xbase.Xbase.XBlockExpression");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
  
                              }
                              break;
                          case 2 :
                              // InternalSARL.g:4068:6: otherlv_97= ';'
                              {
                              otherlv_97=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_97, grammarAccess.getAOPMemberAccess().getSemicolonKeyword_2_5_9_1());
                                					
                              }
  
                              }
                              break;
  
                      }
  
  
                      }
  
  
                      }
                      break;
                  case 7 :
                      // InternalSARL.g:4075:4: ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' )
                      {
                      // InternalSARL.g:4075:4: ( () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}' )
                      // InternalSARL.g:4076:5: () ( (lv_modifiers_99_0= ruleCommonModifier ) )* otherlv_100= 'class' ( (lv_name_101_0= ruleValidID ) ) (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )? ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) ) otherlv_114= '{' ( (lv_members_115_0= ruleMember ) )* otherlv_116= '}'
                      {
                      // InternalSARL.g:4076:5: ()
                      // InternalSARL.g:4077:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlClassAnnotationInfoAction_2_6_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:4083:5: ( (lv_modifiers_99_0= ruleCommonModifier ) )*
                      loop116:
                      do {
                          int alt116=2;
                          int LA116_0 = input.LA(1);
  
                          if ( (LA116_0==25||(LA116_0>=78 && LA116_0<=89)) ) {
                              alt116=1;
                          }
  
  
                          switch (alt116) {
                      	case 1 :
                      	    // InternalSARL.g:4084:6: (lv_modifiers_99_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:4084:6: (lv_modifiers_99_0= ruleCommonModifier )
                      	    // InternalSARL.g:4085:7: lv_modifiers_99_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_6_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_26);
                      	    lv_modifiers_99_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_99_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop116;
                          }
                      } while (true);
  
                      otherlv_100=(Token)match(input,39,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_100, grammarAccess.getAOPMemberAccess().getClassKeyword_2_6_2());
                        				
                      }
                      // InternalSARL.g:4106:5: ( (lv_name_101_0= ruleValidID ) )
                      // InternalSARL.g:4107:6: (lv_name_101_0= ruleValidID )
                      {
                      // InternalSARL.g:4107:6: (lv_name_101_0= ruleValidID )
                      // InternalSARL.g:4108:7: lv_name_101_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_6_3_0());
                        						
                      }
                      pushFollow(FOLLOW_27);
                      lv_name_101_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_101_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:4125:5: (otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>' )?
                      int alt118=2;
                      int LA118_0 = input.LA(1);
  
                      if ( (LA118_0==40) ) {
                          alt118=1;
                      }
                      switch (alt118) {
                          case 1 :
                              // InternalSARL.g:4126:6: otherlv_102= '<' ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) ) (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )* otherlv_106= '>'
                              {
                              otherlv_102=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_102, grammarAccess.getAOPMemberAccess().getLessThanSignKeyword_2_6_4_0());
                                					
                              }
                              // InternalSARL.g:4130:6: ( (lv_typeParameters_103_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:4131:7: (lv_typeParameters_103_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:4131:7: (lv_typeParameters_103_0= ruleJvmTypeParameter )
                              // InternalSARL.g:4132:8: lv_typeParameters_103_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_6_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_103_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_103_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4149:6: (otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) ) )*
                              loop117:
                              do {
                                  int alt117=2;
                                  int LA117_0 = input.LA(1);
  
                                  if ( (LA117_0==32) ) {
                                      alt117=1;
                                  }
  
  
                                  switch (alt117) {
                              	case 1 :
                              	    // InternalSARL.g:4150:7: otherlv_104= ',' ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_104=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_104, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_6_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:4154:7: ( (lv_typeParameters_105_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:4155:8: (lv_typeParameters_105_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:4155:8: (lv_typeParameters_105_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:4156:9: lv_typeParameters_105_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_6_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_105_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_105_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop117;
                                  }
                              } while (true);
  
                              otherlv_106=(Token)match(input,41,FOLLOW_21); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_106, grammarAccess.getAOPMemberAccess().getGreaterThanSignKeyword_2_6_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:4179:5: ( ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) ) )
                      // InternalSARL.g:4180:6: ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) )
                      {
                      // InternalSARL.g:4180:6: ( ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* ) )
                      // InternalSARL.g:4181:7: ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* )
                      {
                      getUnorderedGroupHelper().enter(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5());
                      // InternalSARL.g:4184:7: ( ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )* )
                      // InternalSARL.g:4185:8: ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )*
                      {
                      // InternalSARL.g:4185:8: ( ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) ) | ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) ) )*
                      loop120:
                      do {
                          int alt120=3;
                          int LA120_0 = input.LA(1);
  
                          if ( LA120_0 == 28 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 0) ) {
                              alt120=1;
                          }
                          else if ( LA120_0 == 36 && getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 1) ) {
                              alt120=2;
                          }
  
  
                          switch (alt120) {
                      	case 1 :
                      	    // InternalSARL.g:4186:6: ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) )
                      	    {
                      	    // InternalSARL.g:4186:6: ({...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) ) )
                      	    // InternalSARL.g:4187:7: {...}? => ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 0) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 0)");
                      	    }
                      	    // InternalSARL.g:4187:112: ( ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) ) )
                      	    // InternalSARL.g:4188:8: ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 0);
                      	    // InternalSARL.g:4191:11: ({...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) ) )
                      	    // InternalSARL.g:4191:12: {...}? => (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:4191:21: (otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) ) )
                      	    // InternalSARL.g:4191:22: otherlv_108= 'extends' ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) )
                      	    {
                      	    otherlv_108=(Token)match(input,28,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_108, grammarAccess.getAOPMemberAccess().getExtendsKeyword_2_6_5_0_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:4195:11: ( (lv_extends_109_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:4196:12: (lv_extends_109_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:4196:12: (lv_extends_109_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:4197:13: lv_extends_109_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_6_5_0_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_21);
                      	    lv_extends_109_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													set(
                      	      														current,
                      	      														"extends",
                      	      														lv_extends_109_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
                      	case 2 :
                      	    // InternalSARL.g:4220:6: ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) )
                      	    {
                      	    // InternalSARL.g:4220:6: ({...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) ) )
                      	    // InternalSARL.g:4221:7: {...}? => ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) )
                      	    {
                      	    if ( ! getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 1) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "getUnorderedGroupHelper().canSelect(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 1)");
                      	    }
                      	    // InternalSARL.g:4221:112: ( ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) ) )
                      	    // InternalSARL.g:4222:8: ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) )
                      	    {
                      	    getUnorderedGroupHelper().select(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5(), 1);
                      	    // InternalSARL.g:4225:11: ({...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* ) )
                      	    // InternalSARL.g:4225:12: {...}? => (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* )
                      	    {
                      	    if ( !((true)) ) {
                      	        if (state.backtracking>0) {state.failed=true; return current;}
                      	        throw new FailedPredicateException(input, "ruleAOPMember", "true");
                      	    }
                      	    // InternalSARL.g:4225:21: (otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )* )
                      	    // InternalSARL.g:4225:22: otherlv_110= 'implements' ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) ) (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )*
                      	    {
                      	    otherlv_110=(Token)match(input,36,FOLLOW_3); if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      											newLeafNode(otherlv_110, grammarAccess.getAOPMemberAccess().getImplementsKeyword_2_6_5_1_0());
                      	      										
                      	    }
                      	    // InternalSARL.g:4229:11: ( (lv_implements_111_0= ruleJvmParameterizedTypeReference ) )
                      	    // InternalSARL.g:4230:12: (lv_implements_111_0= ruleJvmParameterizedTypeReference )
                      	    {
                      	    // InternalSARL.g:4230:12: (lv_implements_111_0= ruleJvmParameterizedTypeReference )
                      	    // InternalSARL.g:4231:13: lv_implements_111_0= ruleJvmParameterizedTypeReference
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      													newCompositeNode(grammarAccess.getAOPMemberAccess().getImplementsJvmParameterizedTypeReferenceParserRuleCall_2_6_5_1_1_0());
                      	      												
                      	    }
                      	    pushFollow(FOLLOW_22);
                      	    lv_implements_111_0=ruleJvmParameterizedTypeReference();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      													if (current==null) {
                      	      														current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      													}
                      	      													add(
                      	      														current,
                      	      														"implements",
                      	      														lv_implements_111_0,
                      	      														"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	      													afterParserOrEnumRuleCall();
                      	      												
                      	    }
  
                      	    }
  
  
                      	    }
  
                      	    // InternalSARL.g:4248:11: (otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) ) )*
                      	    loop119:
                      	    do {
                      	        int alt119=2;
                      	        int LA119_0 = input.LA(1);
  
                      	        if ( (LA119_0==32) ) {
                      	            alt119=1;
                      	        }
  
  
                      	        switch (alt119) {
                      	    	case 1 :
                      	    	    // InternalSARL.g:4249:12: otherlv_112= ',' ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) )
                      	    	    {
                      	    	    otherlv_112=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      												newLeafNode(otherlv_112, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_6_5_1_2_0());
                      	    	      											
                      	    	    }
                      	    	    // InternalSARL.g:4253:12: ( (lv_implements_113_0= ruleJvmParameterizedTypeReference ) )
                      	    	    // InternalSARL.g:4254:13: (lv_implements_113_0= ruleJvmParameterizedTypeReference )
                      	    	    {
                      	    	    // InternalSARL.g:4254:13: (lv_implements_113_0= ruleJvmParameterizedTypeReference )
                      	    	    // InternalSARL.g:4255:14: lv_implements_113_0= ruleJvmParameterizedTypeReference
                      	    	    {
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														newCompositeNode(grammarAccess.getAOPMemberAccess().getImplementsJvmParameterizedTypeReferenceParserRuleCall_2_6_5_1_2_1_0());
                      	    	      													
                      	    	    }
                      	    	    pushFollow(FOLLOW_22);
                      	    	    lv_implements_113_0=ruleJvmParameterizedTypeReference();
  
                      	    	    state._fsp--;
                      	    	    if (state.failed) return current;
                      	    	    if ( state.backtracking==0 ) {
  
                      	    	      														if (current==null) {
                      	    	      															current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	    	      														}
                      	    	      														add(
                      	    	      															current,
                      	    	      															"implements",
                      	    	      															lv_implements_113_0,
                      	    	      															"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                      	    	      														afterParserOrEnumRuleCall();
                      	    	      													
                      	    	    }
  
                      	    	    }
  
  
                      	    	    }
  
  
                      	    	    }
                      	    	    break;
  
                      	    	default :
                      	    	    break loop119;
                      	        }
                      	    } while (true);
  
  
                      	    }
  
  
                      	    }
  
                      	    getUnorderedGroupHelper().returnFromSelection(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5());
  
                      	    }
  
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop120;
                          }
                      } while (true);
  
  
                      }
  
  
                      }
  
                      getUnorderedGroupHelper().leave(grammarAccess.getAOPMemberAccess().getUnorderedGroup_2_6_5());
  
                      }
  
                      otherlv_114=(Token)match(input,29,FOLLOW_29); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_114, grammarAccess.getAOPMemberAccess().getLeftCurlyBracketKeyword_2_6_6());
                        				
                      }
                      // InternalSARL.g:4290:5: ( (lv_members_115_0= ruleMember ) )*
                      loop121:
                      do {
                          int alt121=2;
                          int LA121_0 = input.LA(1);
  
                          if ( (LA121_0==25||LA121_0==39||(LA121_0>=42 && LA121_0<=45)||LA121_0==48||(LA121_0>=65 && LA121_0<=66)||(LA121_0>=78 && LA121_0<=91)||LA121_0==105) ) {
                              alt121=1;
                          }
  
  
                          switch (alt121) {
                      	case 1 :
                      	    // InternalSARL.g:4291:6: (lv_members_115_0= ruleMember )
                      	    {
                      	    // InternalSARL.g:4291:6: (lv_members_115_0= ruleMember )
                      	    // InternalSARL.g:4292:7: lv_members_115_0= ruleMember
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getMembersMemberParserRuleCall_2_6_7_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_29);
                      	    lv_members_115_0=ruleMember();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_115_0,
                      	      								"io.sarl.lang.SARL.Member");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop121;
                          }
                      } while (true);
  
                      otherlv_116=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_116, grammarAccess.getAOPMemberAccess().getRightCurlyBracketKeyword_2_6_8());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 8 :
                      // InternalSARL.g:4315:4: ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' )
                      {
                      // InternalSARL.g:4315:4: ( () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}' )
                      // InternalSARL.g:4316:5: () ( (lv_modifiers_118_0= ruleCommonModifier ) )* otherlv_119= 'interface' ( (lv_name_120_0= ruleValidID ) ) (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )? (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )? otherlv_130= '{' ( (lv_members_131_0= ruleMember ) )* otherlv_132= '}'
                      {
                      // InternalSARL.g:4316:5: ()
                      // InternalSARL.g:4317:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlInterfaceAnnotationInfoAction_2_7_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:4323:5: ( (lv_modifiers_118_0= ruleCommonModifier ) )*
                      loop122:
                      do {
                          int alt122=2;
                          int LA122_0 = input.LA(1);
  
                          if ( (LA122_0==25||(LA122_0>=78 && LA122_0<=89)) ) {
                              alt122=1;
                          }
  
  
                          switch (alt122) {
                      	case 1 :
                      	    // InternalSARL.g:4324:6: (lv_modifiers_118_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:4324:6: (lv_modifiers_118_0= ruleCommonModifier )
                      	    // InternalSARL.g:4325:7: lv_modifiers_118_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_7_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_30);
                      	    lv_modifiers_118_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_118_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop122;
                          }
                      } while (true);
  
                      otherlv_119=(Token)match(input,42,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_119, grammarAccess.getAOPMemberAccess().getInterfaceKeyword_2_7_2());
                        				
                      }
                      // InternalSARL.g:4346:5: ( (lv_name_120_0= ruleValidID ) )
                      // InternalSARL.g:4347:6: (lv_name_120_0= ruleValidID )
                      {
                      // InternalSARL.g:4347:6: (lv_name_120_0= ruleValidID )
                      // InternalSARL.g:4348:7: lv_name_120_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_7_3_0());
                        						
                      }
                      pushFollow(FOLLOW_31);
                      lv_name_120_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_120_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      // InternalSARL.g:4365:5: (otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>' )?
                      int alt124=2;
                      int LA124_0 = input.LA(1);
  
                      if ( (LA124_0==40) ) {
                          alt124=1;
                      }
                      switch (alt124) {
                          case 1 :
                              // InternalSARL.g:4366:6: otherlv_121= '<' ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) ) (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )* otherlv_125= '>'
                              {
                              otherlv_121=(Token)match(input,40,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_121, grammarAccess.getAOPMemberAccess().getLessThanSignKeyword_2_7_4_0());
                                					
                              }
                              // InternalSARL.g:4370:6: ( (lv_typeParameters_122_0= ruleJvmTypeParameter ) )
                              // InternalSARL.g:4371:7: (lv_typeParameters_122_0= ruleJvmTypeParameter )
                              {
                              // InternalSARL.g:4371:7: (lv_typeParameters_122_0= ruleJvmTypeParameter )
                              // InternalSARL.g:4372:8: lv_typeParameters_122_0= ruleJvmTypeParameter
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_7_4_1_0());
                                							
                              }
                              pushFollow(FOLLOW_28);
                              lv_typeParameters_122_0=ruleJvmTypeParameter();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"typeParameters",
                                									lv_typeParameters_122_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4389:6: (otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) ) )*
                              loop123:
                              do {
                                  int alt123=2;
                                  int LA123_0 = input.LA(1);
  
                                  if ( (LA123_0==32) ) {
                                      alt123=1;
                                  }
  
  
                                  switch (alt123) {
                              	case 1 :
                              	    // InternalSARL.g:4390:7: otherlv_123= ',' ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) )
                              	    {
                              	    otherlv_123=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_123, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_7_4_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:4394:7: ( (lv_typeParameters_124_0= ruleJvmTypeParameter ) )
                              	    // InternalSARL.g:4395:8: (lv_typeParameters_124_0= ruleJvmTypeParameter )
                              	    {
                              	    // InternalSARL.g:4395:8: (lv_typeParameters_124_0= ruleJvmTypeParameter )
                              	    // InternalSARL.g:4396:9: lv_typeParameters_124_0= ruleJvmTypeParameter
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getTypeParametersJvmTypeParameterParserRuleCall_2_7_4_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_28);
                              	    lv_typeParameters_124_0=ruleJvmTypeParameter();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"typeParameters",
                              	      										lv_typeParameters_124_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmTypeParameter");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop123;
                                  }
                              } while (true);
  
                              otherlv_125=(Token)match(input,41,FOLLOW_13); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_125, grammarAccess.getAOPMemberAccess().getGreaterThanSignKeyword_2_7_4_3());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:4419:5: (otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )* )?
                      int alt126=2;
                      int LA126_0 = input.LA(1);
  
                      if ( (LA126_0==28) ) {
                          alt126=1;
                      }
                      switch (alt126) {
                          case 1 :
                              // InternalSARL.g:4420:6: otherlv_126= 'extends' ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) ) (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )*
                              {
                              otherlv_126=(Token)match(input,28,FOLLOW_3); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_126, grammarAccess.getAOPMemberAccess().getExtendsKeyword_2_7_5_0());
                                					
                              }
                              // InternalSARL.g:4424:6: ( (lv_extends_127_0= ruleJvmParameterizedTypeReference ) )
                              // InternalSARL.g:4425:7: (lv_extends_127_0= ruleJvmParameterizedTypeReference )
                              {
                              // InternalSARL.g:4425:7: (lv_extends_127_0= ruleJvmParameterizedTypeReference )
                              // InternalSARL.g:4426:8: lv_extends_127_0= ruleJvmParameterizedTypeReference
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_7_5_1_0());
                                							
                              }
                              pushFollow(FOLLOW_14);
                              lv_extends_127_0=ruleJvmParameterizedTypeReference();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"extends",
                                									lv_extends_127_0,
                                									"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4443:6: (otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) ) )*
                              loop125:
                              do {
                                  int alt125=2;
                                  int LA125_0 = input.LA(1);
  
                                  if ( (LA125_0==32) ) {
                                      alt125=1;
                                  }
  
  
                                  switch (alt125) {
                              	case 1 :
                              	    // InternalSARL.g:4444:7: otherlv_128= ',' ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) )
                              	    {
                              	    otherlv_128=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_128, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_7_5_2_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:4448:7: ( (lv_extends_129_0= ruleJvmParameterizedTypeReference ) )
                              	    // InternalSARL.g:4449:8: (lv_extends_129_0= ruleJvmParameterizedTypeReference )
                              	    {
                              	    // InternalSARL.g:4449:8: (lv_extends_129_0= ruleJvmParameterizedTypeReference )
                              	    // InternalSARL.g:4450:9: lv_extends_129_0= ruleJvmParameterizedTypeReference
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getExtendsJvmParameterizedTypeReferenceParserRuleCall_2_7_5_2_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_14);
                              	    lv_extends_129_0=ruleJvmParameterizedTypeReference();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"extends",
                              	      										lv_extends_129_0,
                              	      										"org.eclipse.xtext.xbase.Xtype.JvmParameterizedTypeReference");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop125;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      otherlv_130=(Token)match(input,29,FOLLOW_29); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_130, grammarAccess.getAOPMemberAccess().getLeftCurlyBracketKeyword_2_7_6());
                        				
                      }
                      // InternalSARL.g:4473:5: ( (lv_members_131_0= ruleMember ) )*
                      loop127:
                      do {
                          int alt127=2;
                          int LA127_0 = input.LA(1);
  
                          if ( (LA127_0==25||LA127_0==39||(LA127_0>=42 && LA127_0<=45)||LA127_0==48||(LA127_0>=65 && LA127_0<=66)||(LA127_0>=78 && LA127_0<=91)||LA127_0==105) ) {
                              alt127=1;
                          }
  
  
                          switch (alt127) {
                      	case 1 :
                      	    // InternalSARL.g:4474:6: (lv_members_131_0= ruleMember )
                      	    {
                      	    // InternalSARL.g:4474:6: (lv_members_131_0= ruleMember )
                      	    // InternalSARL.g:4475:7: lv_members_131_0= ruleMember
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getMembersMemberParserRuleCall_2_7_7_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_29);
                      	    lv_members_131_0=ruleMember();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_131_0,
                      	      								"io.sarl.lang.SARL.Member");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop127;
                          }
                      } while (true);
  
                      otherlv_132=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_132, grammarAccess.getAOPMemberAccess().getRightCurlyBracketKeyword_2_7_8());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 9 :
                      // InternalSARL.g:4498:4: ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' )
                      {
                      // InternalSARL.g:4498:4: ( () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}' )
                      // InternalSARL.g:4499:5: () ( (lv_modifiers_134_0= ruleCommonModifier ) )* otherlv_135= 'enum' ( (lv_name_136_0= ruleValidID ) ) otherlv_137= '{' ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )? (otherlv_141= ';' )? otherlv_142= '}'
                      {
                      // InternalSARL.g:4499:5: ()
                      // InternalSARL.g:4500:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlEnumerationAnnotationInfoAction_2_8_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:4506:5: ( (lv_modifiers_134_0= ruleCommonModifier ) )*
                      loop128:
                      do {
                          int alt128=2;
                          int LA128_0 = input.LA(1);
  
                          if ( (LA128_0==25||(LA128_0>=78 && LA128_0<=89)) ) {
                              alt128=1;
                          }
  
  
                          switch (alt128) {
                      	case 1 :
                      	    // InternalSARL.g:4507:6: (lv_modifiers_134_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:4507:6: (lv_modifiers_134_0= ruleCommonModifier )
                      	    // InternalSARL.g:4508:7: lv_modifiers_134_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_8_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_32);
                      	    lv_modifiers_134_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_134_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop128;
                          }
                      } while (true);
  
                      otherlv_135=(Token)match(input,43,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_135, grammarAccess.getAOPMemberAccess().getEnumKeyword_2_8_2());
                        				
                      }
                      // InternalSARL.g:4529:5: ( (lv_name_136_0= ruleValidID ) )
                      // InternalSARL.g:4530:6: (lv_name_136_0= ruleValidID )
                      {
                      // InternalSARL.g:4530:6: (lv_name_136_0= ruleValidID )
                      // InternalSARL.g:4531:7: lv_name_136_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_8_3_0());
                        						
                      }
                      pushFollow(FOLLOW_17);
                      lv_name_136_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_136_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      otherlv_137=(Token)match(input,29,FOLLOW_33); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_137, grammarAccess.getAOPMemberAccess().getLeftCurlyBracketKeyword_2_8_4());
                        				
                      }
                      // InternalSARL.g:4552:5: ( ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )* )?
                      int alt130=2;
                      int LA130_0 = input.LA(1);
  
                      if ( (LA130_0==RULE_ID||LA130_0==44||(LA130_0>=92 && LA130_0<=95)) ) {
                          alt130=1;
                      }
                      switch (alt130) {
                          case 1 :
                              // InternalSARL.g:4553:6: ( (lv_members_138_0= ruleXtendEnumLiteral ) ) (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )*
                              {
                              // InternalSARL.g:4553:6: ( (lv_members_138_0= ruleXtendEnumLiteral ) )
                              // InternalSARL.g:4554:7: (lv_members_138_0= ruleXtendEnumLiteral )
                              {
                              // InternalSARL.g:4554:7: (lv_members_138_0= ruleXtendEnumLiteral )
                              // InternalSARL.g:4555:8: lv_members_138_0= ruleXtendEnumLiteral
                              {
                              if ( state.backtracking==0 ) {
  
                                								newCompositeNode(grammarAccess.getAOPMemberAccess().getMembersXtendEnumLiteralParserRuleCall_2_8_5_0_0());
                                							
                              }
                              pushFollow(FOLLOW_34);
                              lv_members_138_0=ruleXtendEnumLiteral();
  
                              state._fsp--;
                              if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                								if (current==null) {
                                									current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                                								}
                                								add(
                                									current,
                                									"members",
                                									lv_members_138_0,
                                									"io.sarl.lang.SARL.XtendEnumLiteral");
                                								afterParserOrEnumRuleCall();
                                							
                              }
  
                              }
  
  
                              }
  
                              // InternalSARL.g:4572:6: (otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) ) )*
                              loop129:
                              do {
                                  int alt129=2;
                                  int LA129_0 = input.LA(1);
  
                                  if ( (LA129_0==32) ) {
                                      alt129=1;
                                  }
  
  
                                  switch (alt129) {
                              	case 1 :
                              	    // InternalSARL.g:4573:7: otherlv_139= ',' ( (lv_members_140_0= ruleXtendEnumLiteral ) )
                              	    {
                              	    otherlv_139=(Token)match(input,32,FOLLOW_3); if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      							newLeafNode(otherlv_139, grammarAccess.getAOPMemberAccess().getCommaKeyword_2_8_5_1_0());
                              	      						
                              	    }
                              	    // InternalSARL.g:4577:7: ( (lv_members_140_0= ruleXtendEnumLiteral ) )
                              	    // InternalSARL.g:4578:8: (lv_members_140_0= ruleXtendEnumLiteral )
                              	    {
                              	    // InternalSARL.g:4578:8: (lv_members_140_0= ruleXtendEnumLiteral )
                              	    // InternalSARL.g:4579:9: lv_members_140_0= ruleXtendEnumLiteral
                              	    {
                              	    if ( state.backtracking==0 ) {
  
                              	      									newCompositeNode(grammarAccess.getAOPMemberAccess().getMembersXtendEnumLiteralParserRuleCall_2_8_5_1_1_0());
                              	      								
                              	    }
                              	    pushFollow(FOLLOW_34);
                              	    lv_members_140_0=ruleXtendEnumLiteral();
  
                              	    state._fsp--;
                              	    if (state.failed) return current;
                              	    if ( state.backtracking==0 ) {
  
                              	      									if (current==null) {
                              	      										current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                              	      									}
                              	      									add(
                              	      										current,
                              	      										"members",
                              	      										lv_members_140_0,
                              	      										"io.sarl.lang.SARL.XtendEnumLiteral");
                              	      									afterParserOrEnumRuleCall();
                              	      								
                              	    }
  
                              	    }
  
  
                              	    }
  
  
                              	    }
                              	    break;
  
                              	default :
                              	    break loop129;
                                  }
                              } while (true);
  
  
                              }
                              break;
  
                      }
  
                      // InternalSARL.g:4598:5: (otherlv_141= ';' )?
                      int alt131=2;
                      int LA131_0 = input.LA(1);
  
                      if ( (LA131_0==26) ) {
                          alt131=1;
                      }
                      switch (alt131) {
                          case 1 :
                              // InternalSARL.g:4599:6: otherlv_141= ';'
                              {
                              otherlv_141=(Token)match(input,26,FOLLOW_24); if (state.failed) return current;
                              if ( state.backtracking==0 ) {
  
                                						newLeafNode(otherlv_141, grammarAccess.getAOPMemberAccess().getSemicolonKeyword_2_8_6());
                                					
                              }
  
                              }
                              break;
  
                      }
  
                      otherlv_142=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_142, grammarAccess.getAOPMemberAccess().getRightCurlyBracketKeyword_2_8_7());
                        				
                      }
  
                      }
  
  
                      }
                      break;
                  case 10 :
                      // InternalSARL.g:4610:4: ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' )
                      {
                      // InternalSARL.g:4610:4: ( () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}' )
                      // InternalSARL.g:4611:5: () ( (lv_modifiers_144_0= ruleCommonModifier ) )* otherlv_145= 'annotation' ( (lv_name_146_0= ruleValidID ) ) otherlv_147= '{' ( (lv_members_148_0= ruleAnnotationField ) )* otherlv_149= '}'
                      {
                      // InternalSARL.g:4611:5: ()
                      // InternalSARL.g:4612:6: 
                      {
                      if ( state.backtracking==0 ) {
  
                        						current = forceCreateModelElementAndSet(
                        							grammarAccess.getAOPMemberAccess().getSarlAnnotationTypeAnnotationInfoAction_2_9_0(),
                        							current);
                        					
                      }
  
                      }
  
                      // InternalSARL.g:4618:5: ( (lv_modifiers_144_0= ruleCommonModifier ) )*
                      loop132:
                      do {
                          int alt132=2;
                          int LA132_0 = input.LA(1);
  
                          if ( (LA132_0==25||(LA132_0>=78 && LA132_0<=89)) ) {
                              alt132=1;
                          }
  
  
                          switch (alt132) {
                      	case 1 :
                      	    // InternalSARL.g:4619:6: (lv_modifiers_144_0= ruleCommonModifier )
                      	    {
                      	    // InternalSARL.g:4619:6: (lv_modifiers_144_0= ruleCommonModifier )
                      	    // InternalSARL.g:4620:7: lv_modifiers_144_0= ruleCommonModifier
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getModifiersCommonModifierParserRuleCall_2_9_1_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_35);
                      	    lv_modifiers_144_0=ruleCommonModifier();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"modifiers",
                      	      								lv_modifiers_144_0,
                      	      								"org.eclipse.xtend.core.Xtend.CommonModifier");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop132;
                          }
                      } while (true);
  
                      otherlv_145=(Token)match(input,44,FOLLOW_3); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_145, grammarAccess.getAOPMemberAccess().getAnnotationKeyword_2_9_2());
                        				
                      }
                      // InternalSARL.g:4641:5: ( (lv_name_146_0= ruleValidID ) )
                      // InternalSARL.g:4642:6: (lv_name_146_0= ruleValidID )
                      {
                      // InternalSARL.g:4642:6: (lv_name_146_0= ruleValidID )
                      // InternalSARL.g:4643:7: lv_name_146_0= ruleValidID
                      {
                      if ( state.backtracking==0 ) {
  
                        							newCompositeNode(grammarAccess.getAOPMemberAccess().getNameValidIDParserRuleCall_2_9_3_0());
                        						
                      }
                      pushFollow(FOLLOW_17);
                      lv_name_146_0=ruleValidID();
  
                      state._fsp--;
                      if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        							if (current==null) {
                        								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                        							}
                        							set(
                        								current,
                        								"name",
                        								lv_name_146_0,
                        								"org.eclipse.xtend.core.Xtend.ValidID");
                        							afterParserOrEnumRuleCall();
                        						
                      }
  
                      }
  
  
                      }
  
                      otherlv_147=(Token)match(input,29,FOLLOW_36); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_147, grammarAccess.getAOPMemberAccess().getLeftCurlyBracketKeyword_2_9_4());
                        				
                      }
                      // InternalSARL.g:4664:5: ( (lv_members_148_0= ruleAnnotationField ) )*
                      loop133:
                      do {
                          int alt133=2;
                          int LA133_0 = input.LA(1);
  
                          if ( (LA133_0==25||LA133_0==39||(LA133_0>=42 && LA133_0<=44)||(LA133_0>=65 && LA133_0<=66)||(LA133_0>=78 && LA133_0<=89)||LA133_0==105) ) {
                              alt133=1;
                          }
  
  
                          switch (alt133) {
                      	case 1 :
                      	    // InternalSARL.g:4665:6: (lv_members_148_0= ruleAnnotationField )
                      	    {
                      	    // InternalSARL.g:4665:6: (lv_members_148_0= ruleAnnotationField )
                      	    // InternalSARL.g:4666:7: lv_members_148_0= ruleAnnotationField
                      	    {
                      	    if ( state.backtracking==0 ) {
  
                      	      							newCompositeNode(grammarAccess.getAOPMemberAccess().getMembersAnnotationFieldParserRuleCall_2_9_5_0());
                      	      						
                      	    }
                      	    pushFollow(FOLLOW_36);
                      	    lv_members_148_0=ruleAnnotationField();
  
                      	    state._fsp--;
                      	    if (state.failed) return current;
                      	    if ( state.backtracking==0 ) {
  
                      	      							if (current==null) {
                      	      								current = createModelElementForParent(grammarAccess.getAOPMemberRule());
                      	      							}
                      	      							add(
                      	      								current,
                      	      								"members",
                      	      								lv_members_148_0,
                      	      								"io.sarl.lang.SARL.AnnotationField");
                      	      							afterParserOrEnumRuleCall();
                      	      						
                      	    }
  
                      	    }
  
  
                      	    }
                      	    break;
  
                      	default :
                      	    break loop133;
                          }
                      } while (true);
  
                      otherlv_149=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
                      if ( state.backtracking==0 ) {
  
                        					newLeafNode(otherlv_149, grammarAccess.getAOPMemberAccess().getRightCurlyBracketKeyword_2_9_6());
                        				
                      }
  
                      }
  
  
                      }
                      break;
  
              }
  
  
              }
  
  
              }
  
              if ( state.backtracking==0 ) {
  
                	leaveRule();
  
              }
          }
  
              catch (RecognitionException re) {
                  recover(input,re);
                  appendSkippedTokens();
              }
          finally {
          }
          return current;
      }