@Override
  protected void setInstanceIdValue(int id, Scriptable start, Object value) {
    Scriptable original = start;
    AttrProxyPrototype proxy = this;
    while (start != null && !(start instanceof AttrProxyPrototype)) {
      start = start.getPrototype();
    }

    if (start instanceof AttrProxyPrototype) {
      proxy = (AttrProxyPrototype) start;
    }

    switch (id) {
      case Id_specified:
        proxy.setProperty("specified", value);
        proxy.onPropertyChanged("specified", value);
        break;
      case Id_ownerElement:
        proxy.setProperty("ownerElement", value);
        proxy.onPropertyChanged("ownerElement", value);
        break;
      case Id_name:
        proxy.setProperty("name", value);
        proxy.onPropertyChanged("name", value);
        break;
      case Id_value:
        proxy.setter_value(value);
        break;
      default:
        throw new IllegalArgumentException(String.valueOf(id));
    }
  }
  @Override
  protected Object getInstanceIdValue(int id, Scriptable start) {
    AttrProxyPrototype proxy = this;
    while (start != null && !(start instanceof AttrProxyPrototype)) {
      start = start.getPrototype();
    }

    if (start instanceof AttrProxyPrototype) {
      proxy = (AttrProxyPrototype) start;
    }

    switch (id) {
      case Id_specified:
        return proxy.getter_specified();
      case Id_ownerElement:
        return proxy.getter_ownerElement();
      case Id_name:
        return proxy.getter_name();
      case Id_value:
        return proxy.getter_value();
      default:
        throw new IllegalArgumentException(String.valueOf(id));
    }
  }