- Revision
- 1308
- Author
- rfscholte
- Date
- 2011-09-04 07:44:47 -0500 (Sun, 04 Sep 2011)
Log Message
Split Builder.addField() into Builder.startField() and Builder.endField() for better support of EnumConstants
Modified Paths
- trunk/qdox/src/grammar/parser.y
- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/Builder.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java
- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java
- trunk/qdox/src/test/java/com/thoughtworks/qdox/builder/ModelBuilderTest.java
- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java
Diff
Modified: trunk/qdox/src/grammar/parser.y (1307 => 1308)
--- trunk/qdox/src/grammar/parser.y 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/grammar/parser.y 2011-09-04 12:44:47 UTC (rev 1308) @@ -911,7 +911,8 @@ fd.setDimensions(field.getDimensions()); fd.setEnumConstant(enumConstant); fd.setBody(body); - builder.addField(fd); + builder.beginField(fd); + builder.endField(); } public void onComment( String comment, int line, int column ) {
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/Builder.java (1307 => 1308)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/Builder.java 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/Builder.java 2011-09-04 12:44:47 UTC (rev 1308) @@ -48,9 +48,10 @@ void beginMethod(); void endMethod(MethodDef def); + void beginField(FieldDef def); + void endField(); + void addParameter(FieldDef def); - - void addField(FieldDef def); void addAnnotation(AnnoDef annotation); }
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java (1307 => 1308)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/builder/ModelBuilder.java 2011-09-04 12:44:47 UTC (rev 1308) @@ -323,7 +323,7 @@ return result; } - public void addField(FieldDef def) { + public void beginField(FieldDef def) { DefaultJavaField currentField = new DefaultJavaField(); currentField.setParentClass(classStack.getFirst()); currentField.setLineNumber(def.getLineNumber()); @@ -350,6 +350,11 @@ classStack.getFirst().addField(currentField); } + public void endField() + { + + } + public void addParameter(FieldDef fieldDef) { DefaultJavaParameter jParam = new DefaultJavaParameter(createType(fieldDef.getType(), fieldDef.getDimensions()), fieldDef.getName(), fieldDef.isVarArgs()); jParam.setParentMethod( currentMethod );
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java (1307 => 1308)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-09-04 12:44:47 UTC (rev 1308) @@ -37,48 +37,57 @@ public class BinaryClassParser { private Class<?> clazz; + private ModelBuilder binaryBuilder; - - public BinaryClassParser(Class<?> clazz, ModelBuilder modelBuilder) + + public BinaryClassParser( Class<?> clazz, ModelBuilder modelBuilder ) { this.clazz = clazz; this.binaryBuilder = modelBuilder; } - - public boolean parse() { - try { + + public boolean parse() + { + try + { String name = clazz.getName(); // Set the package name and class name - String packageName = getPackageName(name); - binaryBuilder.addPackage(new PackageDef(packageName)); + String packageName = getPackageName( name ); + binaryBuilder.addPackage( new PackageDef( packageName ) ); - ClassDef classDef = new ClassDef( getClassName(name) ); + ClassDef classDef = new ClassDef( getClassName( name ) ); // Set the extended class and interfaces. Class<?>[] interfaces = clazz.getInterfaces(); - if (clazz.isInterface()) { + if ( clazz.isInterface() ) + { // It's an interface classDef.setType( ClassDef.INTERFACE ); - for (int i = 0; i < interfaces.length; i++) { + for ( int i = 0; i < interfaces.length; i++ ) + { Class<?> anInterface = interfaces[i]; - classDef.getExtends().add(new TypeDef(anInterface.getName())); + classDef.getExtends().add( new TypeDef( anInterface.getName() ) ); } - } else { + } + else + { // It's a class - for (int i = 0; i < interfaces.length; i++) { + for ( int i = 0; i < interfaces.length; i++ ) + { Class<?> anInterface = interfaces[i]; - classDef.getImplements().add(new TypeDef(anInterface.getName())); + classDef.getImplements().add( new TypeDef( anInterface.getName() ) ); } Class<?> superclass = clazz.getSuperclass(); - if (superclass != null) { - classDef.getExtends().add(new TypeDef(superclass.getName())); + if ( superclass != null ) + { + classDef.getExtends().add( new TypeDef( superclass.getName() ) ); } } - addModifiers(classDef.getModifiers(), clazz.getModifiers()); + addModifiers( classDef.getModifiers(), clazz.getModifiers() ); - binaryBuilder.beginClass(classDef); + binaryBuilder.beginClass( classDef ); // add the constructors // @@ -86,112 +95,131 @@ // to the source code as that does not create a default constructor // if no constructor exists. Constructor<?>[] constructors = clazz.getDeclaredConstructors(); - for (int i = 0; i < constructors.length; i++) { + for ( int i = 0; i < constructors.length; i++ ) + { binaryBuilder.beginConstructor(); - MethodDef methodDef = createMethodDef(constructors[i], binaryBuilder); + MethodDef methodDef = createMethodDef( constructors[i], binaryBuilder ); binaryBuilder.endConstructor( methodDef ); } // add the methods Method[] methods = clazz.getDeclaredMethods(); - for (int i = 0; i < methods.length; i++) { + for ( int i = 0; i < methods.length; i++ ) + { binaryBuilder.beginMethod(); - MethodDef methodDef = createMethodDef(methods[i], binaryBuilder); + MethodDef methodDef = createMethodDef( methods[i], binaryBuilder ); binaryBuilder.endMethod( methodDef ); } Field[] fields = clazz.getDeclaredFields(); - for (int i = 0; i < fields.length; i++) { - addField(fields[i], binaryBuilder); + for ( int i = 0; i < fields.length; i++ ) + { + addField( fields[i], binaryBuilder ); } binaryBuilder.endClass(); - + return true; - } catch (NoClassDefFoundError e) { + } + catch ( NoClassDefFoundError e ) + { return false; } } - - private void addModifiers(Set<String> set, int modifier) { - String modifierString = Modifier.toString(modifier); - for (StringTokenizer stringTokenizer = new StringTokenizer(modifierString); stringTokenizer.hasMoreTokens();) { - set.add(stringTokenizer.nextToken()); + + private void addModifiers( Set<String> set, int modifier ) + { + String modifierString = Modifier.toString( modifier ); + for ( StringTokenizer stringTokenizer = new StringTokenizer( modifierString ); stringTokenizer.hasMoreTokens(); ) + { + set.add( stringTokenizer.nextToken() ); } } - private void addField(Field field, ModelBuilder binaryBuilder) { + private void addField( Field field, ModelBuilder binaryBuilder ) + { FieldDef fieldDef = new FieldDef( field.getName() ); Class<?> fieldType = field.getType(); - fieldDef.setType( getTypeDef(fieldType) ); - fieldDef.setDimensions( getDimension(fieldType) ); + fieldDef.setType( getTypeDef( fieldType ) ); + fieldDef.setDimensions( getDimension( fieldType ) ); fieldDef.setEnumConstant( field.isEnumConstant() ); - addModifiers( fieldDef.getModifiers(), field.getModifiers()); - binaryBuilder.addField(fieldDef); + addModifiers( fieldDef.getModifiers(), field.getModifiers() ); + binaryBuilder.beginField( fieldDef ); + binaryBuilder.endField(); } - private MethodDef createMethodDef(Member member, ModelBuilder binaryBuilder) { + private MethodDef createMethodDef( Member member, ModelBuilder binaryBuilder ) + { MethodDef methodDef = new MethodDef(); // The name of constructors are qualified. Need to strip it. // This will work for regular methods too, since -1 + 1 = 0 - int lastDot = member.getName().lastIndexOf('.'); - methodDef.setName(member.getName().substring(lastDot + 1)); + int lastDot = member.getName().lastIndexOf( '.' ); + methodDef.setName( member.getName().substring( lastDot + 1 ) ); - addModifiers(methodDef.getModifiers(), member.getModifiers()); + addModifiers( methodDef.getModifiers(), member.getModifiers() ); Class<?>[] exceptions; Class<?>[] parameterTypes; - if (member instanceof Method) { - methodDef.setConstructor(false); + if ( member instanceof Method ) + { + methodDef.setConstructor( false ); // For some stupid reason, these methods are not defined in Member, // but in both Method and Construcotr. - exceptions = ((Method) member).getExceptionTypes(); - parameterTypes = ((Method) member).getParameterTypes(); + exceptions = ( (Method) member ).getExceptionTypes(); + parameterTypes = ( (Method) member ).getParameterTypes(); - Class<?> returnType = ((Method) member).getReturnType(); - methodDef.setReturnType(getTypeDef(returnType)); - methodDef.setDimensions(getDimension(returnType)); + Class<?> returnType = ( (Method) member ).getReturnType(); + methodDef.setReturnType( getTypeDef( returnType ) ); + methodDef.setDimensions( getDimension( returnType ) ); - } else { - methodDef.setConstructor(true); + } + else + { + methodDef.setConstructor( true ); - exceptions = ((Constructor<?>) member).getExceptionTypes(); - parameterTypes = ((Constructor<?>) member).getParameterTypes(); + exceptions = ( (Constructor<?>) member ).getExceptionTypes(); + parameterTypes = ( (Constructor<?>) member ).getParameterTypes(); } - for (int j = 0; j < exceptions.length; j++) { + for ( int j = 0; j < exceptions.length; j++ ) + { Class<?> exception = exceptions[j]; - methodDef.getExceptions().add(getTypeDef(exception)); + methodDef.getExceptions().add( getTypeDef( exception ) ); } - for (int j = 0; j < parameterTypes.length; j++) { + for ( int j = 0; j < parameterTypes.length; j++ ) + { FieldDef param = new FieldDef( "p" + j ); Class<?> parameterType = parameterTypes[j]; - param.setType( getTypeDef(parameterType) ); - param.setDimensions( getDimension(parameterType) ); + param.setType( getTypeDef( parameterType ) ); + param.setDimensions( getDimension( parameterType ) ); binaryBuilder.addParameter( param ); } return methodDef; } - private static int getDimension(Class<?> c) { - return c.getName().lastIndexOf('[') + 1; + private static int getDimension( Class<?> c ) + { + return c.getName().lastIndexOf( '[' ) + 1; } - private static String getTypeName(Class<?> c) { + private static String getTypeName( Class<?> c ) + { return c.getComponentType() != null ? c.getComponentType().getName() : c.getName(); } - - private static TypeDef getTypeDef(Class<?> c) { - return new TypeDef(getTypeName(c)); + + private static TypeDef getTypeDef( Class<?> c ) + { + return new TypeDef( getTypeName( c ) ); } - - private String getPackageName(String fullClassName) { - int lastDot = fullClassName.lastIndexOf('.'); - return lastDot == -1 ? "" : fullClassName.substring(0, lastDot); + private String getPackageName( String fullClassName ) + { + int lastDot = fullClassName.lastIndexOf( '.' ); + return lastDot == -1 ? "" : fullClassName.substring( 0, lastDot ); } - private String getClassName(String fullClassName) { - int lastDot = fullClassName.lastIndexOf('.'); - return lastDot == -1 ? fullClassName : fullClassName.substring(lastDot + 1); + private String getClassName( String fullClassName ) + { + int lastDot = fullClassName.lastIndexOf( '.' ); + return lastDot == -1 ? fullClassName : fullClassName.substring( lastDot + 1 ); } }
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/builder/ModelBuilderTest.java (1307 => 1308)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/builder/ModelBuilderTest.java 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/test/java/com/thoughtworks/qdox/builder/ModelBuilderTest.java 2011-09-04 12:44:47 UTC (rev 1308) @@ -478,7 +478,8 @@ FieldDef fld = new FieldDef(); fld.setName( "count" ); fld.setType( new TypeDef("int") ); - builder.addField(fld); + builder.beginField(fld); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -496,7 +497,8 @@ FieldDef fld = new FieldDef(); fld.getModifiers().add("blah2"); fld.getModifiers().add("blah"); - builder.addField(fld); + builder.beginField(fld); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -515,7 +517,8 @@ fld.setName( "count" ); fld.setType( new TypeDef("int") ); fld.setDimensions( 0 ); - builder.addField(fld); + builder.beginField(fld); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -533,7 +536,8 @@ fld.setType( new TypeDef("int") ); fld.setDimensions( 1 ); - builder.addField(fld); + builder.beginField(fld); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -550,7 +554,8 @@ fld.setName( "count" ); fld.setType( new TypeDef("int") ); fld.setDimensions( 2 ); - builder.addField(fld); + builder.beginField(fld); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -631,7 +636,8 @@ builder.beginClass(new ClassDef()); builder.addJavaDoc("Hello"); - builder.addField(new FieldDef()); + builder.beginField(new FieldDef()); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource(); @@ -644,14 +650,16 @@ builder.addJavaDoc("Thing"); builder.beginClass(new ClassDef()); - builder.addField(new FieldDef());// f0 + builder.beginField(new FieldDef());// f0 + builder.endField(); builder.addJavaDoc("Hello"); builder.beginMethod(); builder.endMethod(new MethodDef());//m0 builder.addJavaDoc("Hello field"); - builder.addField(new FieldDef());//f1 + builder.beginField(new FieldDef());//f1 + builder.endField(); builder.beginMethod(); builder.endMethod(new MethodDef());//m1 @@ -735,7 +743,8 @@ builder.addJavaDoc(""); builder.addJavaDocTag(new TagDef("chairs", "are boring")); - builder.addField(new FieldDef()); + builder.beginField(new FieldDef()); + builder.endField(); builder.endClass(); JavaSource source = builder.getSource();
Modified: trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java (1307 => 1308)
--- trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java 2011-09-04 11:11:58 UTC (rev 1307) +++ trunk/qdox/src/test/java/com/thoughtworks/qdox/parser/ParserTest.java 2011-09-04 12:44:47 UTC (rev 1308) @@ -1706,7 +1706,8 @@ // verify verify(builder).beginClass( classCaptor.capture() ); - verify(builder).addField( fieldCaptor.capture() ); + verify(builder).beginField( fieldCaptor.capture() ); + verify(builder).endField(); verify(builder).endClass(); ClassDef cls = classCaptor.getValue(); @@ -1745,7 +1746,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -1785,9 +1787,10 @@ ArgumentCaptor<FieldDef> fieldCaptor = ArgumentCaptor.forClass(FieldDef.class); // verify - verify(builder).beginClass( classCaptor.capture() ); - verify(builder).addField( fieldCaptor.capture() ); - verify(builder).endClass(); + verify( builder ).beginClass( classCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); + verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); assertEquals( "MyClass", cls.getName() ); FieldDef fld = fieldCaptor.getValue(); @@ -1822,9 +1825,10 @@ ArgumentCaptor<FieldDef> fieldCaptor = ArgumentCaptor.forClass(FieldDef.class); // verify - verify(builder).beginClass( classCaptor.capture() ); - verify(builder, times(2)).addField( fieldCaptor.capture() ); - verify(builder).endClass(); + verify( builder ).beginClass( classCaptor.capture() ); + verify( builder, times( 2 ) ).beginField( fieldCaptor.capture() ); + verify( builder, times( 2 ) ).endField(); + verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); assertEquals( "MyClass", cls.getName() ); @@ -1864,7 +1868,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -1906,7 +1911,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2047,9 +2053,10 @@ ArgumentCaptor<FieldDef> fieldCaptor = ArgumentCaptor.forClass(FieldDef.class); // verify - verify(builder).beginClass( classCaptor.capture() ); - verify(builder).addField( fieldCaptor.capture() ); - verify(builder).endClass(); + verify( builder ).beginClass( classCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); + verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); assertEquals( "x", cls.getName() ); @@ -2085,7 +2092,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2125,7 +2133,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2163,7 +2172,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder ).addField( fieldCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2202,9 +2212,10 @@ ArgumentCaptor<FieldDef> fieldCaptor = ArgumentCaptor.forClass(FieldDef.class); // verify - verify(builder).beginClass( classCaptor.capture() ); - verify(builder).addField( fieldCaptor.capture() ); - verify(builder).endClass(); + verify( builder ).beginClass( classCaptor.capture() ); + verify( builder ).beginField( fieldCaptor.capture() ); + verify( builder ).endField(); + verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); assertEquals( "x", cls.getName() ); @@ -2245,7 +2256,8 @@ // verify verify( builder ).beginClass( classCaptor.capture() ); - verify( builder, times( 2 ) ).addField( fieldCaptor.capture() ); + verify( builder, times( 2 ) ).beginField( fieldCaptor.capture() ); + verify( builder, times( 2 ) ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2617,7 +2629,8 @@ verify( builder ).beginClass( classCaptor.capture() ); // verify(mockBuilder).beginConstructor(); // verify(mockBuilder).endConstructor(mth); - verify( builder, times( 2 ) ).addField( f.capture() ); + verify( builder, times( 2 ) ).beginField( f.capture() ); + verify( builder, times( 2 ) ).endField(); verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); @@ -2655,11 +2668,12 @@ ArgumentCaptor<FieldDef> f = ArgumentCaptor.forClass(FieldDef.class); // verify - verify(builder).beginClass( classCaptor.capture() ); -// verify(mockBuilder).beginConstructor(); -// verify(mockBuilder).endConstructor(mth); - verify(builder).addField( f.capture() ); - verify(builder).endClass(); + verify( builder ).beginClass( classCaptor.capture() ); + // verify(mockBuilder).beginConstructor(); + // verify(mockBuilder).endConstructor(mth); + verify( builder ).beginField( f.capture() ); + verify( builder ).endField(); + verify( builder ).endClass(); ClassDef cls = classCaptor.getValue(); assertEquals( "x", cls.getName() );
To unsubscribe from this list please visit:
