Log Message
QDOX-240: support enum + new creator
Modified Paths
- trunk/qdox/src/grammar/lexer.flex
- trunk/qdox/src/grammar/parser.y
- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/DefaultJavaAnnotationAssembler.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/ElemValueTransformer.java
- trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java
Added Paths
Diff
Modified: trunk/qdox/src/grammar/lexer.flex (1492 => 1493)
--- trunk/qdox/src/grammar/lexer.flex 2012-04-16 19:41:37 UTC (rev 1492)
+++ trunk/qdox/src/grammar/lexer.flex 2012-04-18 19:23:18 UTC (rev 1493)
@@ -166,6 +166,7 @@
"extends" { return Parser.EXTENDS; }
"implements" { return Parser.IMPLEMENTS; }
"super" { return Parser.SUPER; }
+ "new" { return Parser.NEW; }
"[" { nestingDepth++; return Parser.SQUAREOPEN; }
"]" { nestingDepth--; return Parser.SQUARECLOSE; }
@@ -391,10 +392,10 @@
"true" | "false" { return Parser.BOOLEAN_LITERAL; }
"class" { return Parser.CLASS; }
+
+ "new" { return Parser.NEW; }
- {Id} {
- return Parser.IDENTIFIER;
- }
+ {Id} { return Parser.IDENTIFIER; }
"@" { return Parser.AT; }
}
Modified: trunk/qdox/src/grammar/parser.y (1492 => 1493)
--- trunk/qdox/src/grammar/parser.y 2012-04-16 19:41:37 UTC (rev 1492)
+++ trunk/qdox/src/grammar/parser.y 2012-04-18 19:23:18 UTC (rev 1493)
@@ -31,7 +31,7 @@
%token SEMI DOT DOTDOTDOT COMMA STAR PERCENT EQUALS ANNOSTRING ANNOCHAR SLASH PLUS MINUS
%token STAREQUALS SLASHEQUALS PERCENTEQUALS PLUSEQUALS MINUSEQUALS LESSTHAN2EQUALS GREATERTHAN2EQUALS GREATERTHAN3EQUALS AMPERSANDEQUALS CIRCUMFLEXEQUALS VERTLINEEQUALS
%token PACKAGE IMPORT PUBLIC PROTECTED PRIVATE STATIC FINAL ABSTRACT NATIVE STRICTFP SYNCHRONIZED TRANSIENT VOLATILE
-%token CLASS INTERFACE ENUM ANNOINTERFACE THROWS EXTENDS IMPLEMENTS SUPER DEFAULT
+%token CLASS INTERFACE ENUM ANNOINTERFACE THROWS EXTENDS IMPLEMENTS SUPER DEFAULT NEW
%token BRACEOPEN BRACECLOSE SQUAREOPEN SQUARECLOSE PARENOPEN PARENCLOSE
%token LESSTHAN GREATERTHAN LESSEQUALS GREATEREQUALS
%token LESSTHAN2 GREATERTHAN2 GREATERTHAN3
@@ -60,10 +60,10 @@
%type <annoval> _expression_ Literal Annotation ElementValue ElementValueArrayInitializer
%type <annoval> ConditionalExpression ConditionalOrExpression ConditionalAndExpression InclusiveOrExpression ExclusiveOrExpression AndExpression
%type <annoval> EqualityExpression RelationalExpression ShiftExpression AdditiveExpression MultiplicativeExpression
-%type <annoval> UnaryExpression UnaryExpressionNotPlusMinus primary MethodInvocation
+%type <annoval> UnaryExpression UnaryExpressionNotPlusMinus Primary ArrayCreationExpression PrimaryNoNewArray MethodInvocation Creator
%type <annoval> PostfixExpression CastExpression Assignment LeftHandSide AssignmentExpression
%type <ival> Dims Dims_opt
-%type <sval> AnyName TypeDeclSpecifier memberend AssignmentOperator
+%type <sval> QualifiedIdentifier TypeDeclSpecifier memberend AssignmentOperator
%type <type> Type ReferenceType VariableDeclaratorId ClassOrInterfaceType ActualTypeArgument
%%
@@ -86,7 +86,7 @@
{
line = lexer.getLine();
}
- AnyName /* =PackageName */SEMI
+ QualifiedIdentifier /* =PackageName */SEMI
{
builder.addPackage(new PackageDef($3, line));
};
@@ -101,25 +101,25 @@
| StaticImportOnDemandDeclaration;
// 7.5.1 Single-Type-Import Declaration
-SingleTypeImportDeclaration: IMPORT AnyName /* =TypeName */ SEMI
+SingleTypeImportDeclaration: IMPORT QualifiedIdentifier /* =TypeName */ SEMI
{
builder.addImport( $2 );
};
// 7.5.2 Type-Import-on-Demand Declaration
-TypeImportOnDemandDeclaration: IMPORT AnyName /* =PackageOrTypeName */ DOT STAR SEMI
+TypeImportOnDemandDeclaration: IMPORT QualifiedIdentifier /* =PackageOrTypeName */ DOT STAR SEMI
{
builder.addImport( $2 + ".*" );
};
// 7.5.3 Single Static Import Declaration
-SingleStaticImportDeclaration: IMPORT STATIC AnyName /* =TypeName . Identifier */ SEMI
+SingleStaticImportDeclaration: IMPORT STATIC QualifiedIdentifier /* =TypeName . Identifier */ SEMI
{
builder.addImport( "static " + $3);
};
// 7.5.4 Static-Import-on-Demand Declaration
-StaticImportOnDemandDeclaration: IMPORT STATIC AnyName /* =TypeName */ DOT STAR SEMI
+StaticImportOnDemandDeclaration: IMPORT STATIC QualifiedIdentifier /* =TypeName */ DOT STAR SEMI
{
builder.addImport( "static " + $3 + ".*" );
};
@@ -237,7 +237,7 @@
// Actually
// TypeDeclSpecifier: TypeName | ClassOrInterfaceType . Identifier
// TypeName: Identifier | TypeName . Identifier
-TypeDeclSpecifier: AnyName
+TypeDeclSpecifier: QualifiedIdentifier
| ClassOrInterfaceType DOT IDENTIFIER
{
$$ = $1.getName() + '.' + $3;
@@ -312,8 +312,8 @@
// 6.5 Determining the Meaning of a Name
// PackageName | TypeName | ExpressionName | MethodName | PackageOrTypeName | AmbiguousName
-AnyName: IDENTIFIER { $$ = $1; }
- | AnyName DOT IDENTIFIER { $$ = $1 + '.' + $3; };
+QualifiedIdentifier: IDENTIFIER { $$ = $1; }
+ | QualifiedIdentifier DOT IDENTIFIER { $$ = $1 + '.' + $3; };
// 8 Classes
@@ -323,28 +323,28 @@
// 8.4.3 MethodModifier: Annotation public protected private abstract static final synchronized native strictfp
// 8.8.3 ConstructorModifier: Annotation public protected private
-AnyModifiers_opt:
- | AnyModifiers_opt AnyModifier;
+Modifiers_opt:
+ | Modifiers_opt Modifier;
-AnyModifier: Annotation
- | PUBLIC { modifiers.add("public"); }
- | PROTECTED { modifiers.add("protected"); }
- | PRIVATE { modifiers.add("private"); }
- | STATIC { modifiers.add("static"); }
- | FINAL { modifiers.add("final"); }
- | ABSTRACT { modifiers.add("abstract"); }
- | NATIVE { modifiers.add("native"); }
- | SYNCHRONIZED { modifiers.add("synchronized"); }
- | VOLATILE { modifiers.add("volatile"); }
- | TRANSIENT { modifiers.add("transient"); }
- | STRICTFP { modifiers.add("strictfp"); } ;
+Modifier: Annotation
+ | PUBLIC { modifiers.add("public"); }
+ | PROTECTED { modifiers.add("protected"); }
+ | PRIVATE { modifiers.add("private"); }
+ | STATIC { modifiers.add("static"); }
+ | FINAL { modifiers.add("final"); }
+ | ABSTRACT { modifiers.add("abstract"); }
+ | NATIVE { modifiers.add("native"); }
+ | SYNCHRONIZED { modifiers.add("synchronized"); }
+ | VOLATILE { modifiers.add("volatile"); }
+ | TRANSIENT { modifiers.add("transient"); }
+ | STRICTFP { modifiers.add("strictfp"); } ;
// 8.1 Class Declaration
ClassDeclaration: NormalClassDeclaration
| EnumDeclaration;
NormalClassDeclaration:
- AnyModifiers_opt /* =ClassModifiers_opt */ classorinterface /* =CLASS or =INTERFACE */ IDENTIFIER TypeParameters_opt opt_extends Interfaces_opt {
+ Modifiers_opt /* =ClassModifiers_opt */ classorinterface /* =CLASS or =INTERFACE */ IDENTIFIER TypeParameters_opt opt_extends Interfaces_opt {
cls.setLineNumber(line);
cls.getModifiers().addAll(modifiers); modifiers.clear();
cls.setName( $3 );
@@ -358,9 +358,14 @@
};
// 8.1.1 Class Modifiers
-// See: AnyModifiers
+// See: Modifiers
// 8.1.2 Generic Classes and Type Parameters
+NonWildcardTypeArguments: LESSTHAN TypeList GREATERTHAN;
+
+TypeList: ReferenceType
+ | TypeList COMMA ReferenceType;
+
TypeParameters_opt:
| TypeParameters;
@@ -422,34 +427,40 @@
extendslist COMMA ClassOrInterfaceType { cls.getExtends().add($3); };
static_block:
- AnyModifiers_opt CODEBLOCK { lexer.getCodeBody(); modifiers.clear(); };
+ Modifiers_opt CODEBLOCK { lexer.getCodeBody(); modifiers.clear(); };
// ----- FIELD
-FieldDeclaration:
- AnyModifiers_opt Type VariableDeclaratorId {
- fieldType = $2;
- makeField($3, lexer.getCodeBody(), false);
- builder.beginField(fd);
- builder.endField();
- }
- extrafields SEMI {
- modifiers.clear();
- };
+FieldDeclaration: Modifiers_opt Type VariableDeclaratorId
+ {
+ fieldType = $2;
+ makeField($3, lexer.getCodeBody(), false);
+ builder.beginField(fd);
+ builder.endField();
+ }
+ extrafields SEMI
+ {
+ modifiers.clear();
+ };
-extrafields: |
- extrafields COMMA { line = lexer.getLine(); } VariableDeclaratorId {
- makeField($4, lexer.getCodeBody(), false);
- builder.beginField(fd);
- builder.endField();
- };
+extrafields:
+ | extrafields COMMA
+ {
+ line = lexer.getLine();
+ }
+ VariableDeclaratorId
+ {
+ makeField($4, lexer.getCodeBody(), false);
+ builder.beginField(fd);
+ builder.endField();
+ };
-// 8.3 Field Declarations...
+// 8.3 Field Declarations
VariableDeclaratorId: IDENTIFIER Dims_opt
{
$$ = new TypeDef($1,$2);
};
-
+
// 8.4 Method Declarations
MethodDeclaration: MethodHeader memberend /* =MethodBody*/
{
@@ -458,7 +469,7 @@
mth = new MethodDef();
};
-MethodHeader: AnyModifiers_opt TypeParameters Type /* =ResultType */ IDENTIFIER PARENOPEN
+MethodHeader: Modifiers_opt TypeParameters Type /* =ResultType */ IDENTIFIER PARENOPEN
{
builder.beginMethod();
mth.setLineNumber(lexer.getLine());
@@ -471,7 +482,7 @@
{
mth.setDimensions($9);
}
- | AnyModifiers_opt Type /* =ResultType */ IDENTIFIER PARENOPEN
+ | Modifiers_opt Type /* =ResultType */ IDENTIFIER PARENOPEN
{
builder.beginMethod();
mth.setLineNumber(lexer.getLine());
@@ -494,7 +505,7 @@
FormalParameters: FormalParameter
| FormalParameters COMMA FormalParameter;
-FormalParameter: AnyModifiers_opt /* =VariableModifiers_opt */ Type VariableDeclaratorId
+FormalParameter: Modifiers_opt /* =VariableModifiers_opt */ Type VariableDeclaratorId
{
param.setName($3.getName());
param.setType($2);
@@ -505,7 +516,7 @@
param = new FieldDef();
};
-LastFormalParameter: AnyModifiers_opt /* =VariableModifiers_opt */ Type DOTDOTDOT VariableDeclaratorId /* =VariableDeclaratorId */
+LastFormalParameter: Modifiers_opt /* =VariableModifiers_opt */ Type DOTDOTDOT VariableDeclaratorId /* =VariableDeclaratorId */
{
param.setName($4.getName());
param.setType($2);
@@ -542,7 +553,7 @@
};
// 8.8 Constructor Declarations
-constructor: AnyModifiers_opt /* =ConstructorModifiers_opt */ IDENTIFIER PARENOPEN
+constructor: Modifiers_opt /* =ConstructorModifiers_opt */ IDENTIFIER PARENOPEN
{
builder.beginConstructor();
mth.setLineNumber(lexer.getLine());
@@ -556,7 +567,7 @@
builder.endConstructor(mth);
mth = new MethodDef();
}
- | AnyModifiers_opt /* =ConstructorModifiers_opt */ TypeParameters IDENTIFIER PARENOPEN
+ | Modifiers_opt /* =ConstructorModifiers_opt */ TypeParameters IDENTIFIER PARENOPEN
{
builder.beginConstructor();
mth.setLineNumber(lexer.getLine());
@@ -573,7 +584,7 @@
};
// 8.9 Enums
-EnumDeclaration: AnyModifiers_opt /* =ClassModifiers_opt*/ ENUM IDENTIFIER Interfaces_opt
+EnumDeclaration: Modifiers_opt /* =ClassModifiers_opt*/ ENUM IDENTIFIER Interfaces_opt
{
cls.setLineNumber(line);
cls.getModifiers().addAll(modifiers);
@@ -626,7 +637,7 @@
Annotations_opt:
| Annotations_opt Annotation;
-Annotation /* = NormalAnnotation*/: AT AnyName /* =TypeName */
+Annotation /* = NormalAnnotation*/: AT QualifiedIdentifier /* =TypeName */
{
AnnoDef annotation = new AnnoDef( new TypeDef($2) );
annotation.setLineNumber(lexer.getLine());
@@ -686,9 +697,19 @@
| Annotation
| ElementValueArrayInitializer;
+// 10.6. Array Initializers
+VariableInitializer: ArrayInitializer
+ | _expression_
+
+ArrayInitializer: BRACEOPEN VariableInitializers_opt BRACECLOSE
+
+VariableInitializers_opt:
+ | VariableInitializers_opt VariableInitializer
+ | VariableInitializers_opt COMMA;
+
// 15.8 Primary Expressions
-//Primary: PrimaryNoNewArray
-// | ArrayCreationExpression;
+Primary: PrimaryNoNewArray
+ | ArrayCreationExpression;
//PrimaryNoNewArray: Literal
// | Type DOT CLASS
@@ -701,34 +722,56 @@
// MethodInvocation
// ArrayAccess
-primary: Literal
- | PARENOPEN _expression_ PARENCLOSE
- {
- $$ = new ParenExpressionDef($2);
- }
- | PrimitiveType Dims_opt DOT CLASS
- {
- $$ = new TypeRefDef(new TypeDef($1.getName(), $2));
- }
- | AnyName DOT CLASS
- {
- $$ = new TypeRefDef(new TypeDef($1, 0));
- }
- | AnyName Dims DOT CLASS
- {
- $$ = new TypeRefDef(new TypeDef($1, $2));
- }
- | AnyName
- {
- $$ = new FieldRefDef($1);
- }
- | MethodInvocation
- {
- $$ = $1;
- };
-
+PrimaryNoNewArray: Literal
+ | PARENOPEN _expression_ PARENCLOSE /* ParExpression*/
+ {
+ $$ = new ParenExpressionDef($2);
+ }
+ | PrimitiveType Dims_opt DOT CLASS
+ {
+ $$ = new TypeRefDef(new TypeDef($1.getName(), $2));
+ }
+ | QualifiedIdentifier DOT CLASS
+ {
+ $$ = new TypeRefDef(new TypeDef($1, 0));
+ }
+ | QualifiedIdentifier Dims DOT CLASS
+ {
+ $$ = new TypeRefDef(new TypeDef($1, $2));
+ }
+ | QualifiedIdentifier
+ {
+ $$ = new FieldRefDef($1);
+ }
+ | MethodInvocation
+ {
+ $$ = $1;
+ }
+ | NEW Creator
+ {
+ $$ = new NewCreator();
+ };
+Arguments: PARENOPEN ExpressionList_opt PARENCLOSE;
+
+
// 15.9 Class Instance Creation Expressions
+Creator: NonWildcardTypeArguments CreatedName ClassCreatorRest { $$ = null; }
+ | CreatedName ClassCreatorRest { $$ = null; }
+ | CreatedName ArrayCreatorRest { $$ = null; }
+
+CreatedName: IDENTIFIER TypeArgumentsOrDiamond_opt
+ | IDENTIFIER TypeArgumentsOrDiamond_opt DOT CreatedName
+
+ClassCreatorRest: Arguments ClassBody_opt;
+
+ArrayCreatorRest: Dims ArrayInitializer
+ | DimExprs Dims_opt;
+
+TypeArgumentsOrDiamond_opt:
+ | TypeArguments
+ | LESSTHAN GREATERTHAN;
+
ArgumentList_opt:
| ArgumentList;
@@ -738,7 +781,21 @@
}
| ArgumentList COMMA _expression_;
-// 15.10 Array Creation Expressions
+// 15.10 Array Creation Expressions
+ArrayCreationExpression: NEW QualifiedIdentifier DimExprs Dims_opt
+ {
+ $$ = null;
+ }
+ | NEW QualifiedIdentifier Dims ArrayInitializer
+ {
+ $$ = null;
+ };
+
+DimExprs: DimExpr
+ | DimExprs DimExpr;
+
+DimExpr: SQUAREOPEN _expression_ SQUARECLOSE
+
Dims_opt: {
$$ = 0;
}
@@ -758,14 +815,14 @@
{
$$ = new MethodInvocationDef($1, null);
}
- | AnyName DOT TypeParameters_opt IDENTIFIER PARENOPEN ArgumentList_opt PARENCLOSE
+ | QualifiedIdentifier DOT TypeParameters_opt IDENTIFIER PARENOPEN ArgumentList_opt PARENCLOSE
{
$$ = new MethodInvocationDef($1, null);
};
// 15.14 Postfix Expressions
PostfixExpression: /* ExpressionName | */
- primary
+ Primary
| PostfixExpression PLUSPLUS { $$ = new PostIncrementDef($1); }
| PostfixExpression MINUSMINUS { $$ = new PostDecrementDef($1); };
@@ -783,8 +840,8 @@
// 15.16 Cast Expressions
CastExpression: PARENOPEN PrimitiveType Dims_opt PARENCLOSE UnaryExpression { $$ = new CastDef(new TypeDef($2.getName(), $3), $5); }
- | PARENOPEN AnyName PARENCLOSE UnaryExpressionNotPlusMinus { $$ = new CastDef(new TypeDef($2, 0), $4); }
- | PARENOPEN AnyName Dims PARENCLOSE UnaryExpressionNotPlusMinus { $$ = new CastDef(new TypeDef($2, $3), $5); };
+ | PARENOPEN QualifiedIdentifier PARENCLOSE UnaryExpressionNotPlusMinus { $$ = new CastDef(new TypeDef($2, 0), $4); }
+ | PARENOPEN QualifiedIdentifier Dims PARENCLOSE UnaryExpressionNotPlusMinus { $$ = new CastDef(new TypeDef($2, $3), $5); };
// 15.17 Multiplicative Operators
MultiplicativeExpression: UnaryExpression
@@ -884,7 +941,7 @@
// ExpressionName | FieldAccess
-LeftHandSide: AnyName
+LeftHandSide: QualifiedIdentifier
{
$$ = new FieldRefDef($1);
};
@@ -906,6 +963,12 @@
// 15.27 _expression_
_expression_: AssignmentExpression;
+ExpressionList_opt:
+ | ExpressionList;
+
+ExpressionList: _expression_
+ | ExpressionList _expression_;
+
%%
private JavaLexer lexer;
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/DefaultJavaAnnotationAssembler.java (1492 => 1493)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/DefaultJavaAnnotationAssembler.java 2012-04-16 19:41:37 UTC (rev 1492)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/impl/DefaultJavaAnnotationAssembler.java 2012-04-18 19:23:18 UTC (rev 1493)
@@ -88,6 +88,7 @@
import com.thoughtworks.qdox.parser._expression_.MethodInvocationDef;
import com.thoughtworks.qdox.parser._expression_.MinusSignDef;
import com.thoughtworks.qdox.parser._expression_.MultiplyDef;
+import com.thoughtworks.qdox.parser._expression_.NewCreator;
import com.thoughtworks.qdox.parser._expression_.NotDef;
import com.thoughtworks.qdox.parser._expression_.NotEqualsDef;
import com.thoughtworks.qdox.parser._expression_.OrDef;
@@ -451,4 +452,9 @@
{
return null;
}
+
+ public AnnotationValue transform( NewCreator newCreator )
+ {
+ return null;
+ }
}
\ No newline at end of file
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/ElemValueTransformer.java (1492 => 1493)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/ElemValueTransformer.java 2012-04-16 19:41:37 UTC (rev 1492)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/ElemValueTransformer.java 2012-04-18 19:23:18 UTC (rev 1493)
@@ -96,4 +96,6 @@
U transform( PreIncrementDef preIncrementDef );
U transform( MethodInvocationDef methodInvocationDef );
+
+ U transform( NewCreator newCreator );
}
\ No newline at end of file
Added: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/NewCreator.java (0 => 1493)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/NewCreator.java (rev 0)
+++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/_expression_/NewCreator.java 2012-04-18 19:23:18 UTC (rev 1493)
@@ -0,0 +1,30 @@
+package com.thoughtworks.qdox.parser._expression_;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class NewCreator extends ExpressionDef
+{
+
+ public <U> U transform( ElemValueTransformer<U> transformer )
+ {
+ return transformer.transform( this );
+ }
+
+}
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java (1492 => 1493)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java 2012-04-16 19:41:37 UTC (rev 1492)
+++ trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java 2012-04-18 19:23:18 UTC (rev 1493)
@@ -182,20 +182,17 @@
public void testObjectCreation()
{
String source="package simpleenum;\r\n" +
- "\r\n" +
"import java.util.Date;\r\n" +
- "\r\n" +
"public enum MinimalEnumExampleConstructor\r\n" +
"{\r\n" +
" D_CONSTRUCTOR(new Date()); // FAILS to be parsed\r\n" +
- "\r\n" +
" private final Date date;\r\n" +
- "\r\n" +
" private MinimalEnumExampleConstructor(final Date date)\r\n" +
" {\r\n" +
" this.date = date;\r\n" +
" }\r\n" +
"}";
+ new JavaProjectBuilder().setDebugParser( true ).setDebugLexer( true ).addSource(new StringReader(source));
}
// QDOX-240
To unsubscribe from this list please visit:
