class FormDocumentImpl extends StatementDocumentImpl implements FormDocument {

	@Override
	public FormDocument withGrammaticalFeature(ItemIdValue grammaticalFeature) {
		if (grammaticalFeatures.contains(grammaticalFeature)) {
			return this;
		}
		List<ItemIdValue> newGrammaticalFeatures = new ArrayList<>(grammaticalFeatures);
		newGrammaticalFeatures.add(grammaticalFeature);
		return new FormDocumentImpl(getEntityId(), representations, newGrammaticalFeatures, claims, revisionId);
	}

	  FormDocumentImpl(
			FormIdValue id,
			List<MonolingualTextValue> representations,
			List<ItemIdValue> grammaticalFeatures,
			List<StatementGroup> statements,
			long revisionId);
	@JsonCreator  FormDocumentImpl(
			@JsonProperty("id") String jsonId,
			@JsonProperty("representations") @JsonDeserialize(contentAs=TermImpl.class) Map<String, MonolingualTextValue> representations,
			@JsonProperty("grammaticalFeatures") List<String> grammaticalFeatures,
			@JsonProperty("claims") Map<String, List<StatementImpl.PreStatement>> claims,
			@JsonProperty("lastrevid") long revisionId,
			@JacksonInject("siteIri") String siteIri);
	private  FormDocumentImpl(
			FormIdValue id,
			Map<String,MonolingualTextValue> representations,
			List<ItemIdValue> grammaticalFeatures,
			Map<String, List<Statement>> statements,
			long revisionId);

}