public final void normalClassDeclaration() throws RecognitionException {
		int normalClassDeclaration_StartIndex = input.index();

		try {
			if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return; }

			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:299:5: ( 'class' Identifier ( typeParameters )? ( 'extends' type )? ( 'implements' typeList )? classBody )
			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:299:7: 'class' Identifier ( typeParameters )? ( 'extends' type )? ( 'implements' typeList )? classBody
			{
			match(input,72,FOLLOW_72_in_normalClassDeclaration271); if (state.failed) return;
			match(input,Identifier,FOLLOW_Identifier_in_normalClassDeclaration273); if (state.failed) return;
			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:299:26: ( typeParameters )?
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==53) ) {
				alt12=1;
			}
			switch (alt12) {
				case 1 :
					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:299:27: typeParameters
					{
					pushFollow(FOLLOW_typeParameters_in_normalClassDeclaration276);
					typeParameters();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:300:9: ( 'extends' type )?
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==81) ) {
				alt13=1;
			}
			switch (alt13) {
				case 1 :
					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:300:10: 'extends' type
					{
					match(input,81,FOLLOW_81_in_normalClassDeclaration289); if (state.failed) return;
					pushFollow(FOLLOW_type_in_normalClassDeclaration291);
					type();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:301:9: ( 'implements' typeList )?
			int alt14=2;
			int LA14_0 = input.LA(1);
			if ( (LA14_0==88) ) {
				alt14=1;
			}
			switch (alt14) {
				case 1 :
					// src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:301:10: 'implements' typeList
					{
					match(input,88,FOLLOW_88_in_normalClassDeclaration304); if (state.failed) return;
					pushFollow(FOLLOW_typeList_in_normalClassDeclaration306);
					typeList();
					state._fsp--;
					if (state.failed) return;
					}
					break;

			}

			pushFollow(FOLLOW_classBody_in_normalClassDeclaration318);
			classBody();
			state._fsp--;
			if (state.failed) return;
			}

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
			if ( state.backtracking>0 ) { memoize(input, 7, normalClassDeclaration_StartIndex); }

		}
	}
public final void normalClassDeclaration ( ) throws RecognitionException { int normalClassDeclaration_StartIndex = input . index ( ) ; try { if ( state . backtracking > 0 && alreadyParsedRule ( input , 7 ) ) { return ; } { match ( input , 72 , FOLLOW_72_in_normalClassDeclaration271 ) ; if ( state . failed ) return ; match ( input , Identifier , FOLLOW_Identifier_in_normalClassDeclaration273 ) ; if ( state . failed ) return ; int alt12 = 2 ; int LA12_0 = input . LA ( 1 ) ; if ( ( LA12_0 == 53 ) ) { alt12 = 1 ; } switch ( alt12 ) { case 1 : { pushFollow ( FOLLOW_typeParameters_in_normalClassDeclaration276 ) ; typeParameters ( ) ; state . _fsp -- ; if ( state . failed ) return ; } break ; } int alt13 = 2 ; int LA13_0 = input . LA ( 1 ) ; if ( ( LA13_0 == 81 ) ) { alt13 = 1 ; } switch ( alt13 ) { case 1 : { match ( input , 81 , FOLLOW_81_in_normalClassDeclaration289 ) ; if ( state . failed ) return ; pushFollow ( FOLLOW_type_in_normalClassDeclaration291 ) ; type ( ) ; state . _fsp -- ; if ( state . failed ) return ; } break ; } int alt14 = 2 ; int LA14_0 = input . LA ( 1 ) ; if ( ( LA14_0 == 88 ) ) { alt14 = 1 ; } switch ( alt14 ) { case 1 : { match ( input , 88 , FOLLOW_88_in_normalClassDeclaration304 ) ; if ( state . failed ) return ; pushFollow ( FOLLOW_typeList_in_normalClassDeclaration306 ) ; typeList ( ) ; state . _fsp -- ; if ( state . failed ) return ; } break ; } pushFollow ( FOLLOW_classBody_in_normalClassDeclaration318 ) ; classBody ( ) ; state . _fsp -- ; if ( state . failed ) return ; } } catch ( RecognitionException re ) { reportError ( re ) ; recover ( input , re ) ; } finally { if ( state . backtracking > 0 ) { memoize ( input , 7 , normalClassDeclaration_StartIndex ) ; } } }
src/main/resources/org/drools/compiler/semantics/java/parser/Java.g:298:1: normalClassDeclaration : 'class' Identifier ( typeParameters )? ( 'extends' type )? ( 'implements' typeList )? classBody ;