Author: rich Date: Wed Jan 19 22:02:16 2005 New Revision: 125721 URL: http://svn.apache.org/viewcvs?view=rev&rev=125721 Log: - Added warnings when: - there is a @Jpf.ValidateRequired annotation on a form bean getter which returns a primitive type (which will never be null, and thus will never fail validation - there is a @Jpf.ValidateType annotation on a form bean getter which returns the same type (which can never fail validation).
- Fixed an NPE that occurred in AutoRegisterActionServlet when a parse error occurred during auto-registration of a Struts module. DRT: netui (WinXP) BB: self (linux) Added: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRequiredGrammar.java (contents, props changed) incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationRulesContainerGrammar.java (contents, props changed) Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties&r1=125720&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/diagnostics.properties Wed Jan 19 22:02:16 2005 @@ -173,3 +173,10 @@ File "{0}" (reference inherited from a {1} annotation on {2}) could not be found in the web application. error.validate-with-no-validation-error-forward = The {0} attribute requires a value for {1} when set to true. + +warning.validate-required-on-primitive-type = \ +The {0} annotation has no effect on a primitive type property, since a primitive type can never have a null value. + +warning.validate-type-on-same-type = \ +This {0}(type={1}.class) annotation has no effect, since the property type is {1}. + Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java&r1=125720&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/BaseValidationRuleGrammar.java Wed Jan 19 22:02:16 2005 @@ -24,6 +24,9 @@ import com.sun.mirror.apt.AnnotationProcessorEnvironment; import com.sun.mirror.declaration.AnnotationMirror; import com.sun.mirror.declaration.MemberDeclaration; +import com.sun.mirror.declaration.MethodDeclaration; +import com.sun.mirror.type.TypeMirror; +import com.sun.mirror.type.PrimitiveType; import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VERSION_9_0_STRING; import static org.apache.beehive.netui.compiler.JpfLanguageConstants.MESSAGE_KEY_ATTR; Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java&r1=125720&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/LocaleRulesGrammar.java Wed Jan 19 22:02:16 2005 @@ -47,7 +47,7 @@ public class LocaleRulesGrammar - extends AnnotationGrammar + extends ValidationRulesContainerGrammar { private static final String[][] REQUIRED_ATTRS = { @@ -63,20 +63,7 @@ public LocaleRulesGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc ) { - super( env, diags, VERSION_9_0_STRING, rvc ); - - // The only member that needs its own type is validateRange - addMemberGrammar( VALIDATE_REQUIRED_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_RANGE_ATTR, new ValidateRangeGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MIN_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MAX_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_CREDIT_CARD_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_EMAIL_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MASK_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_DATE_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_TYPE_ATTR, new ValidateTypeGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_CUSTOM_ATTR, new ValidateCustomGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_VALID_WHEN_ATTR, new ValidateValidWhenGrammar( env, diags, rvc ) ); + super( env, diags, rvc ); addMemberType( LANGUAGE_ATTR, new AnnotationMemberType( null, this ) ); addMemberType( COUNTRY_ATTR, new AnnotationMemberType( null, this ) ); Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java&r1=125720&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidatablePropertyGrammar.java Wed Jan 19 22:02:16 2005 @@ -30,7 +30,7 @@ public class ValidatablePropertyGrammar - extends AnnotationGrammar + extends ValidationRulesContainerGrammar { private static String[][] REQUIRED_ATTRS = { { PROPERTY_NAME_ATTR } }; private static String[][] MUTUALLY_EXCLUSIVE_ATTRS = { { DISPLAY_NAME_ATTR, DISPLAY_NAME_KEY_ATTR } }; @@ -38,24 +38,12 @@ public ValidatablePropertyGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc ) { - super( env, diags, VERSION_9_0_STRING, rvc ); + super( env, diags, rvc ); addMemberType( PROPERTY_NAME_ATTR, new AnnotationMemberType( null, this ) ); addMemberType( DISPLAY_NAME_ATTR, new AnnotationMemberType( null, this ) ); addMemberType( DISPLAY_NAME_KEY_ATTR, new AnnotationMemberType( null, this ) ); addMemberArrayGrammar( LOCALE_RULES_ATTR, new LocaleRulesGrammar( env, diags, rvc ) ); - - addMemberGrammar( VALIDATE_REQUIRED_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_RANGE_ATTR, new ValidateRangeGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MIN_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MAX_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_CREDIT_CARD_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_EMAIL_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_MASK_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_DATE_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_TYPE_ATTR, new ValidateTypeGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_CUSTOM_ATTR, new ValidateCustomGrammar( env, diags, rvc ) ); - addMemberGrammar( VALIDATE_VALID_WHEN_ATTR, new ValidateValidWhenGrammar( env, diags, rvc ) ); } /** Added: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRequiredGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRequiredGrammar.java?view=auto&rev=125721 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateRequiredGrammar.java Wed Jan 19 22:02:16 2005 @@ -0,0 +1,60 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Header:$ + */ +package org.apache.beehive.netui.compiler.grammar; + +import com.sun.mirror.apt.AnnotationProcessorEnvironment; +import com.sun.mirror.declaration.AnnotationMirror; +import com.sun.mirror.declaration.MemberDeclaration; +import com.sun.mirror.declaration.MethodDeclaration; +import com.sun.mirror.type.TypeMirror; +import com.sun.mirror.type.PrimitiveType; +import org.apache.beehive.netui.compiler.Diagnostics; +import org.apache.beehive.netui.compiler.RuntimeVersionChecker; + +import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_REQUIRED_TAG_NAME; +import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ANNOTATION_INTERFACE_PREFIX; + +public class ValidateRequiredGrammar + extends BaseValidationRuleGrammar +{ + public ValidateRequiredGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc ) + { + super( env, diags, rvc ); + } + + protected boolean onBeginCheck( AnnotationMirror annotation, AnnotationMirror[] parentAnnotations, + MemberDeclaration classMember ) + { + // + // Add a warning when this annotation is on a getter method which returns a primitive type. + // In that case, it will never be null. + // + if ( classMember instanceof MethodDeclaration ) + { + TypeMirror returnType = ( ( MethodDeclaration ) classMember ).getReturnType(); + + if ( returnType instanceof PrimitiveType ) + { + addWarning( annotation, "warning.validate-required-on-primitive-type", + ANNOTATION_INTERFACE_PREFIX + VALIDATE_REQUIRED_TAG_NAME ); + } + } + + return super.onBeginCheck( annotation, parentAnnotations, classMember ); + } +} Modified: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java&r1=125720&p2=incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java (original) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidateTypeGrammar.java Wed Jan 19 22:02:16 2005 @@ -17,15 +17,20 @@ */ package org.apache.beehive.netui.compiler.grammar; +import static org.apache.beehive.netui.compiler.JpfLanguageConstants.ANNOTATION_INTERFACE_PREFIX; +import static org.apache.beehive.netui.compiler.JpfLanguageConstants.VALIDATE_REQUIRED_TAG_NAME; import com.sun.mirror.apt.AnnotationProcessorEnvironment; import com.sun.mirror.declaration.AnnotationMirror; import com.sun.mirror.declaration.AnnotationTypeElementDeclaration; import com.sun.mirror.declaration.AnnotationValue; import com.sun.mirror.declaration.MemberDeclaration; +import com.sun.mirror.declaration.MethodDeclaration; import com.sun.mirror.type.PrimitiveType; +import com.sun.mirror.type.TypeMirror; import org.apache.beehive.netui.compiler.AnnotationMemberType; import org.apache.beehive.netui.compiler.Diagnostics; import org.apache.beehive.netui.compiler.RuntimeVersionChecker; +import org.apache.beehive.netui.compiler.CompilerUtils; import static org.apache.beehive.netui.compiler.JpfLanguageConstants.TYPE_ATTR; @@ -40,7 +45,7 @@ addMemberType( TYPE_ATTR, new PrimitiveTypeType() ); } - + private class PrimitiveTypeType extends AnnotationMemberType { @@ -54,13 +59,39 @@ { Object val = value.getValue(); + // + // Make sure the type is in the list of valid types. + // if ( ! ( val instanceof PrimitiveType ) ) { addError( value, "error.must-be-primitive-type" ); } - else if ( ( ( PrimitiveType ) val ).getKind().equals( PrimitiveType.Kind.BOOLEAN ) ) + else { - addError( value, "error.invalid-type" ); + PrimitiveType.Kind kind = ( ( PrimitiveType ) val ).getKind(); + + if ( kind.equals( PrimitiveType.Kind.BOOLEAN ) ) + { + addError( value, "error.invalid-type" ); + } + else if ( classMember instanceof MethodDeclaration ) + { + // + // Add a warning if this annotation is on a property getter of the same type, in which case the + // validation rule will never fail. + // + TypeMirror returnType = ( ( MethodDeclaration ) classMember ).getReturnType(); + + if ( returnType instanceof PrimitiveType ) + { + if ( ( ( PrimitiveType ) returnType ).getKind().equals( kind ) ) + { + addWarning( value, "warning.validate-type-on-same-type", + ANNOTATION_INTERFACE_PREFIX + VALIDATE_TYPE_TAG_NAME, + kind.toString().toLowerCase() ); + } + } + } } return null; Added: incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationRulesContainerGrammar.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationRulesContainerGrammar.java?view=auto&rev=125721 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/netui/src/compiler/org/apache/beehive/netui/compiler/grammar/ValidationRulesContainerGrammar.java Wed Jan 19 22:02:16 2005 @@ -0,0 +1,48 @@ +/* + * Copyright 2004 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Header:$ + */ +package org.apache.beehive.netui.compiler.grammar; + +import org.apache.beehive.netui.compiler.AnnotationGrammar; +import org.apache.beehive.netui.compiler.Diagnostics; +import org.apache.beehive.netui.compiler.RuntimeVersionChecker; +import org.apache.beehive.netui.compiler.AnnotationMemberType; +import com.sun.mirror.apt.AnnotationProcessorEnvironment; + +import static org.apache.beehive.netui.compiler.JpfLanguageConstants.*; + +public abstract class ValidationRulesContainerGrammar + extends AnnotationGrammar +{ + protected ValidationRulesContainerGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, + RuntimeVersionChecker rvc ) + { + super( env, diags, VERSION_9_0_STRING, rvc ); + + addMemberGrammar( VALIDATE_REQUIRED_ATTR, new ValidateRequiredGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_RANGE_ATTR, new ValidateRangeGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_MIN_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_MAX_LENGTH_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_CREDIT_CARD_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_EMAIL_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_MASK_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_DATE_ATTR, new BaseValidationRuleGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_TYPE_ATTR, new ValidateTypeGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_CUSTOM_ATTR, new ValidateCustomGrammar( env, diags, rvc ) ); + addMemberGrammar( VALIDATE_VALID_WHEN_ATTR, new ValidateValidWhenGrammar( env, diags, rvc ) ); + } +} Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java?view=diff&rev=125721&p1=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java&r1=125720&p2=incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java&r2=125721 ============================================================================== --- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java (original) +++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java Wed Jan 19 22:02:16 2005 @@ -602,6 +602,10 @@ // RequestUtils.selectModule( modulePath, request, servletContext ); ModuleConfig appConfig = getModuleConfig( request ); + assert appConfig == registeredApp; + // TODO: after the above assert has existed for a while, remove the appConfig variable entirely. + // And take out the following null check. our getModuleConfig (which calls ensureModuleConfig) + // will put the right module into the ServletContext. // // Even if we've got a registered module, it may not be active with Struts in the ServletContext. @@ -774,6 +778,7 @@ else { _registeredModules.put( modulePath, ac ); + getServletContext().setAttribute( Globals.MODULE_KEY + modulePath, ac ); } }
