private boolean isDecoratedAsDynamic(@NotNull PyClass cls, boolean inherited) {
    if (inherited) {
      if (isDecoratedAsDynamic(cls, false)) {
        return true;
      }
      for (PyClass base : cls.getAncestorClasses(myTypeEvalContext)) {
        if (base != null && isDecoratedAsDynamic(base, false)) {
          return true;
        }
      }
    }
    else {
      final String docString = cls.getDocStringValue();
      if (docString != null && docString.contains("@DynamicAttrs")) {
        return true;
      }
    }
    return false;
  }
private boolean isDecoratedAsDynamic(@NotNull PyClass cls, boolean inherited)