protected void finish(MusicGenreJSON result)
 {
     if (fieldGeneratorBaseGenre.have_value)
     {
         result.setBaseGenre(fieldGeneratorBaseGenre.value);
         fieldGeneratorBaseGenre.have_value = false;
     }
     else if ((!(result.hasBaseGenre())) && !allow_incomplete)
     {
         error("When parsing the object for %what%, the \"BaseGenre\" field was missing.");
     }
     if (fieldGeneratorMatchedGenre.have_value)
     {
         result.setMatchedGenre(fieldGeneratorMatchedGenre.value);
         fieldGeneratorMatchedGenre.have_value = false;
     }
     else if ((!(result.hasMatchedGenre())) && !allow_incomplete)
     {
         error("When parsing the object for %what%, the \"MatchedGenre\" field was missing.");
     }
     if (fieldGeneratorDateRange.have_value)
     {
         result.setDateRange(fieldGeneratorDateRange.value);
         fieldGeneratorDateRange.have_value = false;
     }
 }
        protected override void finish()
        {
            MusicGenreJSON result = new MusicGenreJSON();

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