I'm trying to write an XDoclet body tag that iterates through an abstract
class' unimplemented methods.  In addition to searching the inheritance tree
for abstract methods, I presume that I would also need to examine all
implemented interfaces.  For some reason, XClass interfaces are not being
identified as such and 'getMethods()' is returning an empty collection.
Things work fine for XClass objects that represent classes
(test.bean.TestBean1Ejb).  j2ee.jar is included the classpath defined in my
ANT file.  Any idea where I'm going wrong?


package whatever;

import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

import xdoclet.XDocletException;
import xdoclet.tagshandler.AbstractProgramElementTagsHandler;
import xjavadoc.XClass;
import xjavadoc.XMethod;

/** Deals with (abstract) class' unimplemented methods. */
public class UnimplementedMethodsHandler extends
AbstractProgramElementTagsHandler {
// constants
----------------------------------------------------------------------------
----
        private static final DummyLogger LOGGER = new DummyLogger();

// methods
----------------------------------------------------------------------------
------
        /**
         * Evaluate body for each method that requires an implementation.
Accounts for access
         * modifiers and class hierarchies.  What happens is class overrides
abstract method
         * which it can't see?  What if abstract method overrides concrete
method?
         */
        public void forAllUnimplementedMethods(
                String pTemplate, Properties pAttributes
        ) throws XDocletException {
                if(getCurrentClass() == null) throw new
XDocletException("Current class is null");

                final Map methods = unimplementedMethods(getCurrentClass());
                if (LOGGER.isDebugEnabled()) {
                        LOGGER.debug("Unimplemented methods: " +
methods.keySet());
                }

                for (Iterator iter = methods.values().iterator();
iter.hasNext();) {
                        final XMethod method = (XMethod) iter.next();
                        setCurrentMethod(method);
                        setCurrentClass(method.getContainingClass());
                        generate(pTemplate);
                }
        }

        /**
         * Return collection of all methods that would need to be
         * implemented by a concrete subclass/implementor.
         * @return Map from signature (String) to XMethod
         */
        private static Map unimplementedMethods(XClass pClass) {
                LOGGER.debug("Finding unimplemented methods for " +
pClass.getName() + "...");

                // map from full signature to XMethods declared in
interfaces
                final Map interfaceMethods = new HashMap();

                // add methods for super-interfaces
                // I assume that 'getInterfaces()' includes interfaces
declared in superclasses
                for (Iterator iter = pClass.getInterfaces().iterator();
iter.hasNext();) {
        
interfaceMethods.putAll(unimplementedMethods((XClass) iter.next()));
                }

                LOGGER.debug(pClass.getQualifiedName() + " interface?  " +
pClass.isInterface());
                LOGGER.debug(
                        pClass.getQualifiedName() + " subclass of Object?  "
+
                         pClass.isSubclassOf("java.lang.Object", true)
                );
                LOGGER.debug(
                        pClass.getQualifiedName() + " has " +
pClass.getMethods().size() + " method(s)"
                );

                // TODO...
                return Collections.EMPTY_MAP;
        }
}






Output:
-----------------
Buildfile: C:\eclipse\workspace\CmpWrapTest\build.xml
cmpwrap:
compile:
    [javac] Compiling 1 source file to
C:\eclipse\workspace\CmpWrap\generated\bin2
build:
      [jar] Building jar: C:\eclipse\workspace\CmpWrap\generated\cmpwrap.jar
  [cmpwrap] (XDocletMain.start                   47  ) Running
<twostagedatamanagement/>
  [cmpwrap] (TemplateSubTask.engineStarted       802 ) Generating output for
'test.bean.TestBean1Ejb' using template file
'jar:file:C:\eclipse\workspace\CmpWrap\generated\cmpwrap.jar!/twostagedatama
nagement.xdt'.
  [cmpwrap] Finding unimplemented methods for TestBean1Ejb...
  [cmpwrap] Finding unimplemented methods for EntityBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] Finding unimplemented methods for EnterpriseBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] javax.ejb.EnterpriseBean interface?  false
  [cmpwrap] javax.ejb.EnterpriseBean subclass of Object?  false
  [cmpwrap] javax.ejb.EnterpriseBean has 0 method(s)
  [cmpwrap] javax.ejb.EntityBean interface?  false
  [cmpwrap] javax.ejb.EntityBean subclass of Object?  false
  [cmpwrap] javax.ejb.EntityBean has 0 method(s)
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] Finding unimplemented methods for EnterpriseBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] javax.ejb.EnterpriseBean interface?  false
  [cmpwrap] javax.ejb.EnterpriseBean subclass of Object?  false
  [cmpwrap] javax.ejb.EnterpriseBean has 0 method(s)
  [cmpwrap] test.bean.TestBean1Ejb interface?  false
  [cmpwrap] test.bean.TestBean1Ejb subclass of Object?  true
  [cmpwrap] test.bean.TestBean1Ejb has 8 method(s)
  [cmpwrap] Unimplemented methods: []
  [cmpwrap] Finding unimplemented methods for TestBean1Ejb...
  [cmpwrap] Finding unimplemented methods for EntityBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] Finding unimplemented methods for EnterpriseBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] javax.ejb.EnterpriseBean interface?  false
  [cmpwrap] javax.ejb.EnterpriseBean subclass of Object?  false
  [cmpwrap] javax.ejb.EnterpriseBean has 0 method(s)
  [cmpwrap] javax.ejb.EntityBean interface?  false
  [cmpwrap] javax.ejb.EntityBean subclass of Object?  false
  [cmpwrap] javax.ejb.EntityBean has 0 method(s)
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] Finding unimplemented methods for EnterpriseBean...
  [cmpwrap] Finding unimplemented methods for Serializable...
  [cmpwrap] java.io.Serializable interface?  false
  [cmpwrap] java.io.Serializable subclass of Object?  false
  [cmpwrap] java.io.Serializable has 0 method(s)
  [cmpwrap] javax.ejb.EnterpriseBean interface?  false
  [cmpwrap] javax.ejb.EnterpriseBean subclass of Object?  false
  [cmpwrap] javax.ejb.EnterpriseBean has 0 method(s)
  [cmpwrap] test.bean.TestBean1Ejb interface?  false
  [cmpwrap] test.bean.TestBean1Ejb subclass of Object?  true
  [cmpwrap] test.bean.TestBean1Ejb has 8 method(s)
BUILD SUCCESSFUL
Total time: 3 seconds


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now. 
http://productguide.itmanagersjournal.com/
_______________________________________________
xdoclet-user mailing list
xdoclet-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xdoclet-user

Reply via email to