- Revision
- 1311
- Author
- rfscholte
- Date
- 2011-09-04 15:59:08 -0500 (Sun, 04 Sep 2011)
Log Message
Lexer+Parser now EnumConstant with YYINITIAL instead of just CODEBLOCK, so everything between the braces is recognized. Still some cleanup to do.
Modified Paths
Diff
Modified: trunk/qdox/src/grammar/lexer.flex (1310 => 1311)
--- trunk/qdox/src/grammar/lexer.flex 2011-09-04 15:22:46 UTC (rev 1310) +++ trunk/qdox/src/grammar/lexer.flex 2011-09-04 20:59:08 UTC (rev 1311) @@ -221,7 +221,14 @@ } else { nestingDepth++; - braceMode = CODEBLOCK; + if (enumConstantMode && yystate() == ENUM) + { + braceMode = YYINITIAL; + } + else + { + braceMode = CODEBLOCK; + } return Parser.BRACEOPEN; } } @@ -229,7 +236,14 @@ nestingDepth--; classDepth--; popState(); - braceMode = CODEBLOCK; + if ( yystate() == ENUM && enumConstantMode) + { + braceMode = YYINITIAL; + } + else + { + braceMode = CODEBLOCK; + } return Parser.BRACECLOSE; } @@ -267,7 +281,11 @@ } } <ENUM> { - ";" { enumConstantMode = false; return Parser.SEMI; } + ";" { + enumConstantMode = false; + braceMode = CODEBLOCK; + return Parser.SEMI; + } "(" { nestingDepth++; if(parenMode >= 0) { @@ -276,17 +294,15 @@ parenMode = -1; return Parser.PARENOPEN; } - else { - if(enumConstantMode) { + else if(enumConstantMode) { parenDepth = classDepth; pushState(PARENBLOCK); return Parser.PARENBLOCK; - } - else { + } + else { return Parser.PARENOPEN; - } } - } + } } <CODEBLOCK> { "{" {
Modified: trunk/qdox/src/grammar/parser.y (1310 => 1311)
--- trunk/qdox/src/grammar/parser.y 2011-09-04 15:22:46 UTC (rev 1310) +++ trunk/qdox/src/grammar/parser.y 2011-09-04 20:59:08 UTC (rev 1311) @@ -456,6 +456,8 @@ AnyModifiers_opt Type VariableDeclaratorId { fieldType = $2; makeField($3, lexer.getCodeBody(), false); + builder.beginField(fd); + builder.endField(); } extrafields SEMI { modifiers.clear(); @@ -464,6 +466,8 @@ extrafields: | extrafields COMMA { line = lexer.getLine(); } VariableDeclaratorId { makeField($4, lexer.getCodeBody(), false); + builder.beginField(fd); + builder.endField(); }; // 8.3 Field Declarations... @@ -622,17 +626,21 @@ | EnumConstants_opt COMMA | EnumConstants_opt EnumConstant; -EnumConstant: Annotations_opt IDENTIFIER Arguments_opt ClassBody_opt +EnumConstant: Annotations_opt IDENTIFIER Arguments_opt { makeField(new TypeDef($2, 0), "", true); + builder.beginField(fd); + } + ClassBody_opt + { + builder.endField(); }; - Arguments_opt: | PARENBLOCK /* =Arguments */; ClassBody_opt: - | CODEBLOCK /* =ClassBody */; + | ClassBody; EnumBodyDeclarations_opt: | SEMI ClassBodyDeclarations_opt; @@ -823,6 +831,7 @@ private StringBuffer textBuffer = new StringBuffer(); private ClassDef cls = new ClassDef(); private MethodDef mth = new MethodDef(); +private FieldDef fd; private List<TypeVariableDef> typeParams = new LinkedList<TypeVariableDef>(); //for both JavaClass and JavaMethod private LinkedList<AnnoDef> annotationStack = new LinkedList<AnnoDef>(); // Use LinkedList instead of Stack because it is unsynchronized private List<List<ElemValueDef>> annoValueListStack = new LinkedList<List<ElemValueDef>>(); // Use LinkedList instead of Stack because it is unsynchronized @@ -904,15 +913,14 @@ private void makeField(TypeDef field, String body, boolean enumConstant) { - FieldDef fd = new FieldDef( field.getName() ); + fd = new FieldDef( field.getName() ); + fd.setName(field.getName()); fd.setLineNumber(line); fd.getModifiers().addAll(modifiers); fd.setType( fieldType ); fd.setDimensions(field.getDimensions()); fd.setEnumConstant(enumConstant); fd.setBody(body); - builder.beginField(fd); - builder.endField(); } public void onComment( String comment, int line, int column ) {
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java (1310 => 1311)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-04 15:22:46 UTC (rev 1310) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-04 20:59:08 UTC (rev 1311) @@ -66,6 +66,7 @@ private List<DefaultJavaParameter> parameterList = new LinkedList<DefaultJavaParameter>(); private DefaultJavaConstructor currentConstructor; private DefaultJavaMethod currentMethod; + private DefaultJavaField currentField; private List<AnnoDef> currentAnnoDefs; private String lastComment; private List<TagDef> lastTagSet = new LinkedList<TagDef>(); @@ -256,17 +257,18 @@ currentConstructor.setSourceCode(def.getBody()); } - public void beginMethod() { - currentMethod = new DefaultJavaMethod(); - currentMethod.setParentClass(classStack.getFirst()); - classStack.getFirst().addMethod(currentMethod); + public void beginMethod() + { + currentMethod = new DefaultJavaMethod(); + if ( currentField == null ) + { + currentMethod.setParentClass( classStack.getFirst() ); + classStack.getFirst().addMethod( currentMethod ); + } + currentMethod.setModelWriterFactory( modelWriterFactory ); - currentMethod.setModelWriterFactory(modelWriterFactory); - - // javadoc - addJavaDoc(currentMethod); - - setAnnotations(currentMethod); + addJavaDoc( currentMethod ); + setAnnotations( currentMethod ); } public void endMethod(MethodDef def) { @@ -324,7 +326,7 @@ } public void beginField(FieldDef def) { - DefaultJavaField currentField = new DefaultJavaField(); + currentField = new DefaultJavaField(); currentField.setParentClass(classStack.getFirst()); currentField.setLineNumber(def.getLineNumber()); currentField.setModelWriterFactory(modelWriterFactory); @@ -347,12 +349,12 @@ // annotations setAnnotations( currentField ); - classStack.getFirst().addField(currentField); } public void endField() { - + classStack.getFirst().addField(currentField); + currentField = null; } public void addParameter(FieldDef fieldDef) {
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/JavaProjectBuilderTest.java (1310 => 1311)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/JavaProjectBuilderTest.java 2011-09-04 15:22:46 UTC (rev 1310) +++ trunk/qdox/src/test/java/com/thoughtworks/qdox/JavaProjectBuilderTest.java 2011-09-04 20:59:08 UTC (rev 1311) @@ -1376,4 +1376,29 @@ assertEquals( "com.foo.Outer$Inner$Core", cls.getFullyQualifiedName() ); assertEquals( "com.foo.Outer.Inner.Core", cls.getCanonicalName() ); } + + public void testEnumConstantMethods() { + String source = "public enum MethodLocationOfEnumMethod\n" + + "{\n" + + " A()\n" + + " {\n" + + " @Override\n" + + " private void method()\n" + + " {\n" + + " };\n" + + " };\n" + + " public abstract void method();\n" + + " private void test()\n" + + " {\n" + + " };\n" + + " \n" + + " String name = \"x\";" + + "}"; + builder.addSource( new StringReader( source ) ); + JavaClass cls = builder.getClassByName( "MethodLocationOfEnumMethod" ); + assertEquals( 2, cls.getMethods().size() ); + assertEquals( "method", cls.getMethods().get( 0 ).getName() ); + assertEquals( true, cls.getMethods().get( 0 ).isAbstract() ); + assertEquals( "test", cls.getMethods().get( 1 ).getName() ); + } } \ No newline at end of file
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java (1310 => 1311)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java 2011-09-04 15:22:46 UTC (rev 1310) +++ trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/LexerTest.java 2011-09-04 20:59:08 UTC (rev 1311) @@ -490,8 +490,18 @@ assertLex(Parser.IDENTIFIER, "Animal", lexer); assertLex(Parser.BRACEOPEN, lexer); assertLex(Parser.IDENTIFIER, "DUCK", lexer); - assertLex(Parser.CODEBLOCK, lexer); + //assertLex(Parser.CODEBLOCK, lexer); + assertLex( Parser.BRACEOPEN, lexer ); + assertLex(Parser.PUBLIC, lexer); + assertLex(Parser.IDENTIFIER, "void", lexer); + assertLex( Parser.IDENTIFIER, "speak", lexer ); + assertLex( Parser.PARENOPEN, lexer ); + assertLex( Parser.PARENCLOSE, lexer ); + assertLex( Parser.CODEBLOCK, lexer ); + assertLex( Parser.BRACECLOSE, lexer ); + assertLex(Parser.BRACECLOSE, lexer); + assertLex( 0, lexer ); } private void assertSingleLex(String in, short expectedLex) throws Exception {
To unsubscribe from this list please visit:
