docs: public void add(AbstractSchemaProperty property) {
          Class type = property.getClass();
          properties.put(type, property);
          if (SchemaProperty.class.isAssignableFrom(type)) {
              propertyNames.add(property.getName());
          } else if (SchemaPropertyList.class.isAssignableFrom(type)) {
              propertyNames.add(property.getName());
          } else if (SchemaPropertyRef.class.isAssignableFrom(type)) {
              referenceNames.add(property.getName());
          } else if (SchemaPropertyRefList.class.isAssignableFrom(type)) {
              referenceNames.add(property.getName());
          } else if (SchemaPropertyRefMap.class.isAssignableFrom(type)) {
              referenceNames.add(property.getName());
          } else {
              throw new IllegalArgumentException("Unknown property type " + type.getName());
          }
      }