@Override
    public void visitMethod(@NotNull PsiMethod method) {
      //no call to super, so we don't drill into anonymous classes
      if (method.isConstructor()) {
        return;
      }
      final PsiClass containingClass = method.getContainingClass();
      if (containingClass == null) {
        return;
      }
      if (containingClass.isInterface() ||
          containingClass.isAnnotationType()) {
        return;
      }
      if (!method.hasModifierProperty(PsiModifier.ABSTRACT)) {
        return;
      }
      final PsiMethod[] superMethods = method.findSuperMethods();
      for (final PsiMethod superMethod : superMethods) {
        final PsiClass superClass = superMethod.getContainingClass();
        if (superClass == null) {
          continue;
        }
        final String superClassName = superClass.getQualifiedName();
        if (!superClass.isInterface() &&
            !CommonClassNames.JAVA_LANG_OBJECT.equals(superClassName) &&
            !superMethod.hasModifierProperty(PsiModifier.ABSTRACT)) {
          registerMethodError(method);
          return;
        }
      }
    }
@Override
    public void visitMethod(@NotNull PsiMethod method)