Revision: 896
          http://jwebunit.svn.sourceforge.net/jwebunit/?rev=896&view=rev
Author:   henryju
Date:     2011-03-14 10:52:09 +0000 (Mon, 14 Mar 2011)

Log Message:
-----------
Improved JavaCC parsers to handle annotations (useful for @Deprecated).

Modified Paths:
--------------
    trunk/jwebunit-code-generator/src/main/javacc/JWebUnit.jj
    trunk/jwebunit-code-generator/src/main/javacc/WebTestCase.jj

Modified: trunk/jwebunit-code-generator/src/main/javacc/JWebUnit.jj
===================================================================
--- trunk/jwebunit-code-generator/src/main/javacc/JWebUnit.jj   2011-03-14 
09:22:38 UTC (rev 895)
+++ trunk/jwebunit-code-generator/src/main/javacc/JWebUnit.jj   2011-03-14 
10:52:09 UTC (rev 896)
@@ -533,9 +533,10 @@
  * better error messages.
  */
 
-int Modifiers():
+Object[] Modifiers():
 {
    int modifiers = 0;
+   String annotations = "";
 }
 {
  (
@@ -563,12 +564,12 @@
   |
    "strictfp" { modifiers |= ModifierSet.STRICTFP; }
   |
-   Annotation()
+   annotations = Annotation()
   )
  )*
 
  {
-    return modifiers;
+    return new Object[] {modifiers, annotations};
  }
 }
 
@@ -577,12 +578,14 @@
  */
 void TypeDeclaration(StringBuffer sb):
 {
+   Object[] modifiersAndAnnot;
    int modifiers;
 }
 {
   ";"
 |
-  modifiers = Modifiers()
+  modifiersAndAnnot=Modifiers()
+  {modifiers = (Integer) modifiersAndAnnot[0];}
   (
      ClassOrInterfaceDeclaration(modifiers, sb)
    |
@@ -713,8 +716,10 @@
 void ClassOrInterfaceBodyDeclaration(boolean isInterface, StringBuffer sb):
 {
    boolean isNestedInterface = false;
+   Object[] modifiersAndAnnot;
    int modifiers;
    String comment;
+   String annotations;
 }
 {
   LOOKAHEAD(2)
@@ -725,8 +730,12 @@
   }
 |
   {comment=getToken(1).specialToken!=null?getToken(1).specialToken.image:"";}
-  modifiers = Modifiers() // Just get all the modifiers out of the way. If you 
want to do
+  modifiersAndAnnot = Modifiers() // Just get all the modifiers out of the 
way. If you want to do
               // more checks, pass the modifiers down to the member
+  {
+    modifiers = (Integer) modifiersAndAnnot[0];
+    annotations = (String) modifiersAndAnnot[1];
+  }
   (
       ClassOrInterfaceDeclaration(modifiers, sb)
     |
@@ -738,7 +747,7 @@
       LOOKAHEAD( Type() <IDENTIFIER> ( "[" "]" )* ( "," | "=" | ";" ) )
       FieldDeclaration(modifiers)
     |
-      MethodDeclaration(modifiers, sb, comment)
+      MethodDeclaration(modifiers, sb, comment, annotations)
   )
 |
   ";"
@@ -779,7 +788,7 @@
   "{" [ VariableInitializer() ( LOOKAHEAD(2) "," VariableInitializer() )* ] [ 
"," ] "}"
 }
 
-void MethodDeclaration(int modifiers, StringBuffer sb, String comment):
+void MethodDeclaration(int modifiers, StringBuffer sb, String comment, String 
annotations):
 { boolean append;
   String resultType;
   List params;
@@ -789,6 +798,7 @@
   // Modifiers already matched in the caller!
   { append = (modifiers & ModifierSet.PUBLIC) != 0;}
   { if (append && comment!=null) sb.append("    
").append(comment).append("\n");}
+  { if (append && annotations!=null && !"".equals(annotations)) sb.append("    
").append(annotations).append("\n");}
   { if (append) sb.append("    public static ");}
   [ TypeParameters() ]
   isVoid=ResultType(append, sb)
@@ -1504,63 +1514,93 @@
 
 /* Annotation syntax follows. */
 
-void Annotation():
-{}
+String Annotation():
 {
+    StringBuffer sb = new StringBuffer();
+}
+{
    LOOKAHEAD( "@" Name() "(" ( <IDENTIFIER> "=" | ")" ))
-   NormalAnnotation()
+   NormalAnnotation(sb)
  |
    LOOKAHEAD( "@" Name() "(" )
-   SingleMemberAnnotation()
+   SingleMemberAnnotation(sb)
  |
-   MarkerAnnotation()
+   MarkerAnnotation(sb)
+ {return sb.toString();}
 }
 
-void NormalAnnotation():
-{}
+
+void NormalAnnotation(StringBuffer sb):
 {
-   "@" Name() "(" [ MemberValuePairs() ] ")"
+    String name;
+    String member = "";
 }
+{
+   "@" name=Name() "(" [ member=MemberValuePairs() ] ")"
+   {sb.append("@").append(name).append("(").append(member).append(")");}
+}
 
-void MarkerAnnotation():
-{}
+void MarkerAnnotation(StringBuffer sb):
 {
-  "@" Name()
+    String name;
 }
+{
+  "@" name=Name()
+   {sb.append("@").append(name);}
+}
 
-void SingleMemberAnnotation():
-{}
+void SingleMemberAnnotation(StringBuffer sb):
 {
-  "@" Name() "(" MemberValue() ")"
+    String name;
+    String member = "";
 }
+{
+  "@" name=Name() "(" member=MemberValue() ")"
+  {sb.append("@").append(name).append("(").append(member).append(")");}
+}
 
-void MemberValuePairs():
-{}
+String MemberValuePairs():
 {
-   MemberValuePair() ( "," MemberValuePair() )*
+  StringBuffer sb = new StringBuffer();
+  String member;
 }
+{
+   member=MemberValuePair() {sb.append(member);} ( "," 
member=MemberValuePair() {sb.append(", ").append(member);} )*
+   {return sb.toString();}
+}
 
-void MemberValuePair():
-{}
+String MemberValuePair():
 {
-    <IDENTIFIER> "=" MemberValue()
+       Token t;
+       String member;
 }
+{
+    t=<IDENTIFIER> "=" member=MemberValue()
+    {return t.image + "=" + member;}
+}
 
-void MemberValue():
-{}
+String MemberValue():
 {
-   Annotation()
+       String result= "";
+}
+{
+   result=Annotation()
  |
-   MemberValueArrayInitializer()
+   result=MemberValueArrayInitializer()
  |
    ConditionalExpression()
+ {return result;}
 }
 
-void  MemberValueArrayInitializer():
-{}
+String  MemberValueArrayInitializer():
 {
-  "{" MemberValue() ( LOOKAHEAD(2) "," MemberValue() )* [ "," ] "}"
+    StringBuffer sb = new StringBuffer();
+    String member;
 }
+{
+  "{" member=MemberValue() {sb.append("{").append(member);} ( LOOKAHEAD(2) "," 
member=MemberValue() {sb.append(",").append(member);} )* [ "," ] "}" 
{sb.append("}");}
+  {return sb.toString();}
+}
 
 
 /* Annotation Types. */
@@ -1579,10 +1619,12 @@
 
 void AnnotationTypeMemberDeclaration():
 {
+   Object[] modifiersAndAnnot;
    int modifiers;
 }
 {
- modifiers = Modifiers()
+ modifiersAndAnnot = Modifiers()
+ {modifiers = (Integer) modifiersAndAnnot[0];}
  (
    LOOKAHEAD(Type() <IDENTIFIER> "(")
    Type() <IDENTIFIER> "(" ")" [ DefaultValue() ] ";"

Modified: trunk/jwebunit-code-generator/src/main/javacc/WebTestCase.jj
===================================================================
--- trunk/jwebunit-code-generator/src/main/javacc/WebTestCase.jj        
2011-03-14 09:22:38 UTC (rev 895)
+++ trunk/jwebunit-code-generator/src/main/javacc/WebTestCase.jj        
2011-03-14 10:52:09 UTC (rev 896)
@@ -535,9 +535,10 @@
  * better error messages.
  */
 
-int Modifiers():
+Object[] Modifiers():
 {
    int modifiers = 0;
+   String annotations = "";
 }
 {
  (
@@ -565,12 +566,12 @@
   |
    "strictfp" { modifiers |= ModifierSet.STRICTFP; }
   |
-   Annotation()
+   annotations = Annotation()
   )
  )*
 
  {
-    return modifiers;
+    return new Object[] {modifiers, annotations};
  }
 }
 
@@ -579,12 +580,14 @@
  */
 void TypeDeclaration(StringBuffer sb):
 {
+   Object[] modifiersAndAnnot;
    int modifiers;
 }
 {
   ";"
 |
-  modifiers = Modifiers()
+  modifiersAndAnnot=Modifiers()
+  {modifiers = (Integer) modifiersAndAnnot[0];}
   (
      ClassOrInterfaceDeclaration(modifiers, sb)
    |
@@ -735,8 +738,10 @@
 void ClassOrInterfaceBodyDeclaration(boolean isInterface, StringBuffer sb):
 {
    boolean isNestedInterface = false;
+   Object[] modifiersAndAnnot;
    int modifiers;
    String comment;
+   String annotations;
 }
 {
   LOOKAHEAD(2)
@@ -747,8 +752,12 @@
   }
 |
   {comment=getToken(1).specialToken!=null?getToken(1).specialToken.image:"";}
-  modifiers = Modifiers() // Just get all the modifiers out of the way. If you 
want to do
+  modifiersAndAnnot = Modifiers() // Just get all the modifiers out of the 
way. If you want to do
               // more checks, pass the modifiers down to the member
+  {
+    modifiers = (Integer) modifiersAndAnnot[0];
+    annotations = (String) modifiersAndAnnot[1];
+  }
   (
       ClassOrInterfaceDeclaration(modifiers, sb)
     |
@@ -760,7 +769,7 @@
       LOOKAHEAD( Type() <IDENTIFIER> ( "[" "]" )* ( "," | "=" | ";" ) )
       FieldDeclaration(modifiers)
     |
-      MethodDeclaration(modifiers, sb, comment)
+      MethodDeclaration(modifiers, sb, comment, annotations)
   )
 |
   ";"
@@ -801,7 +810,7 @@
   "{" [ VariableInitializer() ( LOOKAHEAD(2) "," VariableInitializer() )* ] [ 
"," ] "}"
 }
 
-void MethodDeclaration(int modifiers, StringBuffer sb, String comment):
+void MethodDeclaration(int modifiers, StringBuffer sb, String comment, String 
annotations):
 { boolean append;
   String resultType;
   List params;
@@ -811,6 +820,7 @@
   // Modifiers already matched in the caller!
   { append = (modifiers & ModifierSet.PUBLIC) != 0;}
   { if (append && comment!=null) sb.append("    
").append(comment).append("\n");}
+  { if (append && annotations!=null && !"".equals(annotations)) sb.append("    
").append(annotations).append("\n");}
   { if (append) sb.append("    public ");}
   [ TypeParameters() ]
   isVoid=ResultType(append, sb)
@@ -1532,63 +1542,93 @@
 
 /* Annotation syntax follows. */
 
-void Annotation():
-{}
+String Annotation():
 {
+    StringBuffer sb = new StringBuffer();
+}
+{
    LOOKAHEAD( "@" Name() "(" ( <IDENTIFIER> "=" | ")" ))
-   NormalAnnotation()
+   NormalAnnotation(sb)
  |
    LOOKAHEAD( "@" Name() "(" )
-   SingleMemberAnnotation()
+   SingleMemberAnnotation(sb)
  |
-   MarkerAnnotation()
+   MarkerAnnotation(sb)
+ {return sb.toString();}
 }
 
-void NormalAnnotation():
-{}
+
+void NormalAnnotation(StringBuffer sb):
 {
-   "@" Name() "(" [ MemberValuePairs() ] ")"
+    String name;
+    String member = "";
 }
+{
+   "@" name=Name() "(" [ member=MemberValuePairs() ] ")"
+   {sb.append("@").append(name).append("(").append(member).append(")");}
+}
 
-void MarkerAnnotation():
-{}
+void MarkerAnnotation(StringBuffer sb):
 {
-  "@" Name()
+    String name;
 }
+{
+  "@" name=Name()
+   {sb.append("@").append(name);}
+}
 
-void SingleMemberAnnotation():
-{}
+void SingleMemberAnnotation(StringBuffer sb):
 {
-  "@" Name() "(" MemberValue() ")"
+    String name;
+    String member = "";
 }
+{
+  "@" name=Name() "(" member=MemberValue() ")"
+  {sb.append("@").append(name).append("(").append(member).append(")");}
+}
 
-void MemberValuePairs():
-{}
+String MemberValuePairs():
 {
-   MemberValuePair() ( "," MemberValuePair() )*
+  StringBuffer sb = new StringBuffer();
+  String member;
 }
+{
+   member=MemberValuePair() {sb.append(member);} ( "," 
member=MemberValuePair() {sb.append(", ").append(member);} )*
+   {return sb.toString();}
+}
 
-void MemberValuePair():
-{}
+String MemberValuePair():
 {
-    <IDENTIFIER> "=" MemberValue()
+       Token t;
+       String member;
 }
+{
+    t=<IDENTIFIER> "=" member=MemberValue()
+    {return t.image + "=" + member;}
+}
 
-void MemberValue():
-{}
+String MemberValue():
 {
-   Annotation()
+       String result= "";
+}
+{
+   result=Annotation()
  |
-   MemberValueArrayInitializer()
+   result=MemberValueArrayInitializer()
  |
    ConditionalExpression()
+ {return result;}
 }
 
-void  MemberValueArrayInitializer():
-{}
+String  MemberValueArrayInitializer():
 {
-  "{" MemberValue() ( LOOKAHEAD(2) "," MemberValue() )* [ "," ] "}"
+    StringBuffer sb = new StringBuffer();
+    String member;
 }
+{
+  "{" member=MemberValue() {sb.append("{").append(member);} ( LOOKAHEAD(2) "," 
member=MemberValue() {sb.append(",").append(member);} )* [ "," ] "}" 
{sb.append("}");}
+  {return sb.toString();}
+}
 
 
 /* Annotation Types. */
@@ -1607,10 +1647,12 @@
 
 void AnnotationTypeMemberDeclaration():
 {
+   Object[] modifiersAndAnnot;
    int modifiers;
 }
 {
- modifiers = Modifiers()
+ modifiersAndAnnot = Modifiers()
+ {modifiers = (Integer) modifiersAndAnnot[0];}
  (
    LOOKAHEAD(Type() <IDENTIFIER> "(")
    Type() <IDENTIFIER> "(" ")" [ DefaultValue() ] ";"


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Colocation vs. Managed Hosting
A question and answer guide to determining the best fit
for your organization - today and in the future.
http://p.sf.net/sfu/internap-sfd2d
_______________________________________________
JWebUnit-development mailing list
JWebUnit-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jwebunit-development

Reply via email to