public TypeMember class_declaration(TypeDefinition parent)
{
TypeMember member = null;
IToken token = null;
IToken token2 = null;
IToken token3 = null;
try
{
TypeReference reference;
ClassDefinition definition2;
TypeReferenceCollection references;
switch (this.LA(1))
{
case 0x23:
token = this.LT(1);
this.match(0x23);
break;
case 8:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
this.match(8);
token2 = this.LT(1);
this.match(0x3b);
switch (this.LA(1))
{
case 14:
this.match(14);
reference = this.type_reference();
break;
case 0x17:
case 0x3d:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
if (base.inputState.guessing == 0)
{
ClassDefinition definition;
ClassDefinition definition1 = definition = new ClassDefinition(ToLexicalInfo(token2));
definition.set_Name(token2.getText());
member = definition2 = definition;
references = definition2.get_BaseTypes();
if (reference != null)
{
references.Add(reference);
}
if (token != null)
{
definition2.set_Modifiers(definition2.get_Modifiers() | 0x400);
}
this.FlushAttributes(definition2);
parent.get_Members().Add(definition2);
}
switch (this.LA(1))
{
case 0x17:
this.match(0x17);
this.type_reference_list(references);
break;
case 0x3d:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
if (base.inputState.guessing == 0)
{
foreach (TypeReference reference2 in references)
{
if (reference2 == reference)
{
BaseTypeAnnotations.AnnotateExtends(reference2);
}
else
{
BaseTypeAnnotations.AnnotateImplements(reference2);
}
}
}
this.match(0x3d);
while (true)
{
TypeMemberModifiers modifiers;
TypeMember member2;
if (!tokenSet_29_.member(this.LA(1)))
{
break;
}
if (base.inputState.guessing == 0)
{
modifiers = 0;
}
switch (this.LA(1))
{
case 0x63:
this.attributes();
break;
case 8:
case 13:
case 0x10:
case 0x13:
case 0x19:
case 0x1b:
case 0x1f:
case 0x20:
case 0x21:
case 0x22:
case 0x23:
case 0x24:
case 0x26:
case 0x2d:
case 0x2e:
break;
default:
throw new NoViableAltException(this.LT(1), this.getFilename());
}
if (tokenSet_30_.member(this.LA(1)) && tokenSet_31_.member(this.LA(2)))
{
modifiers = this.member_modifiers();
}
else if (!tokenSet_26_.member(this.LA(1)) || !tokenSet_32_.member(this.LA(2)))
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
int num = this.LA(1);
switch (num)
{
case 0x13:
member2 = this.function_member(definition2);
break;
case 0x2d:
member2 = this.field_member(definition2);
break;
case 13:
member2 = this.enum_declaration(definition2);
break;
case 8:
case 0x23:
member2 = this.class_declaration(definition2);
break;
default:
if (num != 0x19)
{
throw new NoViableAltException(this.LT(1), this.getFilename());
}
member2 = this.interface_declaration(definition2);
break;
}
if ((base.inputState.guessing == 0) && (member2 != null))
{
member2.set_Modifiers(member2.get_Modifiers() | modifiers);
}
}
token3 = this.LT(1);
this.match(0x3e);
if (base.inputState.guessing == 0)
{
SetEndSourceLocation(definition2, token3);
}
while ((this.LA(1) == 0x4d) && tokenSet_33_.member(this.LA(2)))
{
this.match(0x4d);
}
return member;
}
catch (RecognitionException exception)
{
if (base.inputState.guessing != 0)
{
throw;
}
this.reportError(exception);
this.recover(exception, tokenSet_33_);
return member;
}
return member;
}