- Revision
- 707
- Author
- rfscholte
- Date
- 2010-03-02 05:10:12 -0600 (Tue, 02 Mar 2010)
Log Message
Fix for QDOX-195: package handling
Modified Paths
- trunk/qdox/src/java/com/thoughtworks/qdox/JavaClassContext.java
- trunk/qdox/src/java/com/thoughtworks/qdox/JavaDocBuilder.java
- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaPackage.java
- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaSource.java
- trunk/qdox/src/java/com/thoughtworks/qdox/model/ModelBuilder.java
- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java
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:
