thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael Fischer (JIRA)" <j...@apache.org>
Subject [jira] Issue Comment Edited: (THRIFT-1026) C# default value code generation problem
Date Wed, 02 Feb 2011 22:53:29 GMT

    [ https://issues.apache.org/jira/browse/THRIFT-1026?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12989843#comment-12989843
] 

Michael Fischer edited comment on THRIFT-1026 at 2/2/11 10:51 PM:
------------------------------------------------------------------

This is actually one of the many issues I ran into yesterday while trying to build the entire
stack on a Windows 7 based system. It looks like someone has built update the code in the
trunk to work better.  Line 464 of the t_csharp_generator.cc class was updated from:

print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true,
true);

to: 

print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true,
true);

However, I don't think that is the correct fix.  Instead it should be updated to:

print_const_value(out, "this." + prop_name((*m_iter)), t, (*m_iter)->get_value(), true,
true);

This would generate the correct C# code, which in the case above would look like:

{code:none}
public DateTimeZone() 
{
      this.TimeZone = "UTC";
}
{code}

Michael Fischer

      was (Author: mkfischer):
    This is actually one of the many issues I ran into yesterday while trying to build the
entire stack on a Windows 7 based system. It looks like someone has built update the code
in the trunk to work better.  Line 464 of the t_csharp_generator.cc class was updated from:

print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true,
true);

to: 

print_const_value(out, "this." + (*m_iter)->get_name(), t, (*m_iter)->get_value(), true,
true);

However, I don't think that is the correct fix.  Instead it should be updated to:

print_const_value(out, "this." + prop_name((*m_iter)), t, (*m_iter)->get_value(), true,
true);

This would generate the correct C# code, which in the case above would look like:

public DateTimeZone() 
{
      this.TimeZone = "UTC";
}

Michael Fischer
  
> C# default value code generation problem
> ----------------------------------------
>
>                 Key: THRIFT-1026
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1026
>             Project: Thrift
>          Issue Type: Bug
>          Components: C# - Compiler
>    Affects Versions: 0.5
>         Environment: Windows, Mac
>            Reporter: William Blinn
>
> I have a thrift file that looks like this:
> {code}
> // Time stamp with a timezone specification for normalization.
> struct DateTimeZone
> {
>     1: i64 ticks,
>     2: optional string timeZone = "UTC",
> }
> {code}
> When I generate C#, it produces code like this:
> {code}
>   [Serializable]
>   public partial class DateTimeZone : TBase
>   {
>     private long _ticks;
>     private string _timeZone;
>     public long Ticks
>     {
>       get
>       {
>         return _ticks;
>       }
>       set
>       {
>         __isset.ticks = true;
>         this._ticks = value;
>       }
>     }
>     public string TimeZone
>     {
>       get
>       {
>         return _timeZone;
>       }
>       set
>       {
>         __isset.timeZone = true;
>         this._timeZone = value;
>       }
>     }
>     public Isset __isset;
>     [Serializable]
>     public struct Isset {
>       public bool ticks;
>       public bool timeZone;
>     }
>     public DateTimeZone() {
>       this.timeZone = "UTC";
>     }
> ...
> {code}
> The constructor, which sets the default value should be this.TimeZone = "UTC" because
the property is TimeZone, not timeZone. The constructor should set the property rather than
the field so that __isset is marked properly.
> The compile error I get when I try to compile the code that thrift generates is like
this:
> {code}
>       [csc] d:\code\Thrift\Generated\DateTimeZone.cs(59,12): error CS1061: 'Thrift.Generated.DateTimeZone'
does not contain a definition for 'timeZone' and no extension method 'timeZone' accepting
a first argument of type 'Thrift.Generated.DateTimeZone' could be found (are you missing a
using directive or an assembly reference?)
> {code}

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

        

Mime
View raw message