You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (Jira)" <ji...@apache.org> on 2021/03/27 10:10:00 UTC
[jira] [Resolved] (THRIFT-5382) Netstd default list/set enums
values are generated incorrectly in some cases
[ https://issues.apache.org/jira/browse/THRIFT-5382?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jens Geyer resolved THRIFT-5382.
--------------------------------
Fix Version/s: 0.15.0
Resolution: Fixed
Good catch, thanks!
> Netstd default list/set enums values are generated incorrectly in some cases
> ----------------------------------------------------------------------------
>
> Key: THRIFT-5382
> URL: https://issues.apache.org/jira/browse/THRIFT-5382
> Project: Thrift
> Issue Type: Bug
> Components: netstd - Compiler
> Affects Versions: 0.14.0, 0.15.0, 0.14.1
> Reporter: Thomas Bruggink
> Assignee: Thomas Bruggink
> Priority: Critical
> Fix For: 0.15.0
>
> Time Spent: 50m
> Remaining Estimate: 0h
>
> Creating the following 2 thrift files:
> Enums.thrift
> {code:java}
> namespace * enums
> enum FoobarEnum {
> Val_1 = 0,
> Val_2 = 1
> }
> {code}
> Service.thrift
> {code:java}
> namespace * service
> include "Enums.thrift"
> struct RequestModel {
> // Breaks
> 1: optional set<Thriftxxxx.objs.FoobarEnum> data_1 = [ FoobarEnum.Val_1, FoobarEnum.Val_2 ],
> // Breaks
> 2: optional list<Thriftxxxx.objs.FoobarEnum> data_2 = [ FoobarEnum.Val_1, FoobarEnum.Val_2 ],
> // Works
> 3: optional Thriftxxxx.objs.FoobarEnum data_3 = FoobarEnum.Val_1
> }
> service Test {
> void CallMe(
> 1 : RequestModel foo,
> )
> }
> {code}
> Will generate a cs file that when compiled throws the following error for 2 items in the set and 2 items in the list:
>
> {code:java}
> RequestModel.cs(96,24): error CS0103: The name 'FoobarEnum' does not exist in the current context
> {code}
> Generated code from the RequestModel looks like this
> {code:java}
> public RequestModel()
> {
> this._data_1 = new THashSet<global::Thriftxxxx.objs.FoobarEnum>();
> this._data_1.Add(FoobarEnum.Val_1);
> this._data_1.Add(FoobarEnum.Val_2);
> this.__isset.data_1 = true;
> this._data_2 = new List<global::Thriftxxxx.objs.FoobarEnum>();
> this._data_2.Add(FoobarEnum.Val_1);
> this._data_2.Add(FoobarEnum.Val_2);
> this.__isset.data_2 = true;
> this._data_3 = global::Thriftxxxx.objs.FoobarEnum.Val_1;
> this.__isset.data_3 = true;
> }
> {code}
> The code in the FoobarEnum elements in the Add() methods are missing the namespace.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)