private IType getDefiningType(Object element) throws JavaScriptModelException { int kind = ((IJavaScriptElement) element).getElementType(); if (kind != IJavaScriptElement.METHOD && kind != IJavaScriptElement.FIELD && kind != IJavaScriptElement.INITIALIZER) { return null; } IType declaringType = ((IMember) element).getDeclaringType(); if (kind != IJavaScriptElement.METHOD) { return declaringType; } ITypeHierarchy hierarchy = fHierarchy.getHierarchy(); if (hierarchy == null) { return declaringType; } IFunction method = (IFunction) element; MethodOverrideTester tester = new MethodOverrideTester(declaringType, hierarchy); IFunction res = tester.findDeclaringMethod(method, true); if (res == null || method.equals(res)) { return declaringType; } return res.getDeclaringType(); }