@Override
    protected void invoke(@NotNull ActionContext context, @NotNull PsiClass subclass, @NotNull ModPsiUpdater updater) {
      PsiClass parentClass = myParentClassPointer.getElement();
      if (parentClass == null || !parentClass.hasModifierProperty(PsiModifier.SEALED)) return;
      if (ImplementOrExtendFix.implementOrExtend(parentClass, subclass) == null) return;
      PsiModifierList modifiers = subclass.getModifierList();
      if (modifiers == null) return;
      if (hasSealedClassSubclassModifier(modifiers)) return;
      modifiers.setModifierProperty(myModifier, true);
      Query<PsiClass> subclassInheritors = DirectClassInheritorsSearch.search(subclass);
      if (PsiModifier.FINAL.equals(myModifier) && subclassInheritors.findFirst() != null ||
          PsiModifier.SEALED.equals(myModifier) && subclassInheritors.anyMatch(child -> !hasSealedClassSubclassModifier(child))) {
        updater.moveCaretTo(subclass);
      }
    }
@Override
    protected void invoke(@NotNull ActionContext context, @NotNull PsiClass subclass, @NotNull ModPsiUpdater updater)