Issue opened: https://issues.apache.org/jira/browse/THRIFT-543
Thanks, Chengdu On Mon, Jul 13, 2009 at 5:51 PM, Bryan Duxbury<[email protected]> wrote: > Yeah, looks right. Can we get this attached to an issue so we have the > license stuff squared away? > > -Bryan > > On Jul 13, 2009, at 4:24 PM, David Reiss wrote: > >> Makes sense to me. Bryan? >> >> Chengdu Huang wrote: >>> >>> The change is really simple. I'm attaching the patch and pasting it >>> below: >>> >>> Index: compiler/cpp/src/generate/t_java_generator.cc >>> =================================================================== >>> --- compiler/cpp/src/generate/t_java_generator.cc (revision 792770) >>> +++ compiler/cpp/src/generate/t_java_generator.cc (working copy) >>> @@ -1096,7 +1096,7 @@ >>> indent() << "if (this." << (*f_iter)->get_name() << " != >>> null) {" << endl; >>> indent_up(); >>> } >>> - bool optional = bean_style_ && (*f_iter)->get_req() == >>> t_field::T_OPTIONAL; >>> + bool optional = (*f_iter)->get_req() == t_field::T_OPTIONAL; >>> if (optional) { >>> indent(out) << "if (" << generate_isset_check((*f_iter)) << ") >>> {" << endl; >>> indent_up(); >>> >>> Chengdu >>> >>> On Thu, Jul 2, 2009 at 10:00 AM, David Reiss<[email protected]> wrote: >>>> >>>> Yeah, we never got around to implementing optional for the normal >>>> Java generated code. If you submit a patch for it, it would probably >>>> be accepted. >>>> >>>> --David >>>> >>>> Bryan Duxbury wrote: >>>>> >>>>> This is not a "bug" per se. It's a known fact that it does this. >>>>> >>>>> For anything beyond trivial uses, I think you want to use the beans- >>>>> style generator. I would personally go so far as to say that we >>>>> shouldn't even have the default generator, but that's just me. >>>>> >>>>> -Bryan >>>>> >>>>> On Jul 1, 2009, at 5:15 PM, Chengdu Huang wrote: >>>>> >>>>>> I have a simple thrift file: >>>>>> >>>>>> struct UserDataContent { >>>>>> 1: i32 id, >>>>>> 2: optional i32 value, >>>>>> } >>>>>> >>>>>> Java file generated by "thrift --gen java " doesn't seem to respect >>>>>> the "optional" keyword: >>>>>> >>>>>> public void write(TProtocol oprot) throws TException { >>>>>> validate(); >>>>>> >>>>>> oprot.writeStructBegin(STRUCT_DESC); >>>>>> oprot.writeFieldBegin(ID_FIELD_DESC); >>>>>> oprot.writeI32(this.id); >>>>>> oprot.writeFieldEnd(); >>>>>> oprot.writeFieldBegin(VALUE_FIELD_DESC); >>>>>> oprot.writeI32(this.value); >>>>>> oprot.writeFieldEnd(); >>>>>> oprot.writeFieldStop(); >>>>>> oprot.writeStructEnd(); >>>>>> } >>>>>> >>>>>> However, java file generated using "thrift --gen java:beans" looks >>>>>> correct to me: >>>>>> public void write(TProtocol oprot) throws TException { >>>>>> validate(); >>>>>> >>>>>> oprot.writeStructBegin(STRUCT_DESC); >>>>>> oprot.writeFieldBegin(ID_FIELD_DESC); >>>>>> oprot.writeI32(this.id); >>>>>> oprot.writeFieldEnd(); >>>>>> if (isSetValue()) { >>>>>> oprot.writeFieldBegin(VALUE_FIELD_DESC); >>>>>> oprot.writeI32(this.value); >>>>>> oprot.writeFieldEnd(); >>>>>> } >>>>>> oprot.writeFieldStop(); >>>>>> oprot.writeStructEnd(); >>>>>> } >>>>>> >>>>>> My question is that why "normal" java style files should be different >>>>>> from "beans" style files in terms of handling optional fields? >>>>>> >>>>>> The change is introduced in rev665308 (t_java_generator.cc:1105). >>>>>> >>>>>> Thanks, >>>>>> Chengdu > >
