hammant 2002/10/20 04:55:38 Modified: src/java/org/apache/avalon/phoenix/tools/metagenerate MetaGenerateQdoxTask.java XinfoFactory.java src/test/org/apache/avalon/phoenix/tools/metagenerate/test IntegrationTestCase.java Log: Inheritance now works. Tests too. Revision Changes Path 1.4 +2 -1 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/MetaGenerateQdoxTask.java Index: MetaGenerateQdoxTask.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/MetaGenerateQdoxTask.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- MetaGenerateQdoxTask.java 20 Oct 2002 10:25:50 -0000 1.3 +++ MetaGenerateQdoxTask.java 20 Oct 2002 11:55:38 -0000 1.4 @@ -73,7 +73,8 @@ DocletTag block = javaClass.getTagByName("phoenix:block"); if (block != null) { - XinfoFactory factory = new XinfoFactory(m_destDir, javaClass, m_inheritance); + XinfoFactory factory = new XinfoFactory(m_destDir, javaClass, + allClasses, m_inheritance); factory.generate(); } DocletTag topic = javaClass.getTagByName("phoenix:mx-topic"); 1.6 +42 -31 jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/XinfoFactory.java Index: XinfoFactory.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/XinfoFactory.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- XinfoFactory.java 20 Oct 2002 10:25:51 -0000 1.5 +++ XinfoFactory.java 20 Oct 2002 11:55:38 -0000 1.6 @@ -15,6 +15,7 @@ import java.io.IOException; import java.util.HashMap; import java.util.Iterator; +import java.util.ArrayList; /** * A Xinfo Factory @@ -24,6 +25,7 @@ { private JavaClass m_javaClass; private File m_destDir; + private ArrayList m_allClasses; private HashMap m_services = new HashMap(); private HashMap m_dependencies = new HashMap(); private boolean m_inheritance; @@ -34,11 +36,13 @@ * @param destDir * @param javaClass */ - public XinfoFactory( File destDir, JavaClass javaClass, boolean inheritance ) + public XinfoFactory( File destDir, JavaClass javaClass, ArrayList allClasses, + boolean inheritance ) { m_javaClass = javaClass; m_destDir = destDir; m_inheritance = inheritance; + m_allClasses = allClasses; } /** @@ -64,7 +68,7 @@ xinfo.writeEndOfManagementSection(); - processServiceMethod( xinfo ); + processServiceMethod( xinfo, m_inheritance ); xinfo.writeFooter(); xinfo.close(); @@ -88,8 +92,7 @@ String serviceName = service.getNamedParameter( "name" ); m_services.put( serviceName, service ); } - //javaClass = getParentClass(javaClass); // Bug in QDox? - javaClass = null; + javaClass = getParentClass(javaClass); } @@ -109,20 +112,15 @@ private JavaClass getParentClass(JavaClass javaClass) { String parentClassName = javaClass.getSuperClass().getValue(); - System.out.println("--> p " + parentClassName); - JavaClass[] parentSourceClasses = javaClass.getParentSource().getClasses(); - javaClass = null; - for (int i = 0; i < parentSourceClasses.length; i++) - { - JavaClass parentClass = parentSourceClasses[i]; - System.out.println("--> p2 " + parentClass.getFullyQualifiedName()); - if (parentClassName.equals(parentClass.getFullyQualifiedName())) + for (int i = 0; i < m_allClasses.size(); i++) + { + JavaClass jClass = (JavaClass) m_allClasses.get(i); + if (jClass.getFullyQualifiedName().equals(parentClassName)) { - javaClass = parentClass; + return jClass; } - } - return javaClass; + return null; } /** @@ -144,28 +142,41 @@ * @param xinfo The xinfo helper * @throws IOException If a problem */ - private void processServiceMethod( XinfoHelper xinfo ) throws IOException + private void processServiceMethod( XinfoHelper xinfo, boolean inheritance ) throws IOException { - JavaMethod[] methods = m_javaClass.getMethods(); - for( int j = 0; j < methods.length; j++ ) + JavaClass javaClass = m_javaClass; + while (m_javaClass == javaClass || (javaClass != null && inheritance)) { - // dependencies - - JavaMethod method = methods[ j ]; - if( method.getName().equals( "service" ) - && method.getReturns().equals( new Type( "void", 0 ) ) - && method.getParameters().length == 1 - && method.getParameters()[ 0 ].getType().getValue().equals( - "org.apache.avalon.framework.service.ServiceManager" ) ) + JavaMethod[] methods = javaClass.getMethods(); + for( int j = 0; j < methods.length; j++ ) { - DocletTag[] dependencies = method.getTagsByName( "phoenix:dependency" ); - for( int i = 0; i < dependencies.length; i++ ) + // dependencies + + JavaMethod method = methods[ j ]; + if( method.getName().equals( "service" ) + && method.getReturns().equals( new Type( "void", 0 ) ) + && method.getParameters().length == 1 + && method.getParameters()[ 0 ].getType().getValue().equals( + "org.apache.avalon.framework.service.ServiceManager" ) ) { - DocletTag dependency = dependencies[ i ]; - xinfo.writeDependencyLines( dependency.getNamedParameter( "name" ), - dependency.getNamedParameter( "version" ) ); + DocletTag[] dependencies = method.getTagsByName( "phoenix:dependency" ); + for( int i = 0; i < dependencies.length; i++ ) + { + DocletTag dependency = dependencies[ i ]; + m_dependencies.put(dependency.getNamedParameter( "name" ), dependency); + } } } + javaClass = getParentClass(javaClass); + } + + Iterator it = m_dependencies.keySet().iterator(); + while (it.hasNext()) + { + String dependencyName = (String) it.next(); + DocletTag dependency = (DocletTag) m_dependencies.get( dependencyName ); + xinfo.writeDependencyLines( dependencyName, + dependency.getNamedParameter( "version" ) ); } } 1.5 +4 -1 jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/IntegrationTestCase.java Index: IntegrationTestCase.java =================================================================== RCS file: /home/cvs/jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/IntegrationTestCase.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- IntegrationTestCase.java 20 Oct 2002 10:25:51 -0000 1.4 +++ IntegrationTestCase.java 20 Oct 2002 11:55:38 -0000 1.5 @@ -110,7 +110,7 @@ " <!-- services that are offered by this block -->", " <services>", " <service name=\"blah.BlahService\" version=\"1.9\"/>", - // " <service name=\"blah.FooService\"/>", + " <service name=\"blah.FooService\"/>", " </services>", "", " <!-- interfaces that may be exported to manange this block -->", @@ -120,6 +120,9 @@ "", " <!-- services that are required by this block -->", " <dependencies>", + " <dependency>", + " <service name=\"blah.OtherFooService\"/>", + " </dependency>", " <dependency>", " <service name=\"blah.OtherBlahService\" version=\"1.2\"/>", " </dependency>",
-- To unsubscribe, e-mail: <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>