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