boolean (PsiClass aClass) { final PsiMethod[] methods = aClass.getMethods(); for (final PsiMethod method : methods) { if (isEmptyConstructor(method)) { continue; } if (!method.hasModifierProperty(PsiModifier.ABSTRACT)) { if (MethodUtils.isToString(method) || MethodUtils.isHashCode(method) || MethodUtils.isEquals(method)) { // can't have default methods overriding Object methods. return false; } if (!reportClassesWithNonAbstractMethods || !PsiUtil.isLanguageLevel8OrHigher(aClass)) { return false; } } if (!method.hasModifierProperty(PsiModifier.PUBLIC) || method.hasModifierProperty(PsiModifier.FINAL)) { return false; } } return true; }