code: public static LinkedList<Method>
                      getLIFOMethodList(List<Method> methodList, LinkedList<Class<?>> lifoSuperClassesList)
      {
          // Create LinkedList to be returned.
          LinkedList<Method> sortedList = new LinkedList<Method>();
  
          // For each Class object in sorted list of super classes.
          for (Class<?> c : lifoSuperClassesList)
          {
              // Break out of loop if Method object list is empty,
              // which most like became empty during last iteration
              // of this loop.
              if (methodList.isEmpty())
              {
                  break;
              }
  
              // Create an Iterator over the Method object list and
              // iterate over the list.
              Iterator<Method> it = methodList.iterator();
              while (it.hasNext())
              {
                  Method m = it.next();
                  if (m.getDeclaringClass() == c)
                  {
                      // This method is a method of the current Class object,
                      // so added to front of LIFO and remove it from Method
                      // object list so that it is not processed again.
                      sortedList.addFirst(m);
                      it.remove();
                  }
              }
          }
  
          // Return the soreted LIFO list.
          return sortedList;
      }
docs: Sorts a specified Method object list into a LIFO list where the
  first out is the Method object of the most generic super class
  of an interceptor class and the last out is a method of the
  interceptor class itself.
  
  @param methodList is the list of Method objects to be sorted.
  
  @param lifoSuperClassesList is a LIFO list of Class objects where
  the first out is the most generic super class of an interceptor
  class and the last out is the interceptor class itself. Use the {@link #getLIFOSuperClassesList(Class)} method to obtain this list.
  @return