thrift-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (THRIFT-4290) C# nullable option generates invalid code for non-required enum field with default value
Date Thu, 07 Sep 2017 09:46:00 GMT

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

ASF GitHub Bot commented on THRIFT-4290:
----------------------------------------

GitHub user dsandbrink opened a pull request:

    https://github.com/apache/thrift/pull/1347

    THRIFT-4290: Fixed csharp:nullable code generation for non-required e…

    …num fields with default values

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/dsandbrink/thrift THRIFT-4290

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/thrift/pull/1347.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1347
    
----
commit 2ecf6c4631e1283b68a61f485fd57f32c2dbf0a4
Author: Dirk Sandbrink <dsandbrink@users.noreply.github.com>
Date:   2017-09-06T19:04:26Z

    THRIFT-4290: Fixed csharp:nullable code generation for non-required enum fields with default
values

----


> C# nullable option generates invalid code for non-required enum field with default value
> ----------------------------------------------------------------------------------------
>
>                 Key: THRIFT-4290
>                 URL: https://issues.apache.org/jira/browse/THRIFT-4290
>             Project: Thrift
>          Issue Type: Bug
>          Components: C# - Compiler
>    Affects Versions: 0.9.3, 0.10.0
>         Environment: Windows
>            Reporter: Dirk Sandbrink
>            Priority: Minor
>
> When generating C# code with the nullable option invalid setter code is generated for
enum fields which have a default value (and thus still need an isset flag).
> For example use the Work struct from tutorial.thrift and add a default value to the enum
field:
> {code:none}
> struct Work {
>   1: i32 num1 = 0,
>   2: i32 num2,
>   3: Operation op = Operation.ADD,
>   4: optional string comment,
> }
> {code}
> Then the generated code in Work.cs looks like this:
> {code:none}
>   public Operation? Op
>   {
>     get
>     {
>       return _op;
>     }
>     set
>     {
>       __isset.op = true;
>       this._op = value;
>     }
>   }
> {code}
> This code is invalid, because value is of type _Operation?_, the correct code should
be:
> {code:none}
>   public Operation? Op
>   {
>     get
>     {
>       return _op;
>     }
>     set
>     {
>       __isset.op = value.HasValue;
>       if (value.HasValue) this._op = value.Value;
>     }
>   }
> {code}
> I believe the error is located in file t_csharp_generator.cc in function t_csharp_generator::generate_csharp_property:
> {code:none}
>       if (ttype->is_base_type()) {
>         use_nullable = ((t_base_type*)ttype)->get_base() != t_base_type::TYPE_STRING;
>       }
> {code}
> Here use_nullable is set to true for all base types other then string, but not for enums.
> A quick fix might be to add
> {code:none}
>       else if (ttype->is_enum()) {
>         use_nullable = true;
>       }
> {code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Mime
View raw message