- Revision
- 1306
- Author
- rfscholte
- Date
- 2011-09-03 12:32:37 -0500 (Sat, 03 Sep 2011)
Log Message
Add JavaField.isEnumConstant()
Modified Paths
- trunk/qdox/src/grammar/parser.y
- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaField.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/structs/FieldDef.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/writer/DefaultModelWriter.java
- trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java
Diff
Modified: trunk/qdox/src/grammar/parser.y (1305 => 1306)
--- trunk/qdox/src/grammar/parser.y 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/grammar/parser.y 2011-09-03 17:32:37 UTC (rev 1306) @@ -455,7 +455,7 @@ FieldDeclaration: AnyModifiers_opt Type VariableDeclaratorId { fieldType = $2; - makeField($3, lexer.getCodeBody()); + makeField($3, lexer.getCodeBody(), false); } extrafields SEMI { modifiers.clear(); @@ -463,7 +463,7 @@ extrafields: | extrafields COMMA { line = lexer.getLine(); } VariableDeclaratorId { - makeField($4, lexer.getCodeBody()); + makeField($4, lexer.getCodeBody(), false); }; // 8.3 Field Declarations... @@ -612,7 +612,8 @@ For that reason the adjusted options of EnumConstants_opt, which will accept all cases */ EnumBody: BRACEOPEN EnumConstants_opt EnumBodyDeclarations_opt BRACECLOSE - { builder.endClass(); + { + builder.endClass(); fieldType = null; modifiers.clear(); }; @@ -623,7 +624,7 @@ EnumConstant: Annotations_opt IDENTIFIER Arguments_opt ClassBody_opt { - makeField(new TypeDef($2, 0), ""); + makeField(new TypeDef($2, 0), "", true); }; @@ -902,12 +903,13 @@ } -private void makeField(TypeDef field, String body) { +private void makeField(TypeDef field, String body, boolean enumConstant) { FieldDef fd = new FieldDef( field.getName() ); fd.setLineNumber(line); fd.getModifiers().addAll(modifiers); fd.setType( fieldType ); fd.setDimensions(field.getDimensions()); + fd.setEnumConstant(enumConstant); fd.setBody(body); builder.addField(fd); }
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -331,6 +331,7 @@ currentField.setName(def.getName()); currentField.setType(createType(def.getType(), def.getDimensions())); + currentField.setEnumConstant( def.isEnumConstant() ); // modifiers {
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaField.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaField.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/DefaultJavaField.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -23,6 +23,7 @@ private Type type; private String initializationExpression; + private boolean enumConstant; public DefaultJavaField() { } @@ -102,6 +103,18 @@ this.initializationExpression = initializationExpression; } + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.model.JavaField#isEnumConstant() + */ + public boolean isEnumConstant() { + return enumConstant; + } + + public void setEnumConstant(boolean enumConstant) { + this.enumConstant = enumConstant; + } + /** * @see java.lang.reflect.Field#toString() */
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/model/JavaField.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -54,5 +54,13 @@ * @return initialization as string. */ String getInitializationExpression(); + + /** + * Equivalent of {@link java.lang.reflect.Field#isEnumConstant()} + * + * @return <code>true</code> if this field is an enum constant, otherwise <code>false</code> + * @since 2.0 + */ + boolean isEnumConstant(); } \ No newline at end of file
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -125,6 +125,7 @@ Class<?> fieldType = field.getType(); fieldDef.setType( getTypeDef(fieldType) ); fieldDef.setDimensions( getDimension(fieldType) ); + fieldDef.setEnumConstant( field.isEnumConstant() ); addModifiers( fieldDef.getModifiers(), field.getModifiers()); binaryBuilder.addField(fieldDef); }
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/structs/FieldDef.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/structs/FieldDef.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/structs/FieldDef.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -34,6 +34,7 @@ private Set<String> modifiers = new LinkedHashSet<String>(); private int dimensions; private boolean isVarArgs; + private boolean isEnumConstant; private String body = ""; public FieldDef() @@ -140,4 +141,20 @@ { return modifiers; } + + /** + * + * @return <code>true</code> if this field is an enum constant, otherwise <code>false</code> + */ + public boolean isEnumConstant() { + return isEnumConstant; + } + + /** + * + * @param isEnumConstant value to specify if this field is an enum constant or not + */ + public void setEnumConstant(boolean isEnumConstant) { + this.isEnumConstant = isEnumConstant; + } }
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/writer/DefaultModelWriter.java (1305 => 1306)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/writer/DefaultModelWriter.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/writer/DefaultModelWriter.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -37,167 +37,209 @@ import com.thoughtworks.qdox.model.Type; import com.thoughtworks.qdox.model._expression_.AnnotationValue; - -public class DefaultModelWriter implements ModelWriter +public class DefaultModelWriter + implements ModelWriter { private IndentBuffer buffer = new IndentBuffer(); + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeSource(com.thoughtworks.qdox.model.JavaSource) + */ public ModelWriter writeSource( JavaSource source ) { // package statement - writePackage(source.getPackage()); + writePackage( source.getPackage() ); // import statement - for (String imprt : source.getImports()) { - buffer.write("import "); - buffer.write(imprt); - buffer.write(';'); + for ( String imprt : source.getImports() ) + { + buffer.write( "import " ); + buffer.write( imprt ); + buffer.write( ';' ); buffer.newline(); } - if (source.getImports().size() > 0) { + if ( source.getImports().size() > 0 ) + { buffer.newline(); } // classes - for(ListIterator<JavaClass> iter = source.getClasses().listIterator();iter.hasNext();) { + for ( ListIterator<JavaClass> iter = source.getClasses().listIterator(); iter.hasNext(); ) + { JavaClass cls = iter.next(); writeClass( cls ); - if (iter.hasNext()) { - buffer.newline(); + if ( iter.hasNext() ) + { + buffer.newline(); } } return this; } - - public ModelWriter writePackage(JavaPackage pckg) { - if (pckg != null) { - commentHeader(pckg); - buffer.write("package "); - buffer.write(pckg.getName()); - buffer.write(';'); + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writePackage(com.thoughtworks.qdox.model.JavaPackage) + */ + public ModelWriter writePackage( JavaPackage pckg ) + { + if ( pckg != null ) + { + commentHeader( pckg ); + buffer.write( "package " ); + buffer.write( pckg.getName() ); + buffer.write( ';' ); buffer.newline(); buffer.newline(); } return this; } - + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeClass(com.thoughtworks.qdox.model.JavaClass) + */ public ModelWriter writeClass( JavaClass cls ) { commentHeader( cls ); - - writeAccessibilityModifier(cls.getModifiers()); - writeNonAccessibilityModifiers(cls.getModifiers()); - buffer.write(cls.isEnum() ? "enum " : - cls.isInterface() ? "interface " : - cls.isAnnotation() ? "@interface " : "class "); - buffer.write(cls.getName()); + writeAccessibilityModifier( cls.getModifiers() ); + writeNonAccessibilityModifiers( cls.getModifiers() ); + buffer.write( cls.isEnum() ? "enum " : cls.isInterface() ? "interface " : cls.isAnnotation() ? "@interface " + : "class " ); + buffer.write( cls.getName() ); + // subclass - if (cls.getSuperClass() != null) { + if ( cls.getSuperClass() != null ) + { String className = cls.getSuperClass().getValue(); - if(!"java.lang.Object".equals(className) && !"java.lang.Enum".equals(className)) { - buffer.write(" extends "); - buffer.write(cls.getSuperClass().getValue()); + if ( !"java.lang.Object".equals( className ) && !"java.lang.Enum".equals( className ) ) + { + buffer.write( " extends " ); + buffer.write( cls.getSuperClass().getValue() ); } } // implements - if (cls.getImplements().size() > 0) { - buffer.write(cls.isInterface() ? " extends " : " implements "); - - for (ListIterator<Type> iter = cls.getImplements().listIterator(); iter.hasNext();) { - buffer.write(iter.next().getValue()); - if ( iter.hasNext() ) { - buffer.write(", "); + if ( cls.getImplements().size() > 0 ) + { + buffer.write( cls.isInterface() ? " extends " : " implements " ); + + for ( ListIterator<Type> iter = cls.getImplements().listIterator(); iter.hasNext(); ) + { + buffer.write( iter.next().getValue() ); + if ( iter.hasNext() ) + { + buffer.write( ", " ); } } } - buffer.write(" {"); + buffer.write( " {" ); buffer.newline(); buffer.indent(); // fields - for (JavaField javaField : cls.getFields()) { + for ( JavaField javaField : cls.getFields() ) + { buffer.newline(); - writeField(javaField); + writeField( javaField ); } // methods - for (JavaMethod javaMethod : cls.getMethods()) { + for ( JavaMethod javaMethod : cls.getMethods() ) + { buffer.newline(); - writeMethod(javaMethod); + writeMethod( javaMethod ); } // inner-classes - for (JavaClass innerCls : cls.getNestedClasses()) { + for ( JavaClass innerCls : cls.getNestedClasses() ) + { buffer.newline(); - writeClass(innerCls); + writeClass( innerCls ); } buffer.deindent(); buffer.newline(); - buffer.write('}'); + buffer.write( '}' ); buffer.newline(); return this; } - - public ModelWriter writeField(JavaField field) { + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeField(com.thoughtworks.qdox.model.JavaField) + */ + public ModelWriter writeField( JavaField field ) + { commentHeader( field ); - - writeAllModifiers(field.getModifiers()); - buffer.write(field.getType().toString()); - buffer.write(' '); - buffer.write(field.getName()); - if(field.getInitializationExpression() != null && field.getInitializationExpression().length() > 0){ - buffer.write(" = "); - buffer.write(field.getInitializationExpression()); + + writeAllModifiers( field.getModifiers() ); + buffer.write( field.getType().toString() ); + buffer.write( ' ' ); + buffer.write( field.getName() ); + if ( field.getInitializationExpression() != null && field.getInitializationExpression().length() > 0 ) + { + buffer.write( " = " ); + buffer.write( field.getInitializationExpression() ); } - buffer.write(';'); + buffer.write( ';' ); buffer.newline(); return this; } - + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeConstructor(com.thoughtworks.qdox.model.JavaConstructor) + */ public ModelWriter writeConstructor( JavaConstructor constructor ) { commentHeader( constructor ); writeAllModifiers( constructor.getModifiers() ); - + buffer.write( constructor.getName() ); buffer.write( '(' ); - for(ListIterator<JavaParameter> iter = constructor.getParameters().listIterator(); iter.hasNext();) { + for ( ListIterator<JavaParameter> iter = constructor.getParameters().listIterator(); iter.hasNext(); ) + { writeParameter( iter.next() ); - if(iter.hasNext()) { + if ( iter.hasNext() ) + { buffer.write( ", " ); } } buffer.write( ')' ); - - if (constructor.getExceptions().size() > 0) { - buffer.write(" throws "); - for (Iterator<Type> excIter = constructor.getExceptions().iterator();excIter.hasNext();) + + if ( constructor.getExceptions().size() > 0 ) + { + buffer.write( " throws " ); + for ( Iterator<Type> excIter = constructor.getExceptions().iterator(); excIter.hasNext(); ) { - buffer.write(excIter.next().getValue()); - if(excIter.hasNext()) + buffer.write( excIter.next().getValue() ); + if ( excIter.hasNext() ) { - buffer.write(", "); + buffer.write( ", " ); } } } - + buffer.write( " {" ); buffer.newline(); - if( constructor.getSourceCode() != null ) + if ( constructor.getSourceCode() != null ) { - buffer.write( constructor.getSourceCode() ); + buffer.write( constructor.getSourceCode() ); } buffer.write( "}" ); buffer.newline(); - + return this; } - + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeMethod(com.thoughtworks.qdox.model.JavaMethod) + */ public ModelWriter writeMethod( JavaMethod method ) { commentHeader( method ); @@ -207,7 +249,7 @@ buffer.write( ' ' ); buffer.write( method.getName() ); buffer.write( '(' ); - for(ListIterator<JavaParameter> iter = method.getParameters().listIterator(); iter.hasNext();) + for ( ListIterator<JavaParameter> iter = method.getParameters().listIterator(); iter.hasNext(); ) { JavaParameter parameter = iter.next(); buffer.write( parameter.getType().toString() ); @@ -217,18 +259,22 @@ } buffer.write( ' ' ); buffer.write( parameter.getName() ); - if ( iter.hasNext() ) { + if ( iter.hasNext() ) + { buffer.write( ", " ); } } buffer.write( ')' ); - if (method.getExceptions().size() > 0) { - buffer.write(" throws "); - for (Iterator<Type> excIter = method.getExceptions().iterator();excIter.hasNext();) { - buffer.write(excIter.next().getValue()); - if(excIter.hasNext()) { - buffer.write(", "); + if ( method.getExceptions().size() > 0 ) + { + buffer.write( " throws " ); + for ( Iterator<Type> excIter = method.getExceptions().iterator(); excIter.hasNext(); ) + { + buffer.write( excIter.next().getValue() ); + if ( excIter.hasNext() ) + { + buffer.write( ", " ); } } } @@ -247,103 +293,134 @@ } return this; } - - private void writeNonAccessibilityModifiers(List<String> modifiers) { - for ( String modifier: modifiers ) { - if (!modifier.startsWith("p")) { - buffer.write(modifier); - buffer.write(' '); + + private void writeNonAccessibilityModifiers( List<String> modifiers ) + { + for ( String modifier : modifiers ) + { + if ( !modifier.startsWith( "p" ) ) + { + buffer.write( modifier ); + buffer.write( ' ' ); } } } - private void writeAccessibilityModifier(List<String> modifiers) { - for ( String modifier: modifiers ) { - if (modifier.startsWith("p")) { - buffer.write(modifier); - buffer.write(' '); + private void writeAccessibilityModifier( List<String> modifiers ) + { + for ( String modifier : modifiers ) + { + if ( modifier.startsWith( "p" ) ) + { + buffer.write( modifier ); + buffer.write( ' ' ); } } } - private void writeAllModifiers(List<String> modifiers) { - for ( String modifier: modifiers ) { - buffer.write(modifier); - buffer.write(' '); + private void writeAllModifiers( List<String> modifiers ) + { + for ( String modifier : modifiers ) + { + buffer.write( modifier ); + buffer.write( ' ' ); } } - - public ModelWriter writeAnnotation(JavaAnnotation annotation) { - buffer.write('@'); - buffer.write(annotation.getType().getFullyQualifiedName()); - if(!annotation.getPropertyMap().isEmpty()) { - buffer.indent(); - buffer.write('('); - Iterator<Map.Entry<String, AnnotationValue>> iterator = annotation.getPropertyMap().entrySet().iterator(); - while(iterator.hasNext()) { - Map.Entry<String, AnnotationValue> entry = iterator.next(); - buffer.write(entry.getKey()); - buffer.write('='); - buffer.write(entry.getValue().toString()); - if(iterator.hasNext()) { - buffer.write(','); - buffer.newline(); - } - } - buffer.write(')'); - buffer.deindent(); - } - return this; + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeAnnotation(com.thoughtworks.qdox.model.JavaAnnotation) + */ + public ModelWriter writeAnnotation( JavaAnnotation annotation ) + { + buffer.write( '@' ); + buffer.write( annotation.getType().getFullyQualifiedName() ); + if ( !annotation.getPropertyMap().isEmpty() ) + { + buffer.indent(); + buffer.write( '(' ); + Iterator<Map.Entry<String, AnnotationValue>> iterator = annotation.getPropertyMap().entrySet().iterator(); + while ( iterator.hasNext() ) + { + Map.Entry<String, AnnotationValue> entry = iterator.next(); + buffer.write( entry.getKey() ); + buffer.write( '=' ); + buffer.write( entry.getValue().toString() ); + if ( iterator.hasNext() ) + { + buffer.write( ',' ); + buffer.newline(); + } + } + buffer.write( ')' ); + buffer.deindent(); + } + return this; } - - public ModelWriter writeParameter(JavaParameter parameter) { - commentHeader(parameter); - buffer.write( parameter.getType().toString() ); + + /* + * (non-Javadoc) + * @see com.thoughtworks.qdox.writer.ModelWriter#writeParameter(com.thoughtworks.qdox.model.JavaParameter) + */ + public ModelWriter writeParameter( JavaParameter parameter ) + { + commentHeader( parameter ); + buffer.write( parameter.getType().toString() ); if ( parameter.isVarArgs() ) { buffer.write( "..." ); } - return this; + return this; } - - protected void commentHeader(JavaAnnotatedElement entity) { - if (entity.getComment() != null || (entity.getTags().size() > 0)) { - buffer.write("/**"); + + protected void commentHeader( JavaAnnotatedElement entity ) + { + if ( entity.getComment() != null || ( entity.getTags().size() > 0 ) ) + { + buffer.write( "/**" ); buffer.newline(); - if (entity.getComment() != null && entity.getComment().length() > 0) { - buffer.write(" * "); - - buffer.write(entity.getComment().replaceAll("\n", "\n * ")); - + if ( entity.getComment() != null && entity.getComment().length() > 0 ) + { + buffer.write( " * " ); + + buffer.write( entity.getComment().replaceAll( "\n", "\n * " ) ); + buffer.newline(); } - if (entity.getTags().size() > 0) { - if (entity.getComment() != null && entity.getComment().length() > 0) { - buffer.write(" *"); + if ( entity.getTags().size() > 0 ) + { + if ( entity.getComment() != null && entity.getComment().length() > 0 ) + { + buffer.write( " *" ); buffer.newline(); } - for (DocletTag docletTag : entity.getTags()) { - buffer.write(" * @"); - buffer.write(docletTag.getName()); - if (docletTag.getValue().length() > 0) { - buffer.write(' '); - buffer.write(docletTag.getValue()); + for ( DocletTag docletTag : entity.getTags() ) + { + buffer.write( " * @" ); + buffer.write( docletTag.getName() ); + if ( docletTag.getValue().length() > 0 ) + { + buffer.write( ' ' ); + buffer.write( docletTag.getValue() ); } buffer.newline(); } } - buffer.write(" */"); + buffer.write( " */" ); buffer.newline(); } - if(entity.getAnnotations() != null) { - for(JavaAnnotation annotation : entity.getAnnotations()) { - writeAnnotation(annotation); - } + if ( entity.getAnnotations() != null ) + { + for ( JavaAnnotation annotation : entity.getAnnotations() ) + { + writeAnnotation( annotation ); + } } } + public String toString() { return buffer.toString();
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java (1305 => 1306)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java 2011-09-03 17:03:36 UTC (rev 1305) +++ trunk/qdox/src/test/java/com/thoughtworks/qdox/EnumsTest.java 2011-09-03 17:32:37 UTC (rev 1306) @@ -85,7 +85,12 @@ JavaClass cls = javaDocBuilder.getClassByName("X$EnumWithConstructors"); assertTrue(cls.isEnum()); + assertEquals( 3, cls.getFields().size() ); + assertEquals( 2, cls.getConstructors().size() ); assertEquals("int", cls.getFieldByName("someField").getType().getValue()); // sanity check + assertTrue( "c should be recognized as a enumConstant", cls.getFieldByName( "c" ).isEnumConstant() ); + assertTrue( "d should be recognized as a enumConstant", cls.getFieldByName( "d" ).isEnumConstant() ); + assertFalse( cls.getFieldByName( "someField" ).isEnumConstant() ); } public void testAddEnumsWithMethodsToModel() throws Exception {
To unsubscribe from this list please visit:
