@Override
    public void visitMethod(@NotNull PsiMethod method) {
      super.visitMethod(method);
      if (method.getNameIdentifier() == null || !method.hasModifierProperty(PsiModifier.ABSTRACT)) {
        return;
      }
      final PsiClass containingClass = method.getContainingClass();
      if (containingClass == null) {
        return;
      }
      final InheritorFinder inheritorFinder = new InheritorFinder(containingClass);
      for (final PsiClass inheritor : inheritorFinder.getInheritors()) {
        if (hasMatchingImplementation(inheritor, method, containingClass)) {
          continue;
        }
        if (inheritor.isEnum()) {
          final List<PsiEnumConstant> enumConstants = PsiTreeUtil.getChildrenOfTypeAsList(inheritor, PsiEnumConstant.class);
          for (PsiEnumConstant enumConstant : enumConstants) {
            final PsiEnumConstantInitializer initializingClass = enumConstant.getInitializingClass();
            if (initializingClass == null || !hasMatchingImplementation(initializingClass, method, containingClass)) {
              registerMethodError(method);
              return;
            }
          }
          continue;
        }
        registerMethodError(method);
        return;
      }
    }
@Override
    public void visitMethod(@NotNull PsiMethod method)