// Make sure all the methods in the SEI (including any inherited from superinterfaces) are
// implemented by the bean (including inherited methods on the bean), taking into
// account overloaded methods.
Iterator<MethodDescriptionComposite> verifySEIIterator = seiMethods.iterator();
while (verifySEIIterator.hasNext()) {
MethodDescriptionComposite seiMDC = verifySEIIterator.next();
// Make sure the implementation implements this SEI method. Since we have to account
// for method overloading, we look for ALL methods with the same name in the
// implementation, then from that collection of methods, we look for one that has the
// same parameters. If we find one with the same parameters, then we check the return
// and exceptions. Note that in Java, overloaded methods are ones that have the same
// name but different parameters; a difference in the return type or thrown exceptions
// does not constitute overloading and is a compile error.
Iterator<MethodDescriptionComposite> implMDCIterator = implMethods.iterator();
boolean methodImplFound = false;
while (implMDCIterator.hasNext()) {
MethodDescriptionComposite implMDC = implMDCIterator.next();
if (seiMDC.getMethodName().equals(implMDC.getMethodName())) {
// The method names match, so now check the parameters
try {
validateMethodParameters(seiMDC, implMDC, seic.getClassName());
methodImplFound = true;
}