Title: [550] trunk/qdox/src/test/com/thoughtworks/qdox: better test, eliminate bug

Diff

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java (549 => 550)

--- trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2009-02-16 20:39:16 UTC (rev 549)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2009-02-16 22:49:08 UTC (rev 550)
@@ -89,6 +89,7 @@
     private boolean debugLexer;
     private boolean debugParser;
     private ErrorHandler errorHandler;
+    private Map allPackages = new HashMap();
 
     public static interface ErrorHandler {
         void handle(ParseException parseException);
@@ -138,7 +139,7 @@
     }
 
     private JavaClass createUnknownClass(String name) {
-        ModelBuilder unknownBuilder = new ModelBuilder(classLibrary, docletTagFactory);
+        ModelBuilder unknownBuilder = new ModelBuilder(classLibrary, docletTagFactory, new HashMap());
         ClassDef classDef = new ClassDef();
         classDef.name = name;
         unknownBuilder.beginClass(classDef);
@@ -156,7 +157,7 @@
         } else {
             // Create a new builder and mimic the behaviour of the parser.
             // We're getting all the information we need via reflection instead.
-            ModelBuilder binaryBuilder = new ModelBuilder(classLibrary, docletTagFactory);
+            ModelBuilder binaryBuilder = new ModelBuilder(classLibrary, docletTagFactory, new HashMap());
 
             // Set the package name and class name
             String packageName = getPackageName(name);
@@ -307,7 +308,7 @@
     }
 
     public JavaSource addSource(Reader reader, String sourceInfo) {
-        ModelBuilder builder = new ModelBuilder(classLibrary, docletTagFactory);
+        ModelBuilder builder = new ModelBuilder(classLibrary, docletTagFactory, allPackages);
         Lexer lexer = new JFlexLexer(reader);
         Parser parser = new Parser(lexer, builder);
         parser.setDebugLexer(debugLexer);
@@ -327,7 +328,7 @@
         addClasses(source);
 
         JavaPackage pkg = source.getPackage();
-        JavaClass[] classes = getClasses();
+        JavaClass[] classes = source.getClasses();
         if (!packages.contains(pkg)) {
             packages.add(pkg);
         }

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java (549 => 550)

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java	2009-02-16 20:39:16 UTC (rev 549)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java	2009-02-16 22:49:08 UTC (rev 550)
@@ -55,4 +55,19 @@
 	public JavaClass[] getClasses() {
 		return (JavaClass[]) classes.toArray(new JavaClass[classes.size()]);
 	}
+
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        JavaPackage that = (JavaPackage) o;
+
+        if (!name.equals(that.name)) return false;
+
+        return true;
+    }
+
+    public int hashCode() {
+        return name.hashCode();
+    }
 }

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java (549 => 550)

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java	2009-02-16 20:39:16 UTC (rev 549)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java	2009-02-16 22:49:08 UTC (rev 550)
@@ -6,6 +6,8 @@
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Set;
+import java.util.HashMap;
+import java.util.Map;
 
 import com.thoughtworks.qdox.model.annotation.AnnotationFieldRef;
 import com.thoughtworks.qdox.model.annotation.AnnotationVisitor;
@@ -32,14 +34,16 @@
     private String lastComment;
     private List lastTagSet;
     private DocletTagFactory docletTagFactory;
+    private final Map allPackages;
 
     public ModelBuilder() {
-        this(new ClassLibrary(null), new DefaultDocletTagFactory());
+        this(new ClassLibrary(null), new DefaultDocletTagFactory(), new HashMap());
     }
 
-    public ModelBuilder(ClassLibrary classLibrary, DocletTagFactory docletTagFactory) {
+    public ModelBuilder(ClassLibrary classLibrary, DocletTagFactory docletTagFactory, Map allPackages) {
         this.classLibrary = classLibrary;
         this.docletTagFactory = docletTagFactory;
+        this.allPackages = allPackages;
         source = new JavaSource();
         source.setClassLibrary(classLibrary);
         currentParent = source;
@@ -47,8 +51,12 @@
     }
 
     public void addPackage(PackageDef packageDef) {
-    	JavaPackage jPackage = new JavaPackage(packageDef.name);
-    	jPackage.setLineNumber(packageDef.lineNumber);
+        JavaPackage jPackage = (JavaPackage) allPackages.get(packageDef.name);
+        if (jPackage == null) {
+            jPackage = new JavaPackage(packageDef.name);
+            allPackages.put(packageDef.name, jPackage);
+        }
+        jPackage.setLineNumber(packageDef.lineNumber);
     	setAnnotations(jPackage);
         source.setPackage(jPackage); //@todo introduce PackageDef?
     }

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

--- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2009-02-16 20:39:16 UTC (rev 549)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2009-02-16 22:49:08 UTC (rev 550)
@@ -108,11 +108,18 @@
     }
 
     public void testGetPackagesShowsOnePackageAndTwoClasses() {
-        builder.addSource(new StringReader(createOuter()));
+        builder.addSourceTree(new File("target/test-source"));
         JavaPackage[] packages = builder.getPackages();
-        assertEquals(1, packages.length);
-        assertEquals("foo.bar", packages[0].getName());
-        assertEquals(2, packages[0].getClasses().length); // same result as testGetClasses()
+        assertEquals(2, packages.length);
+        assertEquals("com.blah.subpackage", packages[0].getName());
+        assertEquals("com.blah", packages[1].getName());
+        JavaClass[] classes = packages[0].getClasses();
+        assertEquals(1, classes.length);
+        assertEquals("Cheese", classes[0].getName());
+        classes = packages[1].getClasses();
+        assertEquals(2, classes.length);
+        assertEquals("Another", classes[0].getName());
+        assertEquals("Thing", classes[1].getName());
     }
 
     private String createOuter() {


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to