THRIFT-1394:Treatment of optional fields is not consistent between C++ and Java
authorJake Farrell <jfarrell@apache.org>
Fri, 27 Jan 2012 04:48:26 +0000 (04:48 +0000)
committerJake Farrell <jfarrell@apache.org>
Fri, 27 Jan 2012 04:48:26 +0000 (04:48 +0000)
commitf9f01fa1e054ff28d7b8023eeb53cd5ba0ed6b1c
tree7cd1d0604894e57fec7a1468c9ddf9619d71dd9a
parent6ce2704a14bb109d2d9e29d1b77974f57b2e8636
THRIFT-1394:Treatment of optional fields is not consistent between C++ and Java
Client: cpp
Patch: Diwaker Gupta

In CPP, all optional fields are guarded by the isset helper struct. On Java, however, the generated code takes advantage of nullable types: for containers, structs, exceptions, enums, and, notably, strings, the generator elides explicit use of an "isset" bit vector and instead emits checks of the form "field null". This leads to varying behavior between the two languages: an optional string field with a default value will have {{isset[fieldid]}} false on C, but the equivalent test in Java will be true.

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1236529 13f79535-47bb-0310-9956-ffa450edef68
compiler/cpp/src/generate/t_cpp_generator.cc
lib/cpp/test/OptionalRequiredTest.cpp
test/OptionalRequiredTest.thrift