protected void finish(AmenityGroupSpecJSON result)
 {
     if (fieldGeneratorAmenityGroupName.have_value)
     {
         result.setAmenityGroupName(fieldGeneratorAmenityGroupName.value);
         fieldGeneratorAmenityGroupName.have_value = false;
     }
     if (fieldGeneratorAmenityGroupSpokenNameSingular.have_value)
     {
         result.setAmenityGroupSpokenNameSingular(fieldGeneratorAmenityGroupSpokenNameSingular.value);
         fieldGeneratorAmenityGroupSpokenNameSingular.have_value = false;
     }
     if (fieldGeneratorAmenityGroupSpokenNamePlural.have_value)
     {
         result.setAmenityGroupSpokenNamePlural(fieldGeneratorAmenityGroupSpokenNamePlural.value);
         fieldGeneratorAmenityGroupSpokenNamePlural.have_value = false;
     }
     if (fieldGeneratorAmenityGroup.have_value)
     {
         result.initAmenityGroup();
         int count = fieldGeneratorAmenityGroup.value.Count;
         for (int num = 0; num < count; ++num)
         {
             result.appendAmenityGroup(fieldGeneratorAmenityGroup.value[num]);
         }
         fieldGeneratorAmenityGroup.value.Clear();
         fieldGeneratorAmenityGroup.have_value = false;
     }
     else if ((!(result.hasAmenityGroup())) && !allow_incomplete)
     {
         error("When parsing the object for %what%, the \"AmenityGroup\" field was missing.");
     }
 }
        protected override void finish()
        {
            AmenityGroupSpecJSON result = new AmenityGroupSpecJSON();

            Debug.Assert(result != null);
            finish(result);
            handle_result(result);
        }
 protected override void handle_result(AmenityGroupSpecJSON result)
 {
     top.value.Add(result);
 }
        protected override void handle_result(AmenityGroupSpecJSON result)
        {
//@@@            Debug.Assert(!have_value);
            have_value = true;
            value      = result;
        }
 protected abstract void handle_result(AmenityGroupSpecJSON new_result);