Jens Geyer created THRIFT-5997:
----------------------------------

             Summary: netstd generator: binary and uuid constants emitted as C# 
const instead of static readonly
                 Key: THRIFT-5997
                 URL: https://issues.apache.org/jira/browse/THRIFT-5997
             Project: Thrift
          Issue Type: Bug
          Components: netcore - Library
            Reporter: Jens Geyer


The netstd code generator declares all Thrift {{const}} fields of base types 
using the C# {{const}} keyword ({{print_const_value}}, line ~619). Two base 
types cannot legally be C# {{const}}:

1. *binary* maps to {{byte[]}} in C#. Arrays are reference types and cannot be 
{{const}}. The generated code calls 
{{System.Text.Encoding.UTF8.GetBytes("...")}} as the initialiser, which is a 
runtime expression, not a compile-time constant. This produces CS0133 
("expression must be constant").

2. *uuid* maps to {{System.Guid}} in C#. {{Guid}} is a struct, but it is not 
one of the primitive types recognised by C# as a constant type (bool, char, 
numerics, string, enums). The generated {{new System.Guid("...")}} initialiser 
is also a runtime call. This produces both CS0283 ("type Guid cannot be 
declared as const") and CS0133.

Fix: in {{print_const_value()}}, detect {{is_binary()}} and {{TYPE_UUID}} and 
emit {{public static readonly}} instead of {{public const}} for those two 
cases. The initialiser expression remains unchanged — it is legal for {{static 
readonly}} fields.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to