C# should not generate default constructor
------------------------------------------

                 Key: THRIFT-1127
                 URL: https://issues.apache.org/jira/browse/THRIFT-1127
             Project: Thrift
          Issue Type: Bug
          Components: C# - Compiler
    Affects Versions: 0.5
            Reporter: William Blinn


The C# code generator should not produce a default constructor. 

Thrift generates partial classes for thrift structs, meaning that the class may 
be spread across multiple files and csc will link them to be a separate file. 
When the thrift generated class has the partial constructor, it cannot be added 
in other files. This is a problem if you want to implement a default 
constructor that does some initialization to the data in the class.

For example, this thrift code:
{code}
struct DateTime
{
    1: required i64 ticks,
}
{code}

produces
{code}
/**
 * Autogenerated by Thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 */
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Thrift;
using Thrift.Collections;
using Thrift.Protocol;
using Thrift.Transport;
namespace Thrift.Generated
{

  [Serializable]
  public partial class DateTime : TBase
  {
    private long _ticks;

    public long Ticks
    {
      get
      {
        return _ticks;
      }
      set
      {
        __isset.ticks = true;
        this._ticks = value;
      }
    }


    public Isset __isset;
    [Serializable]
    public struct Isset {
      public bool ticks;
    }

    public DateTime() {
    }

    public void Read (TProtocol iprot)
...
{code}

It would be great if it instead produced code like this:
{code}
/**
 * Autogenerated by Thrift
 *
 * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
 */
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.IO;
using Thrift;
using Thrift.Collections;
using Thrift.Protocol;
using Thrift.Transport;
namespace Thrift.Generated
{

  [Serializable]
  public partial class DateTime : TBase
  {
    private long _ticks;

    public long Ticks
    {
      get
      {
        return _ticks;
      }
      set
      {
        __isset.ticks = true;
        this._ticks = value;
      }
    }


    public Isset __isset;
    [Serializable]
    public struct Isset {
      public bool ticks;
    }

    public void Read (TProtocol iprot)
{code}

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to