David Hull created THRIFT-4495: ---------------------------------- Summary: Erlang records should allow 'undefined' for non-required fields Key: THRIFT-4495 URL: https://issues.apache.org/jira/browse/THRIFT-4495 Project: Thrift Issue Type: Improvement Components: Erlang - Compiler Affects Versions: 0.11.0 Reporter: David Hull Assignee: David Hull
The Erlang records created by the Erlang code generator allow only the type declared by the Thrift definition file. If a field is not required, however, the Erlang record should also allow the value {{undefined}} (this is similar to a null value in other languages). Erlang includes a tool, dialyzer, that does type analysis of Erlang code. Until Erlang 19, dialyzer implicitly added `undefined` as an allowed type for all record fields, but as of Erlang 19 it no longer does. This means that dialyzer now emits error messages whenever a record is constructed and initial values are not specified for all of its fields. So, for example, the following thrift definition {noformat} struct Test { 1: required i32 a 2: i32 b 3: optional i32 c }{noformat} currently produced the following Erlang record: {noformat} -record('Test', {'a' :: integer(), 'b' :: integer(), 'c' :: integer()}).{noformat} However it should produce the following: {noformat} -record('Test', {'a' :: integer(), 'b' :: integer() | undefined, 'c' :: integer() | undefined}).{noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005)