Title: [707] trunk/qdox/src/test/com/thoughtworks/qdox: Fix for QDOX-195: package handling

Diff

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java (706 => 707)

--- trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -1,10 +1,13 @@
 package com.thoughtworks.qdox;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 import com.thoughtworks.qdox.model.ClassLibrary;
 import com.thoughtworks.qdox.model.JavaClass;
 import com.thoughtworks.qdox.model.JavaClassCache;
+import com.thoughtworks.qdox.model.JavaPackage;
 
 /**
  * JavaClassContext gives you a mechanism to get a JavaClass.
@@ -19,6 +22,7 @@
 	private final JavaClassCache cache;
 	private ClassLibrary classLibrary;
 	private JavaDocBuilder builder;
+	private Map packageMap = new HashMap(); // <String, JavaPackage> 
 	
 	public JavaClassContext(JavaDocBuilder builder) {
 		this.builder = builder;
@@ -67,6 +71,11 @@
 	}
 	public void add(JavaClass javaClass) {
 		cache.putClassByName(javaClass.getFullyQualifiedName(), javaClass);
+		
+		JavaPackage jPackage = getPackageByName( javaClass.getPackageName() );
+		if(jPackage != null) {
+		    jPackage.addClass( javaClass );
+		}
 	}
 	
 	
@@ -77,4 +86,30 @@
 	public Class getClass(String name) {
 		return classLibrary.getClass(name);
 	}
+
+
+    public JavaPackage getPackageByName( String name )
+    {
+        return (JavaPackage) packageMap.get( name );
+    }
+
+
+    public void add( JavaPackage jPackage )
+    {
+        String packageName = jPackage.getName();
+        JavaPackage javaPackage = getPackageByName( packageName );
+        if ( javaPackage == null ) {
+            javaPackage = new JavaPackage( packageName );
+            javaPackage.setContext( this );
+            packageMap.put( packageName, javaPackage );
+        }
+        jPackage.setContext( this );
+    }
+
+
+    public JavaPackage[] getPackages()
+    {
+        return (JavaPackage[]) packageMap.values().toArray( new JavaPackage[0] );
+        
+    }
 }

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java (706 => 707)

--- trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -89,7 +89,6 @@
     private boolean debugLexer;
     private boolean debugParser;
     private ErrorHandler errorHandler = new DefaultErrorHandler();
-    private Map allPackages = new HashMap();
 
     public static interface ErrorHandler {
         void handle(ParseException parseException);
@@ -319,7 +318,7 @@
     }
 
     public JavaSource addSource(Reader reader, String sourceInfo) {
-        ModelBuilder builder = new ModelBuilder(context, docletTagFactory, allPackages);
+        ModelBuilder builder = new ModelBuilder(context, docletTagFactory, null);
         Lexer lexer = new JFlexLexer(reader);
         Parser parser = new Parser(lexer, builder);
         parser.setDebugLexer(debugLexer);
@@ -334,16 +333,16 @@
         sources.add(source);
         addClasses(source);
 
-        JavaPackage pkg = source.getPackage();
-        JavaClass[] classes = source.getClasses();
+        JavaPackage pkg = context.getPackageByName( source.getPackageName() );
         if (!packages.contains(pkg)) {
             packages.add(pkg);
         }
-        for (int i = 0; i < classes.length; i++) {
-            if (pkg != null) {
-                pkg.addClass(classes[i]);
-            }
-        }
+//        JavaClass[] classes = source.getClasses();
+//        for (int i = 0; i < classes.length; i++) {
+//            if (pkg != null) {
+//                pkg.addClass(classes[i]);
+//            }
+//        }
 
         return source;
     }

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

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -1,19 +1,19 @@
 package com.thoughtworks.qdox.model;
 
+import java.util.ArrayList;
 import java.util.List;
-import java.util.ArrayList;
 import java.util.Map;
-import java.util.Iterator;
-import java.util.Set;
 
+import com.thoughtworks.qdox.JavaClassContext;
+
 /**
  * A representation of a package.
  * @since 1.9
  */
 public class JavaPackage extends AbstractBaseJavaEntity {
 
+    private JavaClassContext context;
 	private String name;
-    private Map allPackages;
     private Annotation[] annotations = new Annotation[0];
 	private int lineNumber = -1;
 	private List classes = new ArrayList();
@@ -25,9 +25,14 @@
     	this(name, null);
 	}
     
+    /**
+     * 
+     * @param name
+     * @param allPackages
+     * @deprecated allPackages is solved with the context 
+     */
 	public JavaPackage(String name, Map allPackages) {
 		this.name= name;
-        this.allPackages = allPackages;
     }
 
 	public String getName() {
@@ -53,6 +58,11 @@
 	public void setLineNumber(int lineNumber) {
 		this.lineNumber = lineNumber;
 	}
+	
+	public void setContext( JavaClassContext context )
+    {
+        this.context = context;
+    }
 
 	public void addClass(JavaClass clazz) {
 		clazz.setJavaPackage(this);
@@ -65,22 +75,28 @@
      * @return all the classes found for the package
      */
 	public JavaClass[] getClasses() {
-		return (JavaClass[]) classes.toArray(new JavaClass[classes.size()]);
+	    //avoid infinitive  recursion
+	    if (this == context.getPackageByName( name )) {
+	        return (JavaClass[]) classes.toArray(new JavaClass[classes.size()]);
+	    }
+	    else {
+	        return context.getPackageByName( name ).getClasses();
+	    }
 	}
 
     public JavaPackage getParentPackage() {
         String parentName = name.substring(0,name.lastIndexOf("."));
-        return (JavaPackage) allPackages.get(parentName);
+        return (JavaPackage) context.getPackageByName( parentName );
     }
 
     public JavaPackage[] getSubPackages() {
         String expected = name + ".";
-        Set packageKeys = allPackages.keySet();
+        JavaPackage[] jPackages = context.getPackages();
         List retList = new ArrayList();
-        for (Iterator iterator = packageKeys.iterator(); iterator.hasNext();) {
-            String pName = (String) iterator.next();
+        for (int index = 0; index < jPackages.length;index++) {
+            String pName = jPackages[index].getName();
             if (pName.startsWith(expected) && !(pName.substring(expected.length()).indexOf(".") > -1)) {
-                retList.add(allPackages.get(pName));
+                retList.add(context.getPackageByName( pName ));
             }
         }
         return (JavaPackage[]) retList.toArray(new JavaPackage[retList.size()]);

Modified: trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaSource.java (706 => 707)

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaSource.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaSource.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -12,7 +12,6 @@
 import java.util.Map;
 import java.util.Set;
 
-import com.thoughtworks.qdox.DefaultJavaClassCache;
 import com.thoughtworks.qdox.JavaClassContext;
 
 public class JavaSource implements Serializable, JavaClassParent {
@@ -333,4 +332,9 @@
 		return this.context.getClassLibrary();
 	}
 
+    public String getPackageName()
+    {
+        return (packge == null ? "" : packge.getName());
+    }
+
 }

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

--- trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -37,7 +37,6 @@
     private String lastComment;
     private List lastTagSet;
     private DocletTagFactory docletTagFactory;
-    private final Map allPackages;
 
     public ModelBuilder() {
         this(new JavaClassContext(new ClassLibrary()), new DefaultDocletTagFactory(), new HashMap());
@@ -46,21 +45,20 @@
     public ModelBuilder(JavaClassContext context, DocletTagFactory docletTagFactory, Map allPackages) {
         this.context = context;
         this.docletTagFactory = docletTagFactory;
-        this.allPackages = allPackages;
         source = new JavaSource(context);
         currentParent = source;
         currentAnnoDefs = new ArrayList();
     }
 
     public void addPackage(PackageDef packageDef) {
-        JavaPackage jPackage = (JavaPackage) allPackages.get(packageDef.name);
+        JavaPackage jPackage = context.getPackageByName( packageDef.name );;
         if (jPackage == null) {
-            jPackage = new JavaPackage(packageDef.name, allPackages);
-            allPackages.put(packageDef.name, jPackage);
+            jPackage = new JavaPackage(packageDef.name);
+            context.add( jPackage );
         }
         jPackage.setLineNumber(packageDef.lineNumber);
     	setAnnotations(jPackage);
-        source.setPackage(jPackage); //@todo introduce PackageDef?
+        source.setPackage(jPackage);
     }
 
     public void addImport(String importName) {

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

--- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2010-03-01 14:58:41 UTC (rev 706)
+++ trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java	2010-03-02 11:10:12 UTC (rev 707)
@@ -1218,7 +1218,9 @@
             "}";        
         builder.addSource(new StringReader(source));
     }
-    public void _testSharedPackageJavaClasses() {
+    
+    // for QDOX-195
+    public void testSharedPackageJavaClasses() {
         String source1 = "@javax.xml.bind.annotation.XmlSchema(namespace = \"http://docs.oasis-open.org/wsn/br-2\")\n" +
                 "package com.foo;\n" +
         		"public class Bar1 {}";
@@ -1230,11 +1232,11 @@
         assertEquals( 2, jPackage.getClasses().length );
         assertEquals( 2, javaSource1.getPackage().getClasses().length );
         assertEquals( 2, javaSource2.getPackage().getClasses().length );
-        //assertNotSame( javaSource1.getPackage(), javaSource2.getPackage() );
+        assertNotSame( javaSource1.getPackage(), javaSource2.getPackage() );
         assertEquals( 1, javaSource1.getPackage().getAnnotations().length );
         assertEquals( 0, javaSource2.getPackage().getAnnotations().length );
-        assertEquals( 1, javaSource1.getPackage().getLineNumber() );
-        assertEquals( 2, javaSource2.getPackage().getLineNumber() );
+        assertEquals( 2, javaSource1.getPackage().getLineNumber() );
+        assertEquals( 1, javaSource2.getPackage().getLineNumber() );
     }
 }
 


To unsubscribe from this list please visit:

http://xircles.codehaus.org/manage_email

Reply via email to