@Override
  protected void setMirror(@NotNull TreeElement element) throws InvalidMirrorException {
    setMirrorCheckingType(element, null);

    PsiClass mirror = SourceTreeToPsiMap.treeToPsiNotNull(element);

    setMirrorIfPresent(getDocComment(), mirror.getDocComment());

    PsiModifierList modifierList = getModifierList();
    if (modifierList != null && mirror.getModifierList() != null) setMirror(modifierList, mirror.getModifierList());
    if (mirror.getNameIdentifier() != null) setMirrorChecked(getNameIdentifier(), mirror.getNameIdentifier());
    if (mirror.getTypeParameterList() != null) setMirrorChecked(getTypeParameterList(), mirror.getTypeParameterList());
    if (mirror.getExtendsList() != null) setMirrorChecked(getExtendsList(), mirror.getExtendsList());
    if (mirror.getImplementsList() != null) setMirrorChecked(getImplementsList(), mirror.getImplementsList());

    if (mirror instanceof PsiExtensibleClass) {
      PsiExtensibleClass extMirror = (PsiExtensibleClass)mirror;
      setMirrorsChecked(getOwnFields(), extMirror.getOwnFields());
      setMirrorsChecked(getOwnMethods(), extMirror.getOwnMethods());
      setMirrorsChecked(getOwnInnerClasses(), extMirror.getOwnInnerClasses());
    }
    else {
      setMirrorsChecked(getOwnFields(), asList(mirror.getFields()));
      setMirrorsChecked(getOwnMethods(), asList(mirror.getMethods()));
      setMirrorsChecked(getOwnInnerClasses(), asList(mirror.getInnerClasses()));
    }
  }
@Override
  protected void setMirror(@NotNull TreeElement element)