protected void method(
TypeMemberCollection container
)
{
IToken t = null;
IToken spliceBegin = null;
IToken c = null;
IToken d = null;
Method m = null;
TypeReference rt = null;
TypeReference it = null;
ExplicitMemberInfo emi = null;
ParameterDeclarationCollection parameters = null;
GenericParameterDeclarationCollection genericParameters = null;
Block body = null;
StatementCollection statements = null;
Expression nameSplice = null;
TypeMember typeMember = null;
IToken id = null;
try { // for error handling
t = LT(1);
match(DEF);
{
switch ( LA(1) )
{
case EVENT:
case GET:
case INTERNAL:
case PUBLIC:
case PROTECTED:
case REF:
case SET:
case YIELD:
case ID:
case SPLICE_BEGIN:
{
{
{
{
if ((LA(1)==ID) && (LA(2)==DOT))
{
emi=explicit_member_info();
}
else if ((tokenSet_33_.member(LA(1))) && (tokenSet_34_.member(LA(2)))) {
}
else
{
throw new NoViableAltException(LT(1), getFilename());
}
}
{
switch ( LA(1) )
{
case EVENT:
case GET:
case INTERNAL:
case PUBLIC:
case PROTECTED:
case REF:
case SET:
case YIELD:
case ID:
{
id=member();
break;
}
case SPLICE_BEGIN:
{
spliceBegin = LT(1);
match(SPLICE_BEGIN);
nameSplice=atom();
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
}
if (0==inputState.guessing)
{
IToken token = id ?? spliceBegin;
if (emi != null) {
m = new Method(emi.LexicalInfo);
} else {
m = new Method(ToLexicalInfo(token));
}
m.Name = token.getText();
m.ExplicitInfo = emi;
if (nameSplice != null) {
typeMember = new SpliceTypeMember(m, nameSplice);
} else {
typeMember = m;
}
}
}
break;
}
case CONSTRUCTOR:
{
c = LT(1);
match(CONSTRUCTOR);
if (0==inputState.guessing)
{
typeMember = m = new Constructor(ToLexicalInfo(c));
}
break;
}
case DESTRUCTOR:
{
d = LT(1);
match(DESTRUCTOR);
if (0==inputState.guessing)
{
typeMember = m = new Destructor(ToLexicalInfo(d));
}
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
if (0==inputState.guessing)
{
m.Modifiers = _modifiers;
AddAttributes(m.Attributes);
parameters = m.Parameters;
genericParameters = m.GenericParameters;
body = m.Body;
statements = body.Statements;
}
{
switch ( LA(1) )
{
case LBRACK:
{
match(LBRACK);
{
switch ( LA(1) )
{
case OF:
{
match(OF);
break;
}
case ID:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
generic_parameter_declaration_list(genericParameters);
match(RBRACK);
break;
}
case LPAREN:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
match(LPAREN);
parameter_declaration_list(parameters);
match(RPAREN);
attributes();
if (0==inputState.guessing)
{
AddAttributes(m.ReturnTypeAttributes);
}
{
switch ( LA(1) )
{
case AS:
{
match(AS);
rt=type_reference();
if (0==inputState.guessing)
{
m.ReturnType = rt;
}
break;
}
case COLON:
{
break;
}
default:
{
throw new NoViableAltException(LT(1), getFilename());
}
}
}
begin_block_with_doc(m, body);
block(statements);
end(body);
if (0==inputState.guessing)
{
container.Add(typeMember);
m.EndSourceLocation = body.EndSourceLocation;
}
}
catch (RecognitionException ex)
{
if (0 == inputState.guessing)
{
reportError(ex, "method");
recover(ex,tokenSet_22_);
}
else
{
throw ex;
}
}
}