*
* @return
* @throws RecognitionException
*/
public EnumDeclarationDescr enumDeclaration( DeclareDescrBuilder ddb ) throws RecognitionException {
EnumDeclarationDescrBuilder declare = null;
try {
declare = helper.start( ddb,
EnumDeclarationDescrBuilder.class,
null );
// type may be qualified when adding metadata
String type = qualifiedIdentifier();
if ( state.failed ) return null;
if ( state.backtracking == 0 ) declare.name( type );
while ( input.LA( 1 ) == DRL6Lexer.AT ) {
// annotation*
annotation( declare );
if ( state.failed ) return null;
}
while ( input.LA( 1 ) == DRL6Lexer.ID ) {
int next = input.LA( 2 );
if ( next == DRL6Lexer.LEFT_PAREN || next == DRL6Lexer.COMMA || next == DRL6Lexer.SEMICOLON ) {
enumerative( declare );
if ( state.failed ) return null;
}
if ( input.LA( 1 ) == DRL6Lexer.COMMA ) {
match( input,
DRL6Lexer.COMMA,
null,
null,
DroolsEditorType.SYMBOL );
} else {
match( input,
DRL6Lexer.SEMICOLON,
null,
null,
DroolsEditorType.SYMBOL );
break;
}
}
//boolean qualified = type.indexOf( '.' ) >= 0;
while ( //! qualified &&
input.LA( 1 ) == DRL6Lexer.ID && ! helper.validateIdentifierKey( DroolsSoftKeywords.END ) ) {
// field*
field( declare );
if ( state.failed ) return null;
}
match( input,
DRL6Lexer.ID,
DroolsSoftKeywords.END,
null,
DroolsEditorType.KEYWORD );
if ( state.failed ) return null;
} catch ( RecognitionException re ) {
reportError( re );
} finally {
helper.end( TypeDeclarationDescrBuilder.class,
declare );
}
return (declare != null) ? declare.getDescr() : null;
}