1 18 package org.apache.beehive.netui.compiler.grammar; 19 20 import org.apache.beehive.netui.compiler.AnnotationGrammar; 21 import org.apache.beehive.netui.compiler.CompilerUtils; 22 import org.apache.beehive.netui.compiler.JpfLanguageConstants; 23 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance; 24 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationTypeElementDeclaration; 25 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue; 26 import org.apache.beehive.netui.compiler.typesystem.declaration.MemberDeclaration; 27 import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration; 28 29 public class WritableFieldType 30 extends MemberFieldType 31 implements JpfLanguageConstants 32 { 33 private String _attrName; 34 35 36 public WritableFieldType( String requiredSuperclassName, String attrName, String requiredRuntimeVersion, 37 AnnotationGrammar parentGrammar ) 38 { 39 super( requiredSuperclassName, requiredRuntimeVersion, parentGrammar ); 40 _attrName = attrName; 41 } 42 43 44 public Object onCheck( AnnotationTypeElementDeclaration valueDecl, AnnotationValue value, 45 AnnotationInstance[] parentAnnotations, MemberDeclaration classMember, 46 int annotationArrayIndex ) 47 { 48 Boolean readonlyValue = null; 53 54 if ( classMember instanceof MethodDeclaration ) 55 { 56 readonlyValue = CompilerUtils.getBooleanValue( classMember, ACTION_TAG_NAME, READONLY_ATTR, true ); 57 } 58 59 if ( readonlyValue == null ) 60 { 61 BaseFlowControllerGrammar fcGrammar = ( BaseFlowControllerGrammar ) getParentGrammar(); 62 readonlyValue = Boolean.valueOf( fcGrammar.getFlowControllerInfo().getMergedControllerAnnotation().isReadOnly() ); 63 } 64 65 if ( readonlyValue != null && readonlyValue.booleanValue() ) 66 { 67 addError( value, "error.readonly-writable-field-value", _attrName ); 68 } 69 70 return super.onCheck( valueDecl, value, parentAnnotations, classMember, annotationArrayIndex ); 71 } 72 } 73 | Popular Tags |