public MethodWrapper findMethodWrapper(IMethod method, Object[] methodWrappers) {
   MethodWrapper thirdLevelMethodWrapper = null;
   for (int i = 0; i < methodWrappers.length; i++) {
     if (method.equals(((MethodWrapper) methodWrappers[i]).getMember())) {
       thirdLevelMethodWrapper = (MethodWrapper) methodWrappers[i];
       break;
     }
   }
   return thirdLevelMethodWrapper;
 }
    private IType getDefiningType(Object element) throws JavaModelException {
      int kind = ((IJavaElement) element).getElementType();

      if (kind != IJavaElement.METHOD
          && kind != IJavaElement.FIELD
          && kind != IJavaElement.INITIALIZER) {
        return null;
      }
      IType declaringType = ((IMember) element).getDeclaringType();
      if (kind != IJavaElement.METHOD) {
        return declaringType;
      }
      ITypeHierarchy hierarchy = getSuperTypeHierarchy(declaringType);
      if (hierarchy == null) {
        return declaringType;
      }
      IMethod method = (IMethod) element;
      MethodOverrideTester tester = new MethodOverrideTester(declaringType, hierarchy);
      IMethod res = tester.findDeclaringMethod(method, true);
      if (res == null || method.equals(res)) {
        return declaringType;
      }
      return res.getDeclaringType();
    }