Title: [1428] trunk/qdox/src/main/java/com/thoughtworks/qdox/parser/impl/BinaryClassParser.java: Refactor BinaryClassParser to support nested classes
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:

http://xircles.codehaus.org/manage_email

Reply via email to