private boolean allMethodsPublicAbstract(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.isAvailable(JavaFeature.EXTENSION_METHODS, aClass)) {
            return false;
          }
        }
        if (!method.hasModifierProperty(PsiModifier.PUBLIC) || method.hasModifierProperty(PsiModifier.FINAL)) {
          return false;
        }
      }
      return true;
    }
private boolean allMethodsPublicAbstract(PsiClass aClass)