- Revision
- 1428
- Author
- rfscholte
- Date
- 2011-10-19 15:00:39 -0500 (Wed, 19 Oct 2011)
Log Message
Refactor BinaryClassParser to support nested classes
Modified Paths
Diff
Modified: trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java (1427 => 1428)
--- trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-10-18 20:01:20 UTC (rev 1427) +++ trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java 2011-10-19 20:00:39 UTC (rev 1428) @@ -36,13 +36,13 @@ public class BinaryClassParser { - private Class<?> clazz; + private Class<?> declaringClazz; private ModelBuilder binaryBuilder; - public BinaryClassParser( Class<?> clazz, ModelBuilder modelBuilder ) + public BinaryClassParser( Class<?> declaringClazz, ModelBuilder modelBuilder ) { - this.clazz = clazz; + this.declaringClazz = declaringClazz; this.binaryBuilder = modelBuilder; } @@ -50,84 +50,89 @@ { try { - String name = clazz.getName(); + String name = declaringClazz.getName(); // Set the package name and class name String packageName = getPackageName( name ); binaryBuilder.addPackage( new PackageDef( packageName ) ); - ClassDef classDef = new ClassDef( getClassName( name ) ); + addClass( declaringClazz ); - // Set the extended class and interfaces. - Class<?>[] interfaces = clazz.getInterfaces(); - if ( clazz.isInterface() ) - { - // It's an interface - classDef.setType( ClassDef.INTERFACE ); - for ( int i = 0; i < interfaces.length; i++ ) - { - Class<?> anInterface = interfaces[i]; - classDef.getExtends().add( new TypeDef( anInterface.getName() ) ); - } - } - else - { - // It's a class - for ( int i = 0; i < interfaces.length; i++ ) - { - Class<?> anInterface = interfaces[i]; - classDef.getImplements().add( new TypeDef( anInterface.getName() ) ); - } - Class<?> superclass = clazz.getSuperclass(); - if ( superclass != null ) - { - classDef.getExtends().add( new TypeDef( superclass.getName() ) ); - } - } + return true; + } + catch ( NoClassDefFoundError e ) + { + return false; + } + } - addModifiers( classDef.getModifiers(), clazz.getModifiers() ); + private void addClass( Class<?> clazz ) + { + ClassDef classDef = new ClassDef( getClassName( clazz.getName() ) ); - binaryBuilder.beginClass( classDef ); - - // add the constructors - // - // This also adds the default constructor if any which is different - // 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++ ) + // Set the extended class and interfaces. + Class<?>[] interfaces = clazz.getInterfaces(); + if ( clazz.isInterface() ) + { + // It's an interface + classDef.setType( ClassDef.INTERFACE ); + for ( int i = 0; i < interfaces.length; i++ ) { - binaryBuilder.beginConstructor(); - MethodDef methodDef = createMethodDef( constructors[i], binaryBuilder ); - binaryBuilder.endConstructor( methodDef ); + Class<?> anInterface = interfaces[i]; + classDef.getExtends().add( new TypeDef( anInterface.getName() ) ); } - - // add the methods - Method[] methods = clazz.getDeclaredMethods(); - for ( int i = 0; i < methods.length; i++ ) + } + else + { + // It's a class + for ( int i = 0; i < interfaces.length; i++ ) { - binaryBuilder.beginMethod(); - MethodDef methodDef = createMethodDef( methods[i], binaryBuilder ); - binaryBuilder.endMethod( methodDef ); + Class<?> anInterface = interfaces[i]; + classDef.getImplements().add( new TypeDef( anInterface.getName() ) ); } - - Field[] fields = clazz.getDeclaredFields(); - for ( int i = 0; i < fields.length; i++ ) + Class<?> superclass = clazz.getSuperclass(); + if ( superclass != null ) { - addField( fields[i], binaryBuilder ); + classDef.getExtends().add( new TypeDef( superclass.getName() ) ); } + } - binaryBuilder.endClass(); + addModifiers( classDef.getModifiers(), clazz.getModifiers() ); - return true; + binaryBuilder.beginClass( classDef ); + + // add the constructors + // + // This also adds the default constructor if any which is different + // 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++ ) + { + binaryBuilder.beginConstructor(); + MethodDef methodDef = createMethodDef( constructors[i] ); + binaryBuilder.endConstructor( methodDef ); } - catch ( NoClassDefFoundError e ) + + // add the methods + Method[] methods = clazz.getDeclaredMethods(); + for ( int i = 0; i < methods.length; i++ ) { - return false; + binaryBuilder.beginMethod(); + MethodDef methodDef = createMethodDef( methods[i] ); + binaryBuilder.endMethod( methodDef ); } + + Field[] fields = clazz.getDeclaredFields(); + for ( int i = 0; i < fields.length; i++ ) + { + addField( fields[i] ); + } + + binaryBuilder.endClass(); } - private void addModifiers( Set<String> set, int modifier ) + private static void addModifiers( Set<String> set, int modifier ) { String modifierString = Modifier.toString( modifier ); for ( StringTokenizer stringTokenizer = new StringTokenizer( modifierString ); stringTokenizer.hasMoreTokens(); ) @@ -136,7 +141,7 @@ } } - private void addField( Field field, ModelBuilder binaryBuilder ) + private void addField( Field field ) { FieldDef fieldDef = new FieldDef( field.getName() ); Class<?> fieldType = field.getType(); @@ -148,7 +153,7 @@ binaryBuilder.endField(); } - private MethodDef createMethodDef( Member member, ModelBuilder binaryBuilder ) + private MethodDef createMethodDef( Member member ) { MethodDef methodDef = new MethodDef(); // The name of constructors are qualified. Need to strip it.
To unsubscribe from this list please visit:
