void (@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; } }