container/common/src/main/java/org/mobicents/slee/container/deployment/ClassUtils.java
public static Map getSuperClassesAbstractMethodsFromInterface(CtClass sbbAbstractClass) {
    	HashMap abstractMethods = new HashMap();
    	CtMethod[] methods = null;

    	ArrayList<CtClass> superClasses = new ArrayList<CtClass>();
    	superClasses.add(sbbAbstractClass);
    	ArrayList<CtClass> superClassesProcessed = new ArrayList<CtClass>();
    	
    	try {
    		while(!superClasses.isEmpty()) {
    			// remove head
    			CtClass ctClass = superClasses.remove(0);
    			superClassesProcessed.add(ctClass);
    			// get its methods
    			methods = ctClass.getDeclaredMethods();
    			for (CtMethod ctMethod:methods)	{
    				abstractMethods.put(getMethodKey(ctMethod), ctMethod);
    			}
    			// get super interfaces
    			for(CtClass anotherCtClass : ctClass.getInterfaces()) {
    				if (!superClassesProcessed.contains(anotherCtClass)) {
    					superClasses.add(anotherCtClass);
    				}
    			}
    			try {
    				ctClass.detach();
    			}
    			catch (Exception e) {
    				// ignore
    			}
    		}
    	} catch (NotFoundException e) {
    		logger.error(e);
    	}
    	return abstractMethods;
    }
public static Map getSuperClassesAbstractMethodsFromInterface(CtClass sbbAbstractClass) {
    	HashMap abstractMethods = new HashMap();
    	CtMethod[] methods = null;

    	ArrayList<CtClass> superClasses = new ArrayList<CtClass>();
    	superClasses.add(sbbAbstractClass);
    	ArrayList<CtClass> superClassesProcessed = new ArrayList<CtClass>();
    	
    	try {
    		while(!superClasses.isEmpty()) {
    			// remove head
    			CtClass ctClass = superClasses.remove(0);
    			superClassesProcessed.add(ctClass);
    			// get its methods
    			methods = ctClass.getDeclaredMethods();
    			for (CtMethod ctMethod:methods)	{
    				abstractMethods.put(getMethodKey(ctMethod), ctMethod);
    			}
    			// get super interfaces
    			for(CtClass anotherCtClass : ctClass.getInterfaces()) {
    				if (!superClassesProcessed.contains(anotherCtClass)) {
    					superClasses.add(anotherCtClass);
    				}
    			}
    			try {
    				ctClass.detach();
    			}
    			catch (Exception e) {
    				// ignore
    			}
    		}
    	} catch (NotFoundException e) {
    		logger.error(e);
    	}
    	return abstractMethods;
    }
Collects all methods of the interfaces implemented/extended by the specified {@link CtClass}
@param sbbAbstractClass
@return