KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > beehive > netui > compiler > grammar > SharedFlowRefGrammar


1 /*
2  * Copyright 2004 The Apache Software Foundation.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  * $Header:$
17  */

18 package org.apache.beehive.netui.compiler.grammar;
19
20 import org.apache.beehive.netui.compiler.AnnotationGrammar;
21 import org.apache.beehive.netui.compiler.Diagnostics;
22 import org.apache.beehive.netui.compiler.RuntimeVersionChecker;
23 import org.apache.beehive.netui.compiler.CompilerUtils;
24 import org.apache.beehive.netui.compiler.FatalCompileTimeException;
25 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
26 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
27 import org.apache.beehive.netui.compiler.typesystem.declaration.MemberDeclaration;
28 import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
29
30 public class SharedFlowRefGrammar
31         extends AnnotationGrammar
32 {
33     private static final String JavaDoc[][] REQUIRED_ATTRS = { { NAME_ATTR }, { TYPE_ATTR } };
34     
35     public SharedFlowRefGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc )
36     {
37         super( env, diags, null, rvc );
38         
39         // NAME_ATTR does not need a custom type
40
addMemberType( TYPE_ATTR, new TypeNameType( SHARED_FLOW_BASE_CLASS, false, null, this ) );
41     }
42
43     protected boolean onBeginCheck( AnnotationInstance annotation, AnnotationInstance[] parentAnnotations,
44                                     MemberDeclaration classMember )
45             throws FatalCompileTimeException
46     {
47         assert classMember instanceof TypeDeclaration : classMember.getClass().getName(); // enforced in Jpf.java
48

49         if ( ! CompilerUtils.isAssignableFrom( JPF_BASE_CLASS, ( TypeDeclaration ) classMember, getEnv() ) )
50         {
51             addError( annotation, "error.annotation-invalid-base-class", SHARED_FLOW_REF_TAG_NAME, JPF_BASE_CLASS );
52             return false;
53         }
54         
55         return super.onBeginCheck( annotation, parentAnnotations, classMember );
56     }
57     
58     public String JavaDoc[][] getRequiredAttrs()
59     {
60         return REQUIRED_ATTRS;
61     }
62 }
63
Popular Tags