[seam-commits] Seam SVN: r11705 - in modules/trunk/remoting: src/main/java/org/jboss/seam/remoting and 4 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Mon Nov 30 19:35:25 EST 2009


Author: shane.bryzak at jboss.com
Date: 2009-11-30 19:35:25 -0500 (Mon, 30 Nov 2009)
New Revision: 11705

Added:
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationLiteralHandler.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationsParser.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/ReflectiveAnnotationLiteral.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/jtb.out.jj
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Annotation.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/AnnotationsUnit.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/BooleanLiteral.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Literal.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MarkerAnnotation.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValue.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValueArrayInitializer.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePair.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePairs.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Name.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Node.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeChoice.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeList.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListInterface.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListOptional.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeOptional.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeSequence.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeToken.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NormalAnnotation.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NullLiteral.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/PrimitiveType.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/SingleMemberAnnotation.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/DepthFirstVisitor.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJDepthFirst.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguDepthFirst.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguVisitor.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVisitor.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidDepthFirst.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidVisitor.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/Visitor.java
Modified:
   modules/trunk/remoting/examples/helloworld/src/main/webapp/helloworld.xhtml
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/Call.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParser.java
   modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParserTokenManager.java
   modules/trunk/remoting/src/main/javacc/AnnotationParser.jj
Log:
annotation parsing


Modified: modules/trunk/remoting/examples/helloworld/src/main/webapp/helloworld.xhtml
===================================================================
--- modules/trunk/remoting/examples/helloworld/src/main/webapp/helloworld.xhtml	2009-11-30 14:23:32 UTC (rev 11704)
+++ modules/trunk/remoting/examples/helloworld/src/main/webapp/helloworld.xhtml	2009-12-01 00:35:25 UTC (rev 11705)
@@ -25,7 +25,7 @@
       var name = prompt("What is your name?");
       if (name == null) return;
       var callback = function(result) { alert(result); };
-      Seam.Component.create("org.jboss.seam.remoting.examples.helloworld.HelloAction", "@org.jboss.seam.remoting.examples.helloworld.HelloQualifier(foo = \"abc\")").sayHello(name, callback);
+      Seam.Component.create("org.jboss.seam.remoting.examples.helloworld.HelloAction", "@org.jboss.seam.remoting.examples.helloworld.HelloQualifier(foo=\"abc\")").sayHello(name, callback);
     }
   </script>  
 

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationLiteralHandler.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationLiteralHandler.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationLiteralHandler.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,31 @@
+package org.jboss.seam.remoting;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.util.Map;
+
+/**
+ * 
+ * @author Shane Bryzak
+ */
+public class AnnotationLiteralHandler implements InvocationHandler
+{
+   private Class<? extends Annotation> annotationClass;
+   private Map<String,Object> memberValues;
+   
+   public AnnotationLiteralHandler(Class<? extends Annotation> annotationClass,
+         Map<String,Object> memberValues)
+   {
+      this.annotationClass = annotationClass;
+      this.memberValues = memberValues;
+   }   
+   
+   public Object invoke(Object proxy, Method method, Object[] args)
+         throws Throwable
+   {
+      // TODO Auto-generated method stub
+      return null;
+   }
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationsParser.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationsParser.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/AnnotationsParser.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,137 @@
+package org.jboss.seam.remoting;
+
+import java.io.StringReader;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.seam.remoting.annotationparser.AnnotationParser;
+import org.jboss.seam.remoting.annotationparser.ParseException;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.MarkerAnnotation;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.Name;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.Node;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.NodeListOptional;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.NodeSequence;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.NodeToken;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.NormalAnnotation;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.SingleMemberAnnotation;
+import org.jboss.seam.remoting.annotationparser.visitor.DepthFirstVisitor;
+
+/**
+ * Parses a comma-separated list of annotation expressions and produces an
+ * array of Annotation instances.
+ *  
+ * @author Shane Bryzak
+ */
+public class AnnotationsParser extends DepthFirstVisitor
+{
+   public enum AnnotationType { MARKER, SINGLE_MEMBER, NORMAL }
+   
+   protected class AnnotationMetadata
+   {
+      private AnnotationType type;
+      private String name;
+      
+      public AnnotationMetadata(AnnotationType type, String name)
+      {
+         this.type = type;
+         this.name = name;
+      }
+      
+      public AnnotationType getType()
+      {
+         return type;
+      }
+      
+      public String getName()
+      {
+         return name;
+      }
+   }
+   
+   private List<AnnotationMetadata> meta = new ArrayList<AnnotationMetadata>();
+   
+   private AnnotationMetadata currentAnnotation;
+   
+   private Annotation[] annotations;
+   
+   public AnnotationsParser(Class<?> beanType, String declaration)
+   {
+      // TODO cache the results somewhere
+      
+      AnnotationParser parser = new AnnotationParser(new StringReader(declaration));
+      
+      try
+      {
+         Node root = parser.AnnotationsUnit();
+         root.accept(this);
+      }
+      catch (ParseException e)
+      {
+         throw new IllegalArgumentException(
+               "Error while parsing annotation declaration: " + declaration);
+      }
+   }
+   
+   public Annotation[] getAnnotations()
+   {
+      return annotations;
+   }
+   
+   @Override
+   public void visit(org.jboss.seam.remoting.annotationparser.syntaxtree.Annotation node)
+   {     
+      Node choice = node.f0.choice;
+      
+      AnnotationType type = null;
+      Name name = null;
+      
+      if (choice instanceof MarkerAnnotation)
+      {
+         type = AnnotationType.MARKER;
+         name = ((MarkerAnnotation) choice).f1;
+      }
+      else if (choice instanceof NormalAnnotation)
+      {
+         type = AnnotationType.NORMAL;
+         name = ((NormalAnnotation) choice).f1;
+      }
+      else if (choice instanceof SingleMemberAnnotation)
+      {
+         type = AnnotationType.SINGLE_MEMBER;
+         name = ((SingleMemberAnnotation) choice).f1;
+      }
+      
+      super.visit(node);
+    
+      currentAnnotation = new AnnotationMetadata(type, extractName(name));
+      meta.add(currentAnnotation);      
+   }
+   
+   private String extractName(Name name)
+   {
+      StringBuilder sb = new StringBuilder();
+      
+      sb.append(name.f0.tokenImage);
+      
+      NodeListOptional nodeList = ((NodeListOptional) name.f1);
+      if (nodeList.present())
+      {
+         for (Node node : nodeList.nodes)
+         {
+            if (node instanceof NodeSequence)
+            {
+               for (Node n : ((NodeSequence) node).nodes)
+               {
+                  if (n instanceof NodeToken)
+                  {
+                     sb.append(((NodeToken) n).tokenImage);
+                  }
+               }
+            }
+         }
+      }      
+      
+      return sb.toString();
+   }
+}

Modified: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/Call.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/Call.java	2009-11-30 14:23:32 UTC (rev 11704)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/Call.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -30,10 +30,8 @@
    private BeanManager beanManager;
 
    private String id;
-   private String beanName;
-   private Annotation[] qualifiers = null;
+
    private String methodName;
-   // private String expression;
    private Throwable exception;
 
    private List<Wrapper> params = new ArrayList<Wrapper>();
@@ -44,53 +42,41 @@
 
    private List<String> constraints = null;
    
-   private class AnnotationLiteral implements Annotation
-   {
-      private Class<? extends Annotation> annotationType;
-      
-      public AnnotationLiteral(Class<? extends Annotation> annotationType)
-      {
-         this.annotationType = annotationType;
-      }
-      
-      public Class<? extends Annotation> annotationType()
-      {
-         return annotationType;
-      }      
-   }
+   private Bean<?> targetBean = null;
 
-   /**
-    * Constructor.
-    */
-   @SuppressWarnings("unchecked")
    public Call(BeanManager beanManager, String id, String beanName, 
-         String qualifiers, String methodName)
+         String qualifierVal, String methodName)
    {
       this.beanManager = beanManager;
       this.id = id;
-      this.beanName = beanName;
       this.methodName = methodName;
       this.context = new CallContext(beanManager);
       
-      if (qualifiers != null && !qualifiers.isEmpty())
+      Set<Bean<?>> beans = beanManager.getBeans(beanName);
+      
+      if (beans.isEmpty())
       {
-         String[] qs = qualifiers.split(",");
-         this.qualifiers = new Annotation[qs.length];
-         
-         for (int i = 0; i < qs.length; i++)
+         try
          {
-            try
-            {
-               this.qualifiers[i] = new AnnotationLiteral(
-                     (Class<? extends Annotation>) Class.forName(qs[i]));
-            }
-            catch (ClassNotFoundException e)
-            {
-               // TODO improve this
-               e.printStackTrace();
-            }
+            Class<?> beanType = Class.forName(beanName);
+            
+            Annotation[] qualifiers = qualifierVal != null && !qualifierVal.isEmpty() ? 
+                  new AnnotationsParser(beanType, qualifierVal).getAnnotations() : null;
+
+            beans = beanManager.getBeans(beanType, qualifiers);            
          }
-      }
+         catch (ClassNotFoundException ex)
+         {
+            throw new IllegalArgumentException("Invalid bean class specified: " + beanName);
+         }
+                  
+         if (beans.isEmpty())
+         {
+            throw new IllegalArgumentException("Invalid bean name specified: " + beanName);         
+         }         
+      }  
+      
+      targetBean = beans.iterator().next();
    }
 
    /**
@@ -178,97 +164,43 @@
     * 
     * @throws Exception
     */
+   @SuppressWarnings("unchecked")
    public void execute() throws Exception
    {
-      if (beanName != null)
+      CreationalContext ctx = beanManager.createCreationalContext(targetBean);
+      
+      // Create an instance of the component
+      Object instance = targetBean.create(ctx); 
+
+      if (instance == null)
       {
-         processInvocation();
+         throw new RuntimeException(String.format(
+               "Could not create instance of bean %s", 
+               targetBean.getBeanClass().getName()));
       }
-   }
 
-   @SuppressWarnings("unchecked")
-   private void processInvocation() throws Exception
-   {
-      // Find the component we're calling
-      Set<Bean<?>> beans = beanManager.getBeans(beanName);
-      
-      if (beans.isEmpty())
+      // Find the method according to the method name and the parameter classes
+      Method m = findMethod(methodName, targetBean.getBeanClass());
+      if (m == null)
       {
-         // Can't find the bean by name, try looking it up by type and qualifiers
-         Type beanType = Class.forName(beanName);         
-         beans = beanManager.getBeans(beanType, qualifiers);
-         
-      }      
-      
-      if (beans.isEmpty())
+         throw new RuntimeException("No compatible method found.");
+      }
+
+      if (m.getAnnotation(WebRemote.class).exclude().length > 0)
       {
-         throw new RuntimeException("No such component: " + beanName);         
+         constraints = Arrays.asList(m.getAnnotation(WebRemote.class).exclude());
       }
-      else
-      {      
-         Bean<?> bean = beans.iterator().next();
-   
-         CreationalContext ctx = beanManager.createCreationalContext(bean);
-         
-         // Create an instance of the component
-         Object instance = bean.create(ctx); 
-   
-         if (instance == null)
-         {
-            throw new RuntimeException(String.format(
-                  "Could not create instance of bean %s", beanName));
-         }
-   
-         Class<?> type = null;
-   
-         //if (component.getType().isSessionBean()
-               //&& component.getBusinessInterfaces().size() > 0)
-         //{
-            //for (Class c : component.getBusinessInterfaces())
-            //{
-               //if (c.isAnnotationPresent(Local.class))
-               //{
-                  //type = c;
-                  //break;
-               //}
-            //}
-   
-            //if (type == null)
-            //{
-            //   throw new RuntimeException(String.format(
-            //     "Type cannot be determined for bean [%s]. Please ensure that it has a local interface.",
-            //                     bean));
-            //}
-         //}
-   
-         if (type == null)
-         {
-            type = bean.getBeanClass();
-         }
-   
-         // Find the method according to the method name and the parameter classes
-         Method m = findMethod(methodName, type);
-         if (m == null)
-         {
-            throw new RuntimeException("No compatible method found.");
-         }
-   
-         if (m.getAnnotation(WebRemote.class).exclude().length > 0)
-         {
-            constraints = Arrays.asList(m.getAnnotation(WebRemote.class).exclude());
-         }
-   
-         Object[] params = convertParams(m.getGenericParameterTypes());
-   
-         // Invoke!
-         try
-         {
-            result = m.invoke(instance, params);
-         } 
-         catch (InvocationTargetException e)
-         {
-            this.exception = e.getCause();
-         }
+
+      Object[] params = convertParams(m.getGenericParameterTypes());
+
+      // Invoke!
+      try
+      {
+         result = m.invoke(instance, params);
+      } 
+      catch (InvocationTargetException e)
+      {
+         this.exception = e.getCause();
       }
    }
 

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/ReflectiveAnnotationLiteral.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/ReflectiveAnnotationLiteral.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/ReflectiveAnnotationLiteral.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,28 @@
+package org.jboss.seam.remoting;
+
+import java.io.StringReader;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Proxy;
+import java.util.Map;
+
+import org.jboss.seam.remoting.annotationparser.AnnotationParser;
+
+public class ReflectiveAnnotationLiteral
+{
+   private Class<? extends Annotation> annotationType;
+   private Map<String,Object> memberValues;
+   
+   public ReflectiveAnnotationLiteral(String declaration)
+   {
+      AnnotationParser parser = new AnnotationParser(new StringReader(declaration));
+      
+      //this.annotationType = (Class<? extends Annotation>) Class.forName(annotationType));
+   }
+   
+   public <T extends Annotation> T getAnnotation()
+   {
+      return (T) Proxy.newProxyInstance(annotationType.getClassLoader(), 
+            new Class[] { annotationType }, 
+            new AnnotationLiteralHandler(annotationType, memberValues));
+   }   
+}

Modified: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParser.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParser.java	2009-11-30 14:23:32 UTC (rev 11704)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParser.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -2,60 +2,80 @@
 package org.jboss.seam.remoting.annotationparser;
 
 import java.io.*;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.Vector;
 
-/**
- * Grammar to parse Java 1.5 Annotations
- * @author Shane Bryzak
- */
+
 public class AnnotationParser implements AnnotationParserConstants {
    public AnnotationParser(String fileName)
    {
       this(System.in);
-      try { ReInit(new FileInputStream(new File(fileName))); }
-      catch(Exception e) { e.printStackTrace(); }
+      try
+      {
+         ReInit(new FileInputStream(new File(fileName)));
+      }
+      catch (Exception e)
+      {
+         e.printStackTrace();
+      }
    }
-
-  public static void main(String args[]) {
-    AnnotationParser parser;
-    if (args.length == 0) {
-      System.out.println("AnnotationParser: Reading from standard input . . .");
-      parser = new AnnotationParser(System.in);
-    } else if (args.length == 1) {
-      System.out.println("AnnotationParser:  Reading from file " + args[0] + " . . .");
-      try {
-        parser = new AnnotationParser(new java.io.FileInputStream(args[0]));
-      } catch (java.io.FileNotFoundException e) {
-        System.out.println("AnnotationParser:  File " + args[0] + " not found.");
-        return;
+   public static void main(String args[])
+   {
+      AnnotationParser parser;
+      if ( args.length == 0 )
+      {
+         System.out.println("AnnotationParser: Reading from standard input . . .");
+         parser = new AnnotationParser(System.in);
       }
-    } else {
-      System.out.println("AnnotationParser:  Usage is one of:");
-      System.out.println("         java AnnotationParser < inputfile");
-      System.out.println("OR");
-      System.out.println("         java AnnotationParser inputfile");
-      return;
-    }
-    try {
-      parser.AnnotationsUnit();
-      System.out.println("AnnotationParser:  Annotations parsed successfully.");
-    } catch (ParseException e) {
-      System.out.println(e.getMessage());
-      System.out.println("AnnotationParser:  Encountered errors during parse.");
-    }
-  }
+      else
+         if ( args.length == 1 )
+         {
+            System.out.println("AnnotationParser:  Reading from file " + args[0]+ " . . .");
+            try
+            {
+               parser = new AnnotationParser(new java.io.FileInputStream(args[0]));
+            }
+            catch (java.io.FileNotFoundException e)
+            {
+               System.out.println("AnnotationParser:  File " + args[0]+ " not found.");
+               return;
+            }
+         }
+         else
+         {
+            System.out.println("AnnotationParser:  Usage is one of:");
+            System.out.println("         java AnnotationParser < inputfile");
+            System.out.println("OR");
+            System.out.println("         java AnnotationParser inputfile");
+            return;
+         }
+      try
+      {
+         parser.AnnotationsUnit();
+         System.out.println("AnnotationParser:  Annotations parsed successfully.");
+      }
+      catch (ParseException e)
+      {
+         System.out.println(e.getMessage());
+         System.out.println("AnnotationParser:  Encountered errors during parse.");
+      }
+   }
 
-/***********************************
- * ANNOTATIONS GRAMMAR STARTS HERE *
- ***********************************/
-
-/*
- * Program structuring syntax follows.
- */
-  final public void AnnotationsUnit() throws ParseException {
-    jj_consume_token(LPAREN);
+  final public AnnotationsUnit AnnotationsUnit() throws ParseException {
+   NodeOptional n0 = new NodeOptional();
+   NodeSequence n1;
+   Annotation n2;
+   NodeListOptional n3;
+   NodeSequence n4;
+   NodeToken n5;
+   Token n6;
+   Annotation n7;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case AT:
-      Annotation();
+        n3 = new NodeListOptional();
+        n1 = new NodeSequence(2);
+      n2 = Annotation();
+        n1.addNode(n2);
       label_1:
       while (true) {
         switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -65,50 +85,103 @@
         default:
           break label_1;
         }
-        jj_consume_token(COMMA);
-        Annotation();
+           n4 = new NodeSequence(2);
+        n6 = jj_consume_token(COMMA);
+                  n5 = JTBToolkit.makeNodeToken(n6);
+           n4.addNode(n5);
+        n7 = Annotation();
+           n4.addNode(n7);
+           n3.addNode(n4);
       }
+        n3.nodes.trimToSize();
+        n1.addNode(n3);
+        n0.addNode(n1);
       break;
     default:
       ;
     }
-    jj_consume_token(RPAREN);
+     {if (true) return new AnnotationsUnit(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void PrimitiveType() throws ParseException {
+  final public PrimitiveType PrimitiveType() throws ParseException {
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeToken n5;
+   Token n6;
+   NodeToken n7;
+   Token n8;
+   NodeToken n9;
+   Token n10;
+   NodeToken n11;
+   Token n12;
+   NodeToken n13;
+   Token n14;
+   NodeToken n15;
+   Token n16;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case BOOLEAN:
-      jj_consume_token(BOOLEAN);
+      n2 = jj_consume_token(BOOLEAN);
+                     n1 = JTBToolkit.makeNodeToken(n2);
+        n0 = new NodeChoice(n1, 0);
       break;
     case CHAR:
-      jj_consume_token(CHAR);
+      n4 = jj_consume_token(CHAR);
+                  n3 = JTBToolkit.makeNodeToken(n4);
+        n0 = new NodeChoice(n3, 1);
       break;
     case BYTE:
-      jj_consume_token(BYTE);
+      n6 = jj_consume_token(BYTE);
+                  n5 = JTBToolkit.makeNodeToken(n6);
+        n0 = new NodeChoice(n5, 2);
       break;
     case SHORT:
-      jj_consume_token(SHORT);
+      n8 = jj_consume_token(SHORT);
+                   n7 = JTBToolkit.makeNodeToken(n8);
+        n0 = new NodeChoice(n7, 3);
       break;
     case INT:
-      jj_consume_token(INT);
+      n10 = jj_consume_token(INT);
+                  n9 = JTBToolkit.makeNodeToken(n10);
+        n0 = new NodeChoice(n9, 4);
       break;
     case LONG:
-      jj_consume_token(LONG);
+      n12 = jj_consume_token(LONG);
+                   n11 = JTBToolkit.makeNodeToken(n12);
+        n0 = new NodeChoice(n11, 5);
       break;
     case FLOAT:
-      jj_consume_token(FLOAT);
+      n14 = jj_consume_token(FLOAT);
+                    n13 = JTBToolkit.makeNodeToken(n14);
+        n0 = new NodeChoice(n13, 6);
       break;
     case DOUBLE:
-      jj_consume_token(DOUBLE);
+      n16 = jj_consume_token(DOUBLE);
+                     n15 = JTBToolkit.makeNodeToken(n16);
+        n0 = new NodeChoice(n15, 7);
       break;
     default:
       jj_consume_token(-1);
       throw new ParseException();
     }
+     {if (true) return new PrimitiveType(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void Name() throws ParseException {
-    jj_consume_token(IDENTIFIER);
+  final public Name Name() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeListOptional n2 = new NodeListOptional();
+   NodeSequence n3;
+   NodeToken n4;
+   Token n5;
+   NodeToken n6;
+   Token n7;
+    n1 = jj_consume_token(IDENTIFIER);
+                     n0 = JTBToolkit.makeNodeToken(n1);
     label_2:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -118,103 +191,199 @@
       default:
         break label_2;
       }
-      jj_consume_token(DOT);
-      jj_consume_token(IDENTIFIER);
+        n3 = new NodeSequence(2);
+      n5 = jj_consume_token(DOT);
+               n4 = JTBToolkit.makeNodeToken(n5);
+        n3.addNode(n4);
+      n7 = jj_consume_token(IDENTIFIER);
+                        n6 = JTBToolkit.makeNodeToken(n7);
+        n3.addNode(n6);
+        n2.addNode(n3);
     }
+     n2.nodes.trimToSize();
+     {if (true) return new Name(n0,n2);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void Literal() throws ParseException {
+  final public Literal Literal() throws ParseException {
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeToken n5;
+   Token n6;
+   NodeToken n7;
+   Token n8;
+   BooleanLiteral n9;
+   NullLiteral n10;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case INTEGER_LITERAL:
-      jj_consume_token(INTEGER_LITERAL);
+      n2 = jj_consume_token(INTEGER_LITERAL);
+                             n1 = JTBToolkit.makeNodeToken(n2);
+        n0 = new NodeChoice(n1, 0);
       break;
     case FLOATING_POINT_LITERAL:
-      jj_consume_token(FLOATING_POINT_LITERAL);
+      n4 = jj_consume_token(FLOATING_POINT_LITERAL);
+                                    n3 = JTBToolkit.makeNodeToken(n4);
+        n0 = new NodeChoice(n3, 1);
       break;
     case CHARACTER_LITERAL:
-      jj_consume_token(CHARACTER_LITERAL);
+      n6 = jj_consume_token(CHARACTER_LITERAL);
+                               n5 = JTBToolkit.makeNodeToken(n6);
+        n0 = new NodeChoice(n5, 2);
       break;
     case STRING_LITERAL:
-      jj_consume_token(STRING_LITERAL);
+      n8 = jj_consume_token(STRING_LITERAL);
+                            n7 = JTBToolkit.makeNodeToken(n8);
+        n0 = new NodeChoice(n7, 3);
       break;
     case FALSE:
     case TRUE:
-      BooleanLiteral();
+      n9 = BooleanLiteral();
+        n0 = new NodeChoice(n9, 4);
       break;
     case NULL:
-      NullLiteral();
+      n10 = NullLiteral();
+        n0 = new NodeChoice(n10, 5);
       break;
     default:
       jj_consume_token(-1);
       throw new ParseException();
     }
+     {if (true) return new Literal(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void BooleanLiteral() throws ParseException {
+  final public BooleanLiteral BooleanLiteral() throws ParseException {
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case TRUE:
-      jj_consume_token(TRUE);
+      n2 = jj_consume_token(TRUE);
+                  n1 = JTBToolkit.makeNodeToken(n2);
+        n0 = new NodeChoice(n1, 0);
       break;
     case FALSE:
-      jj_consume_token(FALSE);
+      n4 = jj_consume_token(FALSE);
+                   n3 = JTBToolkit.makeNodeToken(n4);
+        n0 = new NodeChoice(n3, 1);
       break;
     default:
       jj_consume_token(-1);
       throw new ParseException();
     }
+     {if (true) return new BooleanLiteral(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void NullLiteral() throws ParseException {
-    jj_consume_token(NULL);
+  final public NullLiteral NullLiteral() throws ParseException {
+   NodeToken n0;
+   Token n1;
+    n1 = jj_consume_token(NULL);
+               n0 = JTBToolkit.makeNodeToken(n1);
+     {if (true) return new NullLiteral(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-/* Annotation syntax follows. */
-  final public void Annotation() throws ParseException {
+  final public Annotation Annotation() throws ParseException {
+   NodeChoice n0;
+   NormalAnnotation n1;
+   SingleMemberAnnotation n2;
+   MarkerAnnotation n3;
     if (jj_2_1(2147483647)) {
-      NormalAnnotation();
+      n1 = NormalAnnotation();
+        n0 = new NodeChoice(n1, 0);
     } else if (jj_2_2(2147483647)) {
-      SingleMemberAnnotation();
+      n2 = SingleMemberAnnotation();
+        n0 = new NodeChoice(n2, 1);
     } else {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case AT:
-        MarkerAnnotation();
+        n3 = MarkerAnnotation();
+        n0 = new NodeChoice(n3, 2);
         break;
       default:
         jj_consume_token(-1);
         throw new ParseException();
       }
     }
+     {if (true) return new Annotation(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void NormalAnnotation() throws ParseException {
-    jj_consume_token(AT);
-    Name();
-    jj_consume_token(LPAREN);
+  final public NormalAnnotation NormalAnnotation() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   Name n2;
+   NodeToken n3;
+   Token n4;
+   NodeOptional n5 = new NodeOptional();
+   MemberValuePairs n6;
+   NodeToken n7;
+   Token n8;
+    n1 = jj_consume_token(AT);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    n2 = Name();
+    n4 = jj_consume_token(LPAREN);
+            n3 = JTBToolkit.makeNodeToken(n4);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IDENTIFIER:
-      MemberValuePairs();
+      n6 = MemberValuePairs();
+        n5.addNode(n6);
       break;
     default:
       ;
     }
-    jj_consume_token(RPAREN);
+    n8 = jj_consume_token(RPAREN);
+            n7 = JTBToolkit.makeNodeToken(n8);
+     {if (true) return new NormalAnnotation(n0,n2,n3,n5,n7);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void MarkerAnnotation() throws ParseException {
-    jj_consume_token(AT);
-    Name();
+  final public MarkerAnnotation MarkerAnnotation() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   Name n2;
+    n1 = jj_consume_token(AT);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    n2 = Name();
+     {if (true) return new MarkerAnnotation(n0,n2);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void SingleMemberAnnotation() throws ParseException {
-    jj_consume_token(AT);
-    Name();
-    jj_consume_token(LPAREN);
-    MemberValue();
-    jj_consume_token(RPAREN);
+  final public SingleMemberAnnotation SingleMemberAnnotation() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   Name n2;
+   NodeToken n3;
+   Token n4;
+   MemberValue n5;
+   NodeToken n6;
+   Token n7;
+    n1 = jj_consume_token(AT);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    n2 = Name();
+    n4 = jj_consume_token(LPAREN);
+            n3 = JTBToolkit.makeNodeToken(n4);
+    n5 = MemberValue();
+    n7 = jj_consume_token(RPAREN);
+            n6 = JTBToolkit.makeNodeToken(n7);
+     {if (true) return new SingleMemberAnnotation(n0,n2,n3,n5,n6);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void MemberValuePairs() throws ParseException {
-    MemberValuePair();
+  final public MemberValuePairs MemberValuePairs() throws ParseException {
+   MemberValuePair n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   MemberValuePair n5;
+    n0 = MemberValuePair();
     label_3:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -224,24 +393,47 @@
       default:
         break label_3;
       }
-      jj_consume_token(COMMA);
-      MemberValuePair();
+        n2 = new NodeSequence(2);
+      n4 = jj_consume_token(COMMA);
+               n3 = JTBToolkit.makeNodeToken(n4);
+        n2.addNode(n3);
+      n5 = MemberValuePair();
+        n2.addNode(n5);
+        n1.addNode(n2);
     }
+     n1.nodes.trimToSize();
+     {if (true) return new MemberValuePairs(n0,n1);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void MemberValuePair() throws ParseException {
-    jj_consume_token(IDENTIFIER);
-    jj_consume_token(ASSIGN);
-    MemberValue();
+  final public MemberValuePair MemberValuePair() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   NodeToken n2;
+   Token n3;
+   MemberValue n4;
+    n1 = jj_consume_token(IDENTIFIER);
+                     n0 = JTBToolkit.makeNodeToken(n1);
+    n3 = jj_consume_token(ASSIGN);
+            n2 = JTBToolkit.makeNodeToken(n3);
+    n4 = MemberValue();
+     {if (true) return new MemberValuePair(n0,n2,n4);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void MemberValue() throws ParseException {
+  final public MemberValue MemberValue() throws ParseException {
+   NodeChoice n0;
+   Annotation n1;
+   MemberValueArrayInitializer n2;
+   Literal n3;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case AT:
-      Annotation();
+      n1 = Annotation();
+        n0 = new NodeChoice(n1, 0);
       break;
     case LBRACE:
-      MemberValueArrayInitializer();
+      n2 = MemberValueArrayInitializer();
+        n0 = new NodeChoice(n2, 1);
       break;
     case FALSE:
     case NULL:
@@ -250,17 +442,34 @@
     case FLOATING_POINT_LITERAL:
     case CHARACTER_LITERAL:
     case STRING_LITERAL:
-      Literal();
+      n3 = Literal();
+        n0 = new NodeChoice(n3, 2);
       break;
     default:
       jj_consume_token(-1);
       throw new ParseException();
     }
+     {if (true) return new MemberValue(n0);}
+    throw new Error("Missing return statement in function");
   }
 
-  final public void MemberValueArrayInitializer() throws ParseException {
-    jj_consume_token(LBRACE);
-    MemberValue();
+  final public MemberValueArrayInitializer MemberValueArrayInitializer() throws ParseException {
+   NodeToken n0;
+   Token n1;
+   MemberValue n2;
+   NodeListOptional n3 = new NodeListOptional();
+   NodeSequence n4;
+   NodeToken n5;
+   Token n6;
+   MemberValue n7;
+   NodeOptional n8 = new NodeOptional();
+   NodeToken n9;
+   Token n10;
+   NodeToken n11;
+   Token n12;
+    n1 = jj_consume_token(LBRACE);
+            n0 = JTBToolkit.makeNodeToken(n1);
+    n2 = MemberValue();
     label_4:
     while (true) {
       if (jj_2_3(2)) {
@@ -268,17 +477,28 @@
       } else {
         break label_4;
       }
-      jj_consume_token(COMMA);
-      MemberValue();
+        n4 = new NodeSequence(2);
+      n6 = jj_consume_token(COMMA);
+               n5 = JTBToolkit.makeNodeToken(n6);
+        n4.addNode(n5);
+      n7 = MemberValue();
+        n4.addNode(n7);
+        n3.addNode(n4);
     }
+     n3.nodes.trimToSize();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COMMA:
-      jj_consume_token(COMMA);
+      n10 = jj_consume_token(COMMA);
+                n9 = JTBToolkit.makeNodeToken(n10);
+        n8.addNode(n9);
       break;
     default:
       ;
     }
-    jj_consume_token(RBRACE);
+    n12 = jj_consume_token(RBRACE);
+             n11 = JTBToolkit.makeNodeToken(n12);
+     {if (true) return new MemberValueArrayInitializer(n0,n2,n3,n8,n11);}
+    throw new Error("Missing return statement in function");
   }
 
   private boolean jj_2_1(int xla) {
@@ -299,74 +519,70 @@
     catch(LookaheadSuccess ls) { return true; }
   }
 
-  private boolean jj_3R_20() {
-    if (jj_scan_token(AT)) return true;
+  private boolean jj_3R_17() {
+    if (jj_3R_26()) return true;
     return false;
   }
 
-  private boolean jj_3R_18() {
-    if (jj_3R_22()) return true;
+  private boolean jj_3R_16() {
+    if (jj_3R_25()) return true;
     return false;
   }
 
-  private boolean jj_3R_21() {
+  private boolean jj_3R_26() {
     if (jj_scan_token(AT)) return true;
     return false;
   }
 
-  private boolean jj_3R_14() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(66)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(70)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(72)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(73)) {
-    jj_scanpos = xsp;
-    if (jj_3R_18()) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(45)) return true;
-    }
-    }
-    }
-    }
-    }
+  private boolean jj_3R_15() {
+    if (jj_3R_24()) return true;
     return false;
   }
 
-  private boolean jj_3_2() {
-    if (jj_scan_token(AT)) return true;
-    if (jj_3R_5()) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  private boolean jj_3R_11() {
+    if (jj_3R_14()) return true;
     return false;
   }
 
-  private boolean jj_3R_19() {
-    if (jj_scan_token(AT)) return true;
+  private boolean jj_3R_10() {
+    if (jj_3R_13()) return true;
     return false;
   }
 
-  private boolean jj_3_1() {
-    if (jj_scan_token(AT)) return true;
-    if (jj_3R_5()) return true;
-    if (jj_scan_token(LPAREN)) return true;
+  private boolean jj_3R_8() {
+    if (jj_scan_token(DOT)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_12() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_6()) {
+    if (jj_3R_15()) {
     jj_scanpos = xsp;
-    if (jj_scan_token(78)) return true;
+    if (jj_3R_16()) {
+    jj_scanpos = xsp;
+    if (jj_3R_17()) return true;
     }
+    }
     return false;
   }
 
-  private boolean jj_3R_8() {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_scan_token(IDENTIFIER)) return true;
+  private boolean jj_3R_23() {
+    if (jj_3R_28()) return true;
     return false;
   }
 
+  private boolean jj_3R_9() {
+    if (jj_3R_12()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_22() {
+    if (jj_3R_27()) return true;
+    return false;
+  }
+
   private boolean jj_3R_5() {
     if (jj_scan_token(IDENTIFIER)) return true;
     Token xsp;
@@ -377,89 +593,133 @@
     return false;
   }
 
-  private boolean jj_3R_17() {
-    if (jj_3R_21()) return true;
+  private boolean jj_3R_7() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_9()) {
+    jj_scanpos = xsp;
+    if (jj_3R_10()) {
+    jj_scanpos = xsp;
+    if (jj_3R_11()) return true;
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_13() {
-    if (jj_scan_token(LBRACE)) return true;
+  private boolean jj_3R_21() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_16() {
-    if (jj_3R_20()) return true;
+  private boolean jj_3R_20() {
+    if (jj_scan_token(CHARACTER_LITERAL)) return true;
     return false;
   }
 
-  private boolean jj_3R_12() {
+  private boolean jj_3R_19() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3_3() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_7()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_28() {
+    if (jj_scan_token(NULL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_24() {
+    if (jj_scan_token(AT)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_6() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    if (jj_scan_token(ASSIGN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_18() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_13() {
+    if (jj_scan_token(LBRACE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_14() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_15()) {
+    if (jj_3R_18()) {
     jj_scanpos = xsp;
-    if (jj_3R_16()) {
+    if (jj_3R_19()) {
     jj_scanpos = xsp;
-    if (jj_3R_17()) return true;
+    if (jj_3R_20()) {
+    jj_scanpos = xsp;
+    if (jj_3R_21()) {
+    jj_scanpos = xsp;
+    if (jj_3R_22()) {
+    jj_scanpos = xsp;
+    if (jj_3R_23()) return true;
     }
     }
+    }
+    }
+    }
     return false;
   }
 
-  private boolean jj_3R_15() {
-    if (jj_3R_19()) return true;
+  private boolean jj_3R_25() {
+    if (jj_scan_token(AT)) return true;
     return false;
   }
 
-  private boolean jj_3R_11() {
-    if (jj_3R_14()) return true;
+  private boolean jj_3R_30() {
+    if (jj_scan_token(FALSE)) return true;
     return false;
   }
 
-  private boolean jj_3R_10() {
-    if (jj_3R_13()) return true;
+  private boolean jj_3_2() {
+    if (jj_scan_token(AT)) return true;
+    if (jj_3R_5()) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_9() {
-    if (jj_3R_12()) return true;
+  private boolean jj_3R_29() {
+    if (jj_scan_token(TRUE)) return true;
     return false;
   }
 
-  private boolean jj_3R_7() {
+  private boolean jj_3_1() {
+    if (jj_scan_token(AT)) return true;
+    if (jj_3R_5()) return true;
+    if (jj_scan_token(LPAREN)) return true;
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_3R_9()) {
+    if (jj_3R_6()) {
     jj_scanpos = xsp;
-    if (jj_3R_10()) {
-    jj_scanpos = xsp;
-    if (jj_3R_11()) return true;
+    if (jj_scan_token(78)) return true;
     }
-    }
     return false;
   }
 
-  private boolean jj_3R_22() {
+  private boolean jj_3R_27() {
     Token xsp;
     xsp = jj_scanpos;
-    if (jj_scan_token(61)) {
+    if (jj_3R_29()) {
     jj_scanpos = xsp;
-    if (jj_scan_token(30)) return true;
+    if (jj_3R_30()) return true;
     }
     return false;
   }
 
-  private boolean jj_3R_6() {
-    if (jj_scan_token(IDENTIFIER)) return true;
-    if (jj_scan_token(ASSIGN)) return true;
-    return false;
-  }
-
-  private boolean jj_3_3() {
-    if (jj_scan_token(COMMA)) return true;
-    if (jj_3R_7()) return true;
-    return false;
-  }
-
   /** Generated Token Manager. */
   public AnnotationParserTokenManager token_source;
   JavaCharStream jj_input_stream;
@@ -598,3 +858,9 @@
   }
 
 }
+
+class JTBToolkit {
+   static NodeToken makeNodeToken(Token t) {
+      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
+   }
+}

Modified: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParserTokenManager.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParserTokenManager.java	2009-11-30 14:23:32 UTC (rev 11704)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/AnnotationParserTokenManager.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -1,6 +1,8 @@
 /* Generated By:JavaCC: Do not edit this line. AnnotationParserTokenManager.java */
 package org.jboss.seam.remoting.annotationparser;
 import java.io.*;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.Vector;
 
 /** Token Manager. */
 public class AnnotationParserTokenManager implements AnnotationParserConstants
@@ -1709,7 +1711,7 @@
       case 7 :
          image.append(input_stream.GetSuffix(jjimageLen));
          jjimageLen = 0;
-                   input_stream.backup(1);
+         input_stream.backup(1);
          break;
       default :
          break;

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/jtb.out.jj
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/jtb.out.jj	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/jtb.out.jj	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,640 @@
+//
+// Generated by JTB 1.3.2
+//
+
+options {
+   JAVA_UNICODE_ESCAPE = true;
+   ERROR_REPORTING = false;
+   STATIC = false;
+}
+
+PARSER_BEGIN(AnnotationParser)
+package org.jboss.seam.remoting.annotationparser;
+
+import java.io.*;
+import syntaxtree.*;
+import java.util.Vector;
+
+
+public class AnnotationParser 
+{
+   public AnnotationParser(String fileName)
+   {
+      this(System.in);
+      try
+      {
+         ReInit(new FileInputStream(new File(fileName)));
+      }
+      catch (Exception e)
+      {
+         e.printStackTrace();
+      }
+   }
+   public static void main(String args[])
+   {
+      AnnotationParser parser;
+      if ( args.length == 0 )
+      {
+         System.out.println("AnnotationParser: Reading from standard input . . .");
+         parser = new AnnotationParser(System.in);
+      }
+      else
+         if ( args.length == 1 )
+         {
+            System.out.println("AnnotationParser:  Reading from file " + args[0]+ " . . .");
+            try
+            {
+               parser = new AnnotationParser(new java.io.FileInputStream(args[0]));
+            }
+            catch (java.io.FileNotFoundException e)
+            {
+               System.out.println("AnnotationParser:  File " + args[0]+ " not found.");
+               return;
+            }
+         }
+         else
+         {
+            System.out.println("AnnotationParser:  Usage is one of:");
+            System.out.println("         java AnnotationParser < inputfile");
+            System.out.println("OR");
+            System.out.println("         java AnnotationParser inputfile");
+            return;
+         }
+      try
+      {
+         parser.AnnotationsUnit();
+         System.out.println("AnnotationParser:  Annotations parsed successfully.");
+      }
+      catch (ParseException e)
+      {
+         System.out.println(e.getMessage());
+         System.out.println("AnnotationParser:  Encountered errors during parse.");
+      }
+   }
+}
+
+class JTBToolkit {
+   static NodeToken makeNodeToken(Token t) {
+      return new NodeToken(t.image.intern(), t.kind, t.beginLine, t.beginColumn, t.endLine, t.endColumn);
+   }
+}
+
+
+PARSER_END(AnnotationParser)
+
+SKIP :
+{
+   " "
+   | "\t"
+   | "\n"
+   | "\r"
+   | "\f"
+}
+
+MORE :
+{
+   "//" : IN_SINGLE_LINE_COMMENT
+   | <"/**" ~["/"]>
+      {
+         input_stream.backup(1);
+      } : IN_FORMAL_COMMENT
+   | "/*" : IN_MULTI_LINE_COMMENT
+}
+
+<IN_SINGLE_LINE_COMMENT> SPECIAL_TOKEN :
+{
+   <SINGLE_LINE_COMMENT: "\n" | "\r" | "\r\n"> : DEFAULT
+}
+
+<IN_FORMAL_COMMENT> SPECIAL_TOKEN :
+{
+   <FORMAL_COMMENT: "*/"> : DEFAULT
+}
+
+<IN_MULTI_LINE_COMMENT> SPECIAL_TOKEN :
+{
+   <MULTI_LINE_COMMENT: "*/"> : DEFAULT
+}
+
+<IN_SINGLE_LINE_COMMENT, IN_FORMAL_COMMENT, IN_MULTI_LINE_COMMENT> MORE :
+{
+   <~[]>
+}
+
+TOKEN :
+{
+   <ABSTRACT: "abstract">
+   | <ASSERT: "assert">
+   | <BOOLEAN: "boolean">
+   | <BREAK: "break">
+   | <BYTE: "byte">
+   | <CASE: "case">
+   | <CATCH: "catch">
+   | <CHAR: "char">
+   | <CLASS: "class">
+   | <CONST: "const">
+   | <CONTINUE: "continue">
+   | <_DEFAULT: "default">
+   | <DO: "do">
+   | <DOUBLE: "double">
+   | <ELSE: "else">
+   | <ENUM: "enum">
+   | <EXTENDS: "extends">
+   | <FALSE: "false">
+   | <FINAL: "final">
+   | <FINALLY: "finally">
+   | <FLOAT: "float">
+   | <FOR: "for">
+   | <GOTO: "goto">
+   | <IF: "if">
+   | <IMPLEMENTS: "implements">
+   | <IMPORT: "import">
+   | <INSTANCEOF: "instanceof">
+   | <INT: "int">
+   | <INTERFACE: "interface">
+   | <LONG: "long">
+   | <NATIVE: "native">
+   | <NEW: "new">
+   | <NULL: "null">
+   | <PACKAGE: "package">
+   | <PRIVATE: "private">
+   | <PROTECTED: "protected">
+   | <PUBLIC: "public">
+   | <RETURN: "return">
+   | <SHORT: "short">
+   | <STATIC: "static">
+   | <STRICTFP: "strictfp">
+   | <SUPER: "super">
+   | <SWITCH: "switch">
+   | <SYNCHRONIZED: "synchronized">
+   | <THIS: "this">
+   | <THROW: "throw">
+   | <THROWS: "throws">
+   | <TRANSIENT: "transient">
+   | <TRUE: "true">
+   | <TRY: "try">
+   | <VOID: "void">
+   | <VOLATILE: "volatile">
+   | <WHILE: "while">
+}
+
+TOKEN :
+{
+   <INTEGER_LITERAL: <DECIMAL_LITERAL> (["l", "L"])? | <HEX_LITERAL> (["l", "L"])? | <OCTAL_LITERAL> (["l", "L"])?>
+   | <#DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])*>
+   | <#HEX_LITERAL: "0" ["x", "X"] (["0"-"9", "a"-"f", "A"-"F"])+>
+   | <#OCTAL_LITERAL: "0" (["0"-"7"])*>
+   | <FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? (["f", "F", "d", "D"])? | "." (["0"-"9"])+ (<EXPONENT>)? (["f", "F", "d", "D"])? | (["0"-"9"])+ <EXPONENT> (["f", "F", "d", "D"])? | (["0"-"9"])+ (<EXPONENT>)? ["f", "F", "d", "D"]>
+   | <#EXPONENT: ["e", "E"] (["+", "-"])? (["0"-"9"])+>
+   | <CHARACTER_LITERAL: "'" ((~["'", "\\", "\n", "\r"]) | ("\\" (["n", "t", "b", "r", "f", "\\", "'", "\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"] ["0"-"7"]))) "'">
+   | <STRING_LITERAL: "\"" ((~["\"", "\\", "\n", "\r"]) | ("\\" (["n", "t", "b", "r", "f", "\\", "'", "\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"] ["0"-"7"])))* "\"">
+}
+
+TOKEN :
+{
+   <IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*>
+   | <#LETTER: ["$", "A"-"Z", "_", "a"-"z", "\u00c0"-"\u00d6", "\u00d8"-"\u00f6", "\u00f8"-"\u00ff", "\u0100"-"\u1fff", "\u3040"-"\u318f", "\u3300"-"\u337f", "\u3400"-"\u3d2d", "\u4e00"-"\u9fff", "\uf900"-"\ufaff"]>
+   | <#DIGIT: ["0"-"9", "\u0660"-"\u0669", "\u06f0"-"\u06f9", "\u0966"-"\u096f", "\u09e6"-"\u09ef", "\u0a66"-"\u0a6f", "\u0ae6"-"\u0aef", "\u0b66"-"\u0b6f", "\u0be7"-"\u0bef", "\u0c66"-"\u0c6f", "\u0ce6"-"\u0cef", "\u0d66"-"\u0d6f", "\u0e50"-"\u0e59", "\u0ed0"-"\u0ed9", "\u1040"-"\u1049"]>
+}
+
+TOKEN :
+{
+   <LPAREN: "(">
+   | <RPAREN: ")">
+   | <LBRACE: "{">
+   | <RBRACE: "}">
+   | <LBRACKET: "[">
+   | <RBRACKET: "]">
+   | <SEMICOLON: ";">
+   | <COMMA: ",">
+   | <DOT: ".">
+   | <AT: "@">
+}
+
+TOKEN :
+{
+   <ASSIGN: "=">
+   | <LT: "<">
+   | <BANG: "!">
+   | <TILDE: "~">
+   | <HOOK: "?">
+   | <COLON: ":">
+   | <EQ: "==">
+   | <LE: "<=">
+   | <GE: ">=">
+   | <NE: "!=">
+   | <SC_OR: "||">
+   | <SC_AND: "&&">
+   | <INCR: "++">
+   | <DECR: "--">
+   | <PLUS: "+">
+   | <MINUS: "-">
+   | <STAR: "*">
+   | <SLASH: "/">
+   | <BIT_AND: "&">
+   | <BIT_OR: "|">
+   | <XOR: "^">
+   | <REM: "%">
+   | <LSHIFT: "<<">
+   | <PLUSASSIGN: "+=">
+   | <MINUSASSIGN: "-=">
+   | <STARASSIGN: "*=">
+   | <SLASHASSIGN: "/=">
+   | <ANDASSIGN: "&=">
+   | <ORASSIGN: "|=">
+   | <XORASSIGN: "^=">
+   | <REMASSIGN: "%=">
+   | <LSHIFTASSIGN: "<<=">
+   | <RSIGNEDSHIFTASSIGN: ">>=">
+   | <RUNSIGNEDSHIFTASSIGN: ">>>=">
+   | <ELLIPSIS: "...">
+}
+
+AnnotationsUnit AnnotationsUnit() :
+{
+   NodeOptional n0 = new NodeOptional();
+   NodeSequence n1;
+   Annotation n2;
+   NodeListOptional n3;
+   NodeSequence n4;
+   NodeToken n5;
+   Token n6;
+   Annotation n7;
+
+   
+}
+{
+   (
+      { n3 = new NodeListOptional(); }
+      { n1 = new NodeSequence(2); }
+      n2=Annotation()
+      { n1.addNode(n2); }
+      (
+         { n4 = new NodeSequence(2); }
+         n6="," { n5 = JTBToolkit.makeNodeToken(n6); }
+         { n4.addNode(n5); }
+         n7=Annotation()
+         { n4.addNode(n7); }
+         { n3.addNode(n4); }
+      )*
+      { n3.nodes.trimToSize(); }
+      { n1.addNode(n3); }
+      { n0.addNode(n1); }
+   )?
+   
+   { return new AnnotationsUnit(n0); }
+}
+
+PrimitiveType PrimitiveType() :
+{
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeToken n5;
+   Token n6;
+   NodeToken n7;
+   Token n8;
+   NodeToken n9;
+   Token n10;
+   NodeToken n11;
+   Token n12;
+   NodeToken n13;
+   Token n14;
+   NodeToken n15;
+   Token n16;
+
+   
+}
+{
+   (
+      n2="boolean" { n1 = JTBToolkit.makeNodeToken(n2); }
+      { n0 = new NodeChoice(n1, 0); }
+   |
+      n4="char" { n3 = JTBToolkit.makeNodeToken(n4); }
+      { n0 = new NodeChoice(n3, 1); }
+   |
+      n6="byte" { n5 = JTBToolkit.makeNodeToken(n6); }
+      { n0 = new NodeChoice(n5, 2); }
+   |
+      n8="short" { n7 = JTBToolkit.makeNodeToken(n8); }
+      { n0 = new NodeChoice(n7, 3); }
+   |
+      n10="int" { n9 = JTBToolkit.makeNodeToken(n10); }
+      { n0 = new NodeChoice(n9, 4); }
+   |
+      n12="long" { n11 = JTBToolkit.makeNodeToken(n12); }
+      { n0 = new NodeChoice(n11, 5); }
+   |
+      n14="float" { n13 = JTBToolkit.makeNodeToken(n14); }
+      { n0 = new NodeChoice(n13, 6); }
+   |
+      n16="double" { n15 = JTBToolkit.makeNodeToken(n16); }
+      { n0 = new NodeChoice(n15, 7); }
+   )
+   
+   { return new PrimitiveType(n0); }
+}
+
+Name Name() :
+{
+   NodeToken n0;
+   Token n1;
+   NodeListOptional n2 = new NodeListOptional();
+   NodeSequence n3;
+   NodeToken n4;
+   Token n5;
+   NodeToken n6;
+   Token n7;
+
+   
+}
+{
+   n1=<IDENTIFIER> { n0 = JTBToolkit.makeNodeToken(n1); }
+   (
+      { n3 = new NodeSequence(2); }
+      n5="." { n4 = JTBToolkit.makeNodeToken(n5); }
+      { n3.addNode(n4); }
+      n7=<IDENTIFIER> { n6 = JTBToolkit.makeNodeToken(n7); }
+      { n3.addNode(n6); }
+      { n2.addNode(n3); }
+   )*
+   { n2.nodes.trimToSize(); }
+   
+   { return new Name(n0,n2); }
+}
+
+Literal Literal() :
+{
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+   NodeToken n5;
+   Token n6;
+   NodeToken n7;
+   Token n8;
+   BooleanLiteral n9;
+   NullLiteral n10;
+
+   
+}
+{
+   (
+      n2=<INTEGER_LITERAL> { n1 = JTBToolkit.makeNodeToken(n2); }
+      { n0 = new NodeChoice(n1, 0); }
+   |
+      n4=<FLOATING_POINT_LITERAL> { n3 = JTBToolkit.makeNodeToken(n4); }
+      { n0 = new NodeChoice(n3, 1); }
+   |
+      n6=<CHARACTER_LITERAL> { n5 = JTBToolkit.makeNodeToken(n6); }
+      { n0 = new NodeChoice(n5, 2); }
+   |
+      n8=<STRING_LITERAL> { n7 = JTBToolkit.makeNodeToken(n8); }
+      { n0 = new NodeChoice(n7, 3); }
+   |
+      n9=BooleanLiteral()
+      { n0 = new NodeChoice(n9, 4); }
+   |
+      n10=NullLiteral()
+      { n0 = new NodeChoice(n10, 5); }
+   )
+   
+   { return new Literal(n0); }
+}
+
+BooleanLiteral BooleanLiteral() :
+{
+   NodeChoice n0;
+   NodeToken n1;
+   Token n2;
+   NodeToken n3;
+   Token n4;
+
+   
+}
+{
+   (
+      n2="true" { n1 = JTBToolkit.makeNodeToken(n2); }
+      { n0 = new NodeChoice(n1, 0); }
+   |
+      n4="false" { n3 = JTBToolkit.makeNodeToken(n4); }
+      { n0 = new NodeChoice(n3, 1); }
+   )
+   
+   { return new BooleanLiteral(n0); }
+}
+
+NullLiteral NullLiteral() :
+{
+   NodeToken n0;
+   Token n1;
+
+   
+}
+{
+   n1="null" { n0 = JTBToolkit.makeNodeToken(n1); }
+   
+   { return new NullLiteral(n0); }
+}
+
+Annotation Annotation() :
+{
+   NodeChoice n0;
+   NormalAnnotation n1;
+   SingleMemberAnnotation n2;
+   MarkerAnnotation n3;
+
+   
+}
+{
+   (
+      LOOKAHEAD("@" Name() "(" ( <IDENTIFIER> "=" | ")" ))
+      n1=NormalAnnotation()
+      { n0 = new NodeChoice(n1, 0); }
+   |
+      LOOKAHEAD("@" Name() "(")
+      n2=SingleMemberAnnotation()
+      { n0 = new NodeChoice(n2, 1); }
+   |
+      n3=MarkerAnnotation()
+      { n0 = new NodeChoice(n3, 2); }
+   )
+   
+   { return new Annotation(n0); }
+}
+
+NormalAnnotation NormalAnnotation() :
+{
+   NodeToken n0;
+   Token n1;
+   Name n2;
+   NodeToken n3;
+   Token n4;
+   NodeOptional n5 = new NodeOptional();
+   MemberValuePairs n6;
+   NodeToken n7;
+   Token n8;
+
+   
+}
+{
+   n1="@" { n0 = JTBToolkit.makeNodeToken(n1); }
+   n2=Name()
+   n4="(" { n3 = JTBToolkit.makeNodeToken(n4); }
+   (
+      n6=MemberValuePairs()
+      { n5.addNode(n6); }
+   )?
+   n8=")" { n7 = JTBToolkit.makeNodeToken(n8); }
+   
+   { return new NormalAnnotation(n0,n2,n3,n5,n7); }
+}
+
+MarkerAnnotation MarkerAnnotation() :
+{
+   NodeToken n0;
+   Token n1;
+   Name n2;
+
+   
+}
+{
+   n1="@" { n0 = JTBToolkit.makeNodeToken(n1); }
+   n2=Name()
+   
+   { return new MarkerAnnotation(n0,n2); }
+}
+
+SingleMemberAnnotation SingleMemberAnnotation() :
+{
+   NodeToken n0;
+   Token n1;
+   Name n2;
+   NodeToken n3;
+   Token n4;
+   MemberValue n5;
+   NodeToken n6;
+   Token n7;
+
+   
+}
+{
+   n1="@" { n0 = JTBToolkit.makeNodeToken(n1); }
+   n2=Name()
+   n4="(" { n3 = JTBToolkit.makeNodeToken(n4); }
+   n5=MemberValue()
+   n7=")" { n6 = JTBToolkit.makeNodeToken(n7); }
+   
+   { return new SingleMemberAnnotation(n0,n2,n3,n5,n6); }
+}
+
+MemberValuePairs MemberValuePairs() :
+{
+   MemberValuePair n0;
+   NodeListOptional n1 = new NodeListOptional();
+   NodeSequence n2;
+   NodeToken n3;
+   Token n4;
+   MemberValuePair n5;
+
+   
+}
+{
+   n0=MemberValuePair()
+   (
+      { n2 = new NodeSequence(2); }
+      n4="," { n3 = JTBToolkit.makeNodeToken(n4); }
+      { n2.addNode(n3); }
+      n5=MemberValuePair()
+      { n2.addNode(n5); }
+      { n1.addNode(n2); }
+   )*
+   { n1.nodes.trimToSize(); }
+   
+   { return new MemberValuePairs(n0,n1); }
+}
+
+MemberValuePair MemberValuePair() :
+{
+   NodeToken n0;
+   Token n1;
+   NodeToken n2;
+   Token n3;
+   MemberValue n4;
+
+   
+}
+{
+   n1=<IDENTIFIER> { n0 = JTBToolkit.makeNodeToken(n1); }
+   n3="=" { n2 = JTBToolkit.makeNodeToken(n3); }
+   n4=MemberValue()
+   
+   { return new MemberValuePair(n0,n2,n4); }
+}
+
+MemberValue MemberValue() :
+{
+   NodeChoice n0;
+   Annotation n1;
+   MemberValueArrayInitializer n2;
+   Literal n3;
+
+   
+}
+{
+   (
+      n1=Annotation()
+      { n0 = new NodeChoice(n1, 0); }
+   |
+      n2=MemberValueArrayInitializer()
+      { n0 = new NodeChoice(n2, 1); }
+   |
+      n3=Literal()
+      { n0 = new NodeChoice(n3, 2); }
+   )
+   
+   { return new MemberValue(n0); }
+}
+
+MemberValueArrayInitializer MemberValueArrayInitializer() :
+{
+   NodeToken n0;
+   Token n1;
+   MemberValue n2;
+   NodeListOptional n3 = new NodeListOptional();
+   NodeSequence n4;
+   NodeToken n5;
+   Token n6;
+   MemberValue n7;
+   NodeOptional n8 = new NodeOptional();
+   NodeToken n9;
+   Token n10;
+   NodeToken n11;
+   Token n12;
+
+   
+}
+{
+   n1="{" { n0 = JTBToolkit.makeNodeToken(n1); }
+   n2=MemberValue()
+   (
+      LOOKAHEAD(2)
+      { n4 = new NodeSequence(2); }
+      n6="," { n5 = JTBToolkit.makeNodeToken(n6); }
+      { n4.addNode(n5); }
+      n7=MemberValue()
+      { n4.addNode(n7); }
+      { n3.addNode(n4); }
+   )*
+   { n3.nodes.trimToSize(); }
+   (
+      n10="," { n9 = JTBToolkit.makeNodeToken(n10); }
+      { n8.addNode(n9); }
+   )?
+   n12="}" { n11 = JTBToolkit.makeNodeToken(n12); }
+   
+   { return new MemberValueArrayInitializer(n0,n2,n3,n8,n11); }
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Annotation.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Annotation.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Annotation.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,35 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> NormalAnnotation()
+ *       | SingleMemberAnnotation()
+ *       | MarkerAnnotation()
+ */
+public class Annotation implements Node {
+   public NodeChoice f0;
+
+   public Annotation(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/AnnotationsUnit.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/AnnotationsUnit.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/AnnotationsUnit.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,33 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> [ Annotation() ( "," Annotation() )* ]
+ */
+public class AnnotationsUnit implements Node {
+   public NodeOptional f0;
+
+   public AnnotationsUnit(NodeOptional n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/BooleanLiteral.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/BooleanLiteral.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/BooleanLiteral.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,34 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "true"
+ *       | "false"
+ */
+public class BooleanLiteral implements Node {
+   public NodeChoice f0;
+
+   public BooleanLiteral(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Literal.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Literal.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Literal.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,38 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> <INTEGER_LITERAL>
+ *       | <FLOATING_POINT_LITERAL>
+ *       | <CHARACTER_LITERAL>
+ *       | <STRING_LITERAL>
+ *       | BooleanLiteral()
+ *       | NullLiteral()
+ */
+public class Literal implements Node {
+   public NodeChoice f0;
+
+   public Literal(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MarkerAnnotation.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MarkerAnnotation.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MarkerAnnotation.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,41 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "@"
+ * f1 -> Name()
+ */
+public class MarkerAnnotation implements Node {
+   public NodeToken f0;
+   public Name f1;
+
+   public MarkerAnnotation(NodeToken n0, Name n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public MarkerAnnotation(Name n0) {
+      f0 = new NodeToken("@");
+      f1 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValue.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValue.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValue.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,35 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> Annotation()
+ *       | MemberValueArrayInitializer()
+ *       | Literal()
+ */
+public class MemberValue implements Node {
+   public NodeChoice f0;
+
+   public MemberValue(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValueArrayInitializer.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValueArrayInitializer.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValueArrayInitializer.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,53 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "{"
+ * f1 -> MemberValue()
+ * f2 -> ( "," MemberValue() )*
+ * f3 -> [ "," ]
+ * f4 -> "}"
+ */
+public class MemberValueArrayInitializer implements Node {
+   public NodeToken f0;
+   public MemberValue f1;
+   public NodeListOptional f2;
+   public NodeOptional f3;
+   public NodeToken f4;
+
+   public MemberValueArrayInitializer(NodeToken n0, MemberValue n1, NodeListOptional n2, NodeOptional n3, NodeToken n4) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+   }
+
+   public MemberValueArrayInitializer(MemberValue n0, NodeListOptional n1, NodeOptional n2) {
+      f0 = new NodeToken("{");
+      f1 = n0;
+      f2 = n1;
+      f3 = n2;
+      f4 = new NodeToken("}");
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePair.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePair.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePair.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> <IDENTIFIER>
+ * f1 -> "="
+ * f2 -> MemberValue()
+ */
+public class MemberValuePair implements Node {
+   public NodeToken f0;
+   public NodeToken f1;
+   public MemberValue f2;
+
+   public MemberValuePair(NodeToken n0, NodeToken n1, MemberValue n2) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+   }
+
+   public MemberValuePair(NodeToken n0, MemberValue n1) {
+      f0 = n0;
+      f1 = new NodeToken("=");
+      f2 = n1;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePairs.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePairs.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/MemberValuePairs.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> MemberValuePair()
+ * f1 -> ( "," MemberValuePair() )*
+ */
+public class MemberValuePairs implements Node {
+   public MemberValuePair f0;
+   public NodeListOptional f1;
+
+   public MemberValuePairs(MemberValuePair n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Name.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Name.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Name.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,36 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> <IDENTIFIER>
+ * f1 -> ( "." <IDENTIFIER> )*
+ */
+public class Name implements Node {
+   public NodeToken f0;
+   public NodeListOptional f1;
+
+   public Name(NodeToken n0, NodeListOptional n1) {
+      f0 = n0;
+      f1 = n1;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Node.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Node.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/Node.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,18 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * The interface which all syntax tree classes must implement.
+ */
+public interface Node extends java.io.Serializable {
+   public void accept(Visitor v);
+   public <R,A> R accept(GJVisitor<R,A> v, A argu);
+   public <R> R accept(GJNoArguVisitor<R> v);
+   public <A> void accept(GJVoidVisitor<A> v, A argu);
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeChoice.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeChoice.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeChoice.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,38 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Represents a grammar choice, e.g. ( A | B )
+ */
+public class NodeChoice implements Node {
+   public NodeChoice(Node node) {
+      this(node, -1);
+   }
+
+   public NodeChoice(Node node, int whichChoice) {
+      choice = node;
+      which = whichChoice;
+   }
+
+   public void accept(Visitor v) {
+      choice.accept(v);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return choice.accept(v,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return choice.accept(v);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      choice.accept(v,argu);
+   }
+
+   public Node choice;
+   public int which;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeList.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeList.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeList.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,45 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+import java.util.*;
+
+/**
+ * Represents a grammar list, e.g. ( A )+
+ */
+public class NodeList implements NodeListInterface {
+   public NodeList() {
+      nodes = new Vector<Node>();
+   }
+
+   public NodeList(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public int size()             { return nodes.size(); }
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListInterface.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListInterface.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListInterface.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,24 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * The interface which NodeList, NodeListOptional, and NodeSequence
+ * implement.
+ */
+public interface NodeListInterface extends Node {
+   public void addNode(Node n);
+   public Node elementAt(int i);
+   public java.util.Enumeration<Node> elements();
+   public int size();
+
+   public void accept(Visitor v);
+   public <R,A> R accept(GJVisitor<R,A> v, A argu);
+   public <R> R accept(GJNoArguVisitor<R> v);
+   public <A> void accept(GJVoidVisitor<A> v, A argu);
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListOptional.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListOptional.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeListOptional.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,46 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+import java.util.*;
+
+/**
+ * Represents an optional grammar list, e.g. ( A )*
+ */
+public class NodeListOptional implements NodeListInterface {
+   public NodeListOptional() {
+      nodes = new Vector<Node>();
+   }
+
+   public NodeListOptional(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public int size()             { return nodes.size(); }
+   public boolean present()      { return nodes.size() != 0; }
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeOptional.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeOptional.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeOptional.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,43 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Represents an grammar optional node, e.g. ( A )? or [ A ]
+ */
+public class NodeOptional implements Node {
+   public NodeOptional() {
+      node = null;
+   }
+
+   public NodeOptional(Node n) {
+      addNode(n);
+   }
+
+   public void addNode(Node n)  {
+      if ( node != null)                // Oh oh!
+         throw new Error("Attempt to set optional node twice");
+
+      node = n;
+   }
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+   public boolean present()   { return node != null; }
+
+   public Node node;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeSequence.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeSequence.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeSequence.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,46 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+import java.util.*;
+
+/**
+ * Represents a sequence of nodes nested within a choice, list,
+ * optional list, or optional, e.g. ( A B )+ or [ C D E ]
+ */
+public class NodeSequence implements NodeListInterface {
+   public NodeSequence(int n) {
+      nodes = new Vector<Node>(n);
+   }
+
+   public NodeSequence(Node firstNode) {
+      nodes = new Vector<Node>();
+      addNode(firstNode);
+   }
+
+   public void addNode(Node n) {
+      nodes.addElement(n);
+   }
+
+   public Node elementAt(int i)  { return nodes.elementAt(i); }
+   public Enumeration<Node> elements() { return nodes.elements(); }
+   public int size()             { return nodes.size(); }
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public Vector<Node> nodes;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeToken.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeToken.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NodeToken.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,88 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+import java.util.*;
+/**
+ * Represents a single token in the grammar.  If the "-tk" option
+ * is used, also contains a Vector of preceding special tokens.
+ */
+public class NodeToken implements Node {
+   public NodeToken(String s) {
+      this(s, -1, -1, -1, -1, -1);    }
+
+   public NodeToken(String s, int kind, int beginLine, int beginColumn, int endLine, int endColumn) {
+      tokenImage = s;
+      specialTokens = null;
+      this.kind = kind;
+      this.beginLine = beginLine;
+      this.beginColumn = beginColumn;
+      this.endLine = endLine;
+      this.endColumn = endColumn;
+   }
+
+   public NodeToken getSpecialAt(int i) {
+      if ( specialTokens == null )
+         throw new java.util.NoSuchElementException("No specials in token");
+      return specialTokens.elementAt(i);
+   }
+
+   public int numSpecials() {
+      if ( specialTokens == null ) return 0;
+      return specialTokens.size();
+   }
+
+   public void addSpecial(NodeToken s) {
+      if ( specialTokens == null ) specialTokens = new Vector<NodeToken>();
+      specialTokens.addElement(s);
+   }
+
+   public void trimSpecials() {
+      if ( specialTokens == null ) return;
+      specialTokens.trimToSize();
+   }
+
+   public String toString()     { return tokenImage; }
+
+   public String withSpecials() {
+      if ( specialTokens == null )
+          return tokenImage;
+
+       StringBuffer buf = new StringBuffer();
+
+       for ( Enumeration<NodeToken> e = specialTokens.elements(); e.hasMoreElements(); )
+          buf.append(e.nextElement().toString());
+
+       buf.append(tokenImage);
+       return buf.toString();
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+
+   public String tokenImage;
+
+   // Stores a list of NodeTokens
+   public Vector<NodeToken> specialTokens;
+
+   // -1 for these ints means no position info is available.
+   public int beginLine, beginColumn, endLine, endColumn;
+
+   // Equal to the JavaCC token "kind" integer.
+   // -1 if not available.
+   public int kind;
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NormalAnnotation.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NormalAnnotation.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NormalAnnotation.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,53 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "@"
+ * f1 -> Name()
+ * f2 -> "("
+ * f3 -> [ MemberValuePairs() ]
+ * f4 -> ")"
+ */
+public class NormalAnnotation implements Node {
+   public NodeToken f0;
+   public Name f1;
+   public NodeToken f2;
+   public NodeOptional f3;
+   public NodeToken f4;
+
+   public NormalAnnotation(NodeToken n0, Name n1, NodeToken n2, NodeOptional n3, NodeToken n4) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+   }
+
+   public NormalAnnotation(Name n0, NodeOptional n1) {
+      f0 = new NodeToken("@");
+      f1 = n0;
+      f2 = new NodeToken("(");
+      f3 = n1;
+      f4 = new NodeToken(")");
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NullLiteral.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NullLiteral.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/NullLiteral.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,37 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "null"
+ */
+public class NullLiteral implements Node {
+   public NodeToken f0;
+
+   public NullLiteral(NodeToken n0) {
+      f0 = n0;
+   }
+
+   public NullLiteral() {
+      f0 = new NodeToken("null");
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/PrimitiveType.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/PrimitiveType.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/PrimitiveType.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,40 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "boolean"
+ *       | "char"
+ *       | "byte"
+ *       | "short"
+ *       | "int"
+ *       | "long"
+ *       | "float"
+ *       | "double"
+ */
+public class PrimitiveType implements Node {
+   public NodeChoice f0;
+
+   public PrimitiveType(NodeChoice n0) {
+      f0 = n0;
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/SingleMemberAnnotation.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/SingleMemberAnnotation.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/syntaxtree/SingleMemberAnnotation.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,53 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.syntaxtree;
+
+import org.jboss.seam.remoting.annotationparser.visitor.*;
+
+/**
+ * Grammar production:
+ * f0 -> "@"
+ * f1 -> Name()
+ * f2 -> "("
+ * f3 -> MemberValue()
+ * f4 -> ")"
+ */
+public class SingleMemberAnnotation implements Node {
+   public NodeToken f0;
+   public Name f1;
+   public NodeToken f2;
+   public MemberValue f3;
+   public NodeToken f4;
+
+   public SingleMemberAnnotation(NodeToken n0, Name n1, NodeToken n2, MemberValue n3, NodeToken n4) {
+      f0 = n0;
+      f1 = n1;
+      f2 = n2;
+      f3 = n3;
+      f4 = n4;
+   }
+
+   public SingleMemberAnnotation(Name n0, MemberValue n1) {
+      f0 = new NodeToken("@");
+      f1 = n0;
+      f2 = new NodeToken("(");
+      f3 = n1;
+      f4 = new NodeToken(")");
+   }
+
+   public void accept(Visitor v) {
+      v.visit(this);
+   }
+   public <R,A> R accept(GJVisitor<R,A> v, A argu) {
+      return v.visit(this,argu);
+   }
+   public <R> R accept(GJNoArguVisitor<R> v) {
+      return v.visit(this);
+   }
+   public <A> void accept(GJVoidVisitor<A> v, A argu) {
+      v.visit(this,argu);
+   }
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/DepthFirstVisitor.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/DepthFirstVisitor.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/DepthFirstVisitor.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,193 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class DepthFirstVisitor implements Visitor {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public void visit(NodeList n) {
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+         e.nextElement().accept(this);
+   }
+
+   public void visit(NodeListOptional n) {
+      if ( n.present() )
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+            e.nextElement().accept(this);
+   }
+
+   public void visit(NodeOptional n) {
+      if ( n.present() )
+         n.node.accept(this);
+   }
+
+   public void visit(NodeSequence n) {
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); )
+         e.nextElement().accept(this);
+   }
+
+   public void visit(NodeToken n) { }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public void visit(AnnotationsUnit n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public void visit(PrimitiveType n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public void visit(Name n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public void visit(Literal n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public void visit(BooleanLiteral n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> "null"
+    */
+   public void visit(NullLiteral n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public void visit(Annotation n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public void visit(NormalAnnotation n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public void visit(MarkerAnnotation n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public void visit(SingleMemberAnnotation n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+   }
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public void visit(MemberValuePairs n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public void visit(MemberValuePair n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+   }
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public void visit(MemberValue n) {
+      n.f0.accept(this);
+   }
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public void visit(MemberValueArrayInitializer n) {
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+   }
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJDepthFirst.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJDepthFirst.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJDepthFirst.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,241 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJDepthFirst<R,A> implements GJVisitor<R,A> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public R visit(NodeList n, A argu) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeListOptional n, A argu) {
+      if ( n.present() ) {
+         R _ret=null;
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this,argu);
+            _count++;
+         }
+         return _ret;
+      }
+      else
+         return null;
+   }
+
+   public R visit(NodeOptional n, A argu) {
+      if ( n.present() )
+         return n.node.accept(this,argu);
+      else
+         return null;
+   }
+
+   public R visit(NodeSequence n, A argu) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeToken n, A argu) { return null; }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public R visit(AnnotationsUnit n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public R visit(PrimitiveType n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public R visit(Name n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public R visit(Literal n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public R visit(BooleanLiteral n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "null"
+    */
+   public R visit(NullLiteral n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public R visit(Annotation n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public R visit(NormalAnnotation n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public R visit(MarkerAnnotation n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public R visit(SingleMemberAnnotation n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public R visit(MemberValuePairs n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public R visit(MemberValuePair n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public R visit(MemberValue n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public R visit(MemberValueArrayInitializer n, A argu) {
+      R _ret=null;
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+      return _ret;
+   }
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguDepthFirst.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguDepthFirst.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguDepthFirst.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,241 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJNoArguDepthFirst<R> implements GJNoArguVisitor<R> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public R visit(NodeList n) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeListOptional n) {
+      if ( n.present() ) {
+         R _ret=null;
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this);
+            _count++;
+         }
+         return _ret;
+      }
+      else
+         return null;
+   }
+
+   public R visit(NodeOptional n) {
+      if ( n.present() )
+         return n.node.accept(this);
+      else
+         return null;
+   }
+
+   public R visit(NodeSequence n) {
+      R _ret=null;
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this);
+         _count++;
+      }
+      return _ret;
+   }
+
+   public R visit(NodeToken n) { return null; }
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public R visit(AnnotationsUnit n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public R visit(PrimitiveType n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public R visit(Name n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public R visit(Literal n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public R visit(BooleanLiteral n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "null"
+    */
+   public R visit(NullLiteral n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public R visit(Annotation n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public R visit(NormalAnnotation n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public R visit(MarkerAnnotation n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public R visit(SingleMemberAnnotation n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public R visit(MemberValuePairs n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public R visit(MemberValuePair n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public R visit(MemberValue n) {
+      R _ret=null;
+      n.f0.accept(this);
+      return _ret;
+   }
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public R visit(MemberValueArrayInitializer n) {
+      R _ret=null;
+      n.f0.accept(this);
+      n.f1.accept(this);
+      n.f2.accept(this);
+      n.f3.accept(this);
+      n.f4.accept(this);
+      return _ret;
+   }
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguVisitor.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguVisitor.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJNoArguVisitor.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,134 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * All GJ visitors with no argument must implement this interface.
+ */
+
+public interface GJNoArguVisitor<R> {
+
+   //
+   // GJ Auto class visitors with no argument
+   //
+
+   public R visit(NodeList n);
+   public R visit(NodeListOptional n);
+   public R visit(NodeOptional n);
+   public R visit(NodeSequence n);
+   public R visit(NodeToken n);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public R visit(AnnotationsUnit n);
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public R visit(PrimitiveType n);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public R visit(Name n);
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public R visit(Literal n);
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public R visit(BooleanLiteral n);
+
+   /**
+    * f0 -> "null"
+    */
+   public R visit(NullLiteral n);
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public R visit(Annotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public R visit(NormalAnnotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public R visit(MarkerAnnotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public R visit(SingleMemberAnnotation n);
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public R visit(MemberValuePairs n);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public R visit(MemberValuePair n);
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public R visit(MemberValue n);
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public R visit(MemberValueArrayInitializer n);
+
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVisitor.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVisitor.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVisitor.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,133 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * All GJ visitors must implement this interface.
+ */
+
+public interface GJVisitor<R,A> {
+
+   //
+   // GJ Auto class visitors
+   //
+
+   public R visit(NodeList n, A argu);
+   public R visit(NodeListOptional n, A argu);
+   public R visit(NodeOptional n, A argu);
+   public R visit(NodeSequence n, A argu);
+   public R visit(NodeToken n, A argu);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public R visit(AnnotationsUnit n, A argu);
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public R visit(PrimitiveType n, A argu);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public R visit(Name n, A argu);
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public R visit(Literal n, A argu);
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public R visit(BooleanLiteral n, A argu);
+
+   /**
+    * f0 -> "null"
+    */
+   public R visit(NullLiteral n, A argu);
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public R visit(Annotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public R visit(NormalAnnotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public R visit(MarkerAnnotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public R visit(SingleMemberAnnotation n, A argu);
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public R visit(MemberValuePairs n, A argu);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public R visit(MemberValuePair n, A argu);
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public R visit(MemberValue n, A argu);
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public R visit(MemberValueArrayInitializer n, A argu);
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidDepthFirst.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidDepthFirst.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidDepthFirst.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,203 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * Provides default methods which visit each node in the tree in depth-first
+ * order.  Your visitors may extend this class.
+ */
+public class GJVoidDepthFirst<A> implements GJVoidVisitor<A> {
+   //
+   // Auto class visitors--probably don't need to be overridden.
+   //
+   public void visit(NodeList n, A argu) {
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+   }
+
+   public void visit(NodeListOptional n, A argu) {
+      if ( n.present() ) {
+         int _count=0;
+         for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+            e.nextElement().accept(this,argu);
+            _count++;
+         }
+      }
+   }
+
+   public void visit(NodeOptional n, A argu) {
+      if ( n.present() )
+         n.node.accept(this,argu);
+   }
+
+   public void visit(NodeSequence n, A argu) {
+      int _count=0;
+      for ( Enumeration<Node> e = n.elements(); e.hasMoreElements(); ) {
+         e.nextElement().accept(this,argu);
+         _count++;
+      }
+   }
+
+   public void visit(NodeToken n, A argu) {}
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public void visit(AnnotationsUnit n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public void visit(PrimitiveType n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public void visit(Name n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public void visit(Literal n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public void visit(BooleanLiteral n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "null"
+    */
+   public void visit(NullLiteral n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public void visit(Annotation n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public void visit(NormalAnnotation n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public void visit(MarkerAnnotation n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public void visit(SingleMemberAnnotation n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+   }
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public void visit(MemberValuePairs n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+   }
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public void visit(MemberValuePair n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+   }
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public void visit(MemberValue n, A argu) {
+      n.f0.accept(this, argu);
+   }
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public void visit(MemberValueArrayInitializer n, A argu) {
+      n.f0.accept(this, argu);
+      n.f1.accept(this, argu);
+      n.f2.accept(this, argu);
+      n.f3.accept(this, argu);
+      n.f4.accept(this, argu);
+   }
+
+}

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidVisitor.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidVisitor.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/GJVoidVisitor.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,134 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * All GJ void visitors must implement this interface.
+ */
+
+public interface GJVoidVisitor<A> {
+
+   //
+   // GJ void Auto class visitors
+   //
+
+   public void visit(NodeList n, A argu);
+   public void visit(NodeListOptional n, A argu);
+   public void visit(NodeOptional n, A argu);
+   public void visit(NodeSequence n, A argu);
+   public void visit(NodeToken n, A argu);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public void visit(AnnotationsUnit n, A argu);
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public void visit(PrimitiveType n, A argu);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public void visit(Name n, A argu);
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public void visit(Literal n, A argu);
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public void visit(BooleanLiteral n, A argu);
+
+   /**
+    * f0 -> "null"
+    */
+   public void visit(NullLiteral n, A argu);
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public void visit(Annotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public void visit(NormalAnnotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public void visit(MarkerAnnotation n, A argu);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public void visit(SingleMemberAnnotation n, A argu);
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public void visit(MemberValuePairs n, A argu);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public void visit(MemberValuePair n, A argu);
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public void visit(MemberValue n, A argu);
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public void visit(MemberValueArrayInitializer n, A argu);
+
+}
+

Added: modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/Visitor.java
===================================================================
--- modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/Visitor.java	                        (rev 0)
+++ modules/trunk/remoting/src/main/java/org/jboss/seam/remoting/annotationparser/visitor/Visitor.java	2009-12-01 00:35:25 UTC (rev 11705)
@@ -0,0 +1,134 @@
+//
+// Generated by JTB 1.3.2
+//
+
+package org.jboss.seam.remoting.annotationparser.visitor;
+import org.jboss.seam.remoting.annotationparser.syntaxtree.*;
+import java.util.*;
+
+/**
+ * All void visitors must implement this interface.
+ */
+
+public interface Visitor {
+
+   //
+   // void Auto class visitors
+   //
+
+   public void visit(NodeList n);
+   public void visit(NodeListOptional n);
+   public void visit(NodeOptional n);
+   public void visit(NodeSequence n);
+   public void visit(NodeToken n);
+
+   //
+   // User-generated visitor methods below
+   //
+
+   /**
+    * f0 -> [ Annotation() ( "," Annotation() )* ]
+    */
+   public void visit(AnnotationsUnit n);
+
+   /**
+    * f0 -> "boolean"
+    *       | "char"
+    *       | "byte"
+    *       | "short"
+    *       | "int"
+    *       | "long"
+    *       | "float"
+    *       | "double"
+    */
+   public void visit(PrimitiveType n);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> ( "." <IDENTIFIER> )*
+    */
+   public void visit(Name n);
+
+   /**
+    * f0 -> <INTEGER_LITERAL>
+    *       | <FLOATING_POINT_LITERAL>
+    *       | <CHARACTER_LITERAL>
+    *       | <STRING_LITERAL>
+    *       | BooleanLiteral()
+    *       | NullLiteral()
+    */
+   public void visit(Literal n);
+
+   /**
+    * f0 -> "true"
+    *       | "false"
+    */
+   public void visit(BooleanLiteral n);
+
+   /**
+    * f0 -> "null"
+    */
+   public void visit(NullLiteral n);
+
+   /**
+    * f0 -> NormalAnnotation()
+    *       | SingleMemberAnnotation()
+    *       | MarkerAnnotation()
+    */
+   public void visit(Annotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> [ MemberValuePairs() ]
+    * f4 -> ")"
+    */
+   public void visit(NormalAnnotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    */
+   public void visit(MarkerAnnotation n);
+
+   /**
+    * f0 -> "@"
+    * f1 -> Name()
+    * f2 -> "("
+    * f3 -> MemberValue()
+    * f4 -> ")"
+    */
+   public void visit(SingleMemberAnnotation n);
+
+   /**
+    * f0 -> MemberValuePair()
+    * f1 -> ( "," MemberValuePair() )*
+    */
+   public void visit(MemberValuePairs n);
+
+   /**
+    * f0 -> <IDENTIFIER>
+    * f1 -> "="
+    * f2 -> MemberValue()
+    */
+   public void visit(MemberValuePair n);
+
+   /**
+    * f0 -> Annotation()
+    *       | MemberValueArrayInitializer()
+    *       | Literal()
+    */
+   public void visit(MemberValue n);
+
+   /**
+    * f0 -> "{"
+    * f1 -> MemberValue()
+    * f2 -> ( "," MemberValue() )*
+    * f3 -> [ "," ]
+    * f4 -> "}"
+    */
+   public void visit(MemberValueArrayInitializer n);
+
+}
+

Modified: modules/trunk/remoting/src/main/javacc/AnnotationParser.jj
===================================================================
--- modules/trunk/remoting/src/main/javacc/AnnotationParser.jj	2009-11-30 14:23:32 UTC (rev 11704)
+++ modules/trunk/remoting/src/main/javacc/AnnotationParser.jj	2009-12-01 00:35:25 UTC (rev 11705)
@@ -314,25 +314,7 @@
 | < ELLIPSIS: "..." >
 }
 
-/* >'s need special attention due to generics syntax. */
-TOKEN :
-{
-  < RUNSIGNEDSHIFT: ">>>" >
-  {
-     matchedToken.kind = GT;
-     ((Token.GTToken)matchedToken).realKind = RUNSIGNEDSHIFT;
-     input_stream.backup(2);
-  }
-| < RSIGNEDSHIFT: ">>" >
-  {
-     matchedToken.kind = GT;
-     ((Token.GTToken)matchedToken).realKind = RSIGNEDSHIFT;
-     input_stream.backup(1);
-  }
-| < GT: ">" >
-}
 
-
 /***********************************
  * ANNOTATIONS GRAMMAR STARTS HERE *
  ***********************************/
@@ -344,7 +326,7 @@
 void AnnotationsUnit():
 {}
 {
-  "(" [ Annotation() ( "," Annotation() )* ] ")"
+  [ Annotation() ( "," Annotation() )* ]
 }
 
 void PrimitiveType():



More information about the seam-commits mailing list