Title: [710] trunk/qdox/src/test/com/thoughtworks/qdox: Fix for QDOX-203: support ClassLibrary.addSourceFolder()

Diff

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java (709 => 710)

--- trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java	2010-03-05 18:41:47 UTC (rev 709)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java	2010-03-08 21:58:28 UTC (rev 710)
@@ -54,14 +54,18 @@
 		JavaClass result = cache.getClassByName(name);
 		if(result == null && builder != null) {
 			result = builder.createBinaryClass(name);
+			
+			if ( result == null ) {
+			    result = builder.createSourceClass(name);
+			}
+			if ( result == null ) {
+                result = builder.createUnknownClass(name);
+			}
+			
 			if(result != null) {
 				add(result);
 		        result.setJavaClassContext(this);
 			}
-			else {
-				result = builder.createUnknownClass(name);
-				add(result);
-			}
 		}
 		return result;
 	}

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java (709 => 710)

--- trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2010-03-05 18:41:47 UTC (rev 709)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2010-03-08 21:58:28 UTC (rev 710)
@@ -143,6 +143,32 @@
         }
         return context.getClassByName(name);
     }
+    
+    protected JavaClass createSourceClass(String name) {
+        File sourceFile = context.getClassLibrary().getSourceFile( name );
+        if (sourceFile != null) {
+            try
+            {
+                JavaSource source = addSource( sourceFile );
+                for (int index = 0; index < source.getClasses().length; index++) {
+                    JavaClass clazz = source.getClasses()[index];
+                    if (name.equals(clazz.getFullyQualifiedName())) {
+                        return clazz;
+                    }
+                }
+                return source.getNestedClassByName( name );
+            }
+            catch ( FileNotFoundException e )
+            {
+                //nop
+            }
+            catch ( IOException e )
+            {
+                //nop
+            }
+        }
+        return null;
+    }
 
     protected JavaClass createUnknownClass(String name) {
         ModelBuilder unknownBuilder = new ModelBuilder(context, docletTagFactory, new HashMap());

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/model/ClassLibrary.java (709 => 710)

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/ClassLibrary.java	2010-03-05 18:41:47 UTC (rev 709)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/ClassLibrary.java	2010-03-08 21:58:28 UTC (rev 710)
@@ -1,5 +1,6 @@
 package com.thoughtworks.qdox.model;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.Serializable;
@@ -41,6 +42,7 @@
     private final Map classNameToClassMap = new HashMap();
     private boolean defaultClassLoadersAdded = false;
     private transient List classLoaders = new ArrayList();
+    private List sourceFolders = new ArrayList(); //<File>
     
     /**
      * Remember to add bootstrap classes
@@ -61,11 +63,27 @@
     public boolean contains(String className) {
         if (classNames.contains(className)) {
             return true;
+        }
+        else if (getSourceFile(className) != null) {
+            return true;
         } else {
             return getClass(className) != null;
         }
     }
 
+    public File getSourceFile( String className )
+    {
+        for(Iterator iterator = sourceFolders.iterator(); iterator.hasNext();) {
+            File sourceFolder = (File) iterator.next();
+            String mainClassName = className.split( "\\$" )[0];
+            File classFile = new File(sourceFolder, mainClassName.replace( '.', File.separatorChar ) + ".java");
+            if ( classFile.exists() && classFile.isFile() ) {
+                return classFile;
+            }
+        }
+        return null;
+    }
+
     public Class getClass(String className) {
         Class cachedClass = (Class) classNameToClassMap.get(className);
         if (cachedClass != null) {
@@ -108,6 +126,10 @@
         defaultClassLoadersAdded = true;
     }
 
+    public void addSourceFolder( File sourceFolder ) {
+        sourceFolders.add( sourceFolder );
+    }
+    
     private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
         in.defaultReadObject();
         classLoaders = new ArrayList();

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaClass.java (709 => 710)

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaClass.java	2010-03-05 18:41:47 UTC (rev 709)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaClass.java	2010-03-08 21:58:28 UTC (rev 710)
@@ -223,6 +223,11 @@
     public JavaSource getParentSource() {
         return (getParentClass() != null ? getParentClass().getParentSource() : source);
     }
+    
+    public JavaSource getSource()
+    {
+        return getParentSource();
+    }
 
     public JavaPackage getPackage() {
         return getParentSource() != null ? getParentSource().getPackage() : javaPackage;

Modified: trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java (709 => 710)

--- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2010-03-05 18:41:47 UTC (rev 709)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2010-03-08 21:58:28 UTC (rev 710)
@@ -1238,5 +1238,20 @@
         assertEquals( 2, javaSource1.getPackage().getLineNumber() );
         assertEquals( 1, javaSource2.getPackage().getLineNumber() );
     }
+    
+    public void testSourceFolder() throws Exception {
+        JavaDocBuilder builder = new JavaDocBuilder();
+        builder.getClassLibrary().addSourceFolder( new File("target/test-source") );
+        String source = "package com.foo;\n" +
+        		"import com.blah.*;\n" +
+        		"public abstract class Me {\n" +
+        		" public abstract Thing getThing(); " +
+        		"}";
+        builder.addSource( new StringReader( source ) );
+        JavaClass clazz = builder.addSource( new StringReader( source ) ).getClasses()[0];
+        JavaClass thing = clazz.getMethods()[0].getReturns().getJavaClass();
+        assertEquals("com.blah.Thing", thing.getFullyQualifiedName());
+        assertNotNull(thing.getSource());
+    }
 }
 


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to