- Revision
- 710
- Author
- rfscholte
- Date
- 2010-03-08 15:58:28 -0600 (Mon, 08 Mar 2010)
Log Message
Fix for QDOX-203: support ClassLibrary.addSourceFolder()
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/ClassLibrary.java
- trunk/qdox/src/java/com/thoughtworks/qdox/model/JavaClass.java
- trunk/qdox/src/test/com/thoughtworks/qdox/JavaDocBuilderTest.java
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:
