throws FatalCompileTimeException
{
//
// First check the form bean type.
//
TypeInstance argType = getFormBeanType( annotation, classMember );
TypeDeclaration argTypeDecl = null;
if ( ! ( argType instanceof DeclaredType ) )
{
if ( argType != null )
{
getDiagnostics().addError( annotation, "error.action-invalid-form-bean-type", argType.toString() );
argType = null;
}
}
else
{
argTypeDecl = CompilerUtils.getDeclaration( ( DeclaredType ) argType );
boolean isClass = argTypeDecl instanceof ClassDeclaration;
if ( isClass && ! CompilerUtils.hasDefaultConstructor( argTypeDecl ) )
{
getDiagnostics().addError( annotation, "error.action-form-bean-no-default-constructor",
argTypeDecl.getQualifiedName() );
}
if ( ! argTypeDecl.hasModifier( Modifier.PUBLIC ) )
{
getDiagnostics().addError( annotation, "error.action-form-bean-not-public",
argTypeDecl.getQualifiedName() );
}
if ( isClass && argTypeDecl.getDeclaringType() != null && ! argTypeDecl.hasModifier( Modifier.STATIC ) )
{
getDiagnostics().addError( annotation, "error.action-form-bean-not-static",
argTypeDecl.getQualifiedName() );
}
//
// Give a warning if there is no validationErrorForward annotation and doValidation isn't set to false.
//
if ( CompilerUtils.getAnnotationValue( annotation, VALIDATION_ERROR_FORWARD_ATTR, true ) == null
&& hasValidationAnnotations( argTypeDecl ) )
{
Boolean doValidation = CompilerUtils.getBoolean( annotation, DO_VALIDATION_ATTR, true );
if ( doValidation == null || doValidation.booleanValue() )
{
getDiagnostics().addWarning(
annotation, "warning.validatable-formbean-no-forward",
ANNOTATION_INTERFACE_PREFIX + annotation.getAnnotationType().getDeclaration().getSimpleName(),
VALIDATION_ERROR_FORWARD_ATTR, argTypeDecl.getQualifiedName() );
}
}
}
//
// Add this action to the FlowControllerInfo.
//
getFlowControllerInfo().addAction( getActionName( annotation, classMember ),
argTypeDecl != null ? argTypeDecl.getQualifiedName() : null );
//
// Check to make sure the 'useFormBean' attribute (reference to a member variable) matches the form declared as
// an argument to the action method.
//
TypeInstance useFormBeanType = getUseFormBeanType( annotation, classMember );
if ( useFormBeanType != null && useFormBeanType instanceof DeclaredType )
{
if ( argType == null )
{