in compiler/cpp/src/thrift/generate/t_java_generator.cc [2429:2810]
void t_java_generator::generate_java_bean_boilerplate(ostream& out, t_struct* tstruct) {
isset_type issetType = needs_isset(tstruct);
const vector<t_field*>& fields = tstruct->get_members();
vector<t_field*>::const_iterator f_iter;
for (f_iter = fields.begin(); f_iter != fields.end(); ++f_iter) {
t_field* field = *f_iter;
t_type* type = get_true_type(field->get_type());
std::string field_name = field->get_name();
std::string cap_name = get_cap_name(field_name);
bool optional = use_option_type_ && field->get_req() == t_field::T_OPTIONAL;
bool is_deprecated = this->is_deprecated(field->annotations_);
if (type->is_container()) {
// Method to return the size of the collection
if (optional) {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
if (use_jdk8_option_type_) {
indent(out) << "public " << jdk_option_class << "<Integer> get" << cap_name;
} else {
indent(out) << "public " << thrift_option_class << "<Integer> get" << cap_name;
}
out << get_cap_name("size() {") << '\n';
indent_up();
indent(out) << "if (this." << field_name << " == null) {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".empty();" << '\n';
} else {
indent(out) << "return " << thrift_option_class << ".none();" << '\n';
}
indent_down();
indent(out) << "} else {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".of(this.";
} else {
indent(out) << "return " << thrift_option_class << ".some(this.";
}
out << field_name << ".size());" << '\n';
indent_down();
indent(out) << "}" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
} else {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public int get" << cap_name;
out << get_cap_name("size() {") << '\n';
indent_up();
indent(out) << "return (this." << field_name << " == null) ? 0 : "
<< "this." << field_name << ".size();" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
}
}
if (type->is_set() || type->is_list()) {
t_type* element_type;
if (type->is_set()) {
element_type = ((t_set*)type)->get_elem_type();
} else {
element_type = ((t_list*)type)->get_elem_type();
}
// Iterator getter for sets and lists
if (optional) {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
if (use_jdk8_option_type_) {
indent(out) << "public " << jdk_option_class << "<";
} else {
indent(out) << "public " << thrift_option_class << "<";
}
out << "java.util.Iterator<" << type_name(element_type, true, false) << ">> get"
<< cap_name;
out << get_cap_name("iterator() {") << '\n';
indent_up();
indent(out) << "if (this." << field_name << " == null) {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".empty();" << '\n';
} else {
indent(out) << "return " << thrift_option_class << ".none();" << '\n';
}
indent_down();
indent(out) << "} else {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".of(this.";
} else {
indent(out) << "return " << thrift_option_class << ".some(this.";
}
out << field_name << ".iterator());" << '\n';
indent_down();
indent(out) << "}" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
} else {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << java_nullable_annotation() << '\n';
indent(out) << "public java.util.Iterator<" << type_name(element_type, true, false)
<< "> get" << cap_name;
out << get_cap_name("iterator() {") << '\n';
indent_up();
indent(out) << "return (this." << field_name << " == null) ? null : "
<< "this." << field_name << ".iterator();" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
}
// Add to set or list, create if the set/list is null
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public void add" << get_cap_name("to");
out << cap_name << "(" << type_name(element_type) << " elem) {" << '\n';
indent_up();
indent(out) << "if (this." << field_name << " == null) {" << '\n';
indent_up();
indent(out) << "this." << field_name;
if (is_enum_set(type)) {
out << " = " << type_name(type, false, true, true) << ".noneOf("
<< inner_enum_type_name(type) << ");" << '\n';
} else {
out << " = new " << type_name(type, false, true) << "();" << '\n';
}
indent_down();
indent(out) << "}" << '\n';
indent(out) << "this." << field_name << ".add(elem);" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
} else if (type->is_map()) {
// Put to map
t_type* key_type = ((t_map*)type)->get_key_type();
t_type* val_type = ((t_map*)type)->get_val_type();
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public void put" << get_cap_name("to");
out << cap_name << "(" << type_name(key_type) << " key, " << type_name(val_type) << " val) {"
<< '\n';
indent_up();
indent(out) << "if (this." << field_name << " == null) {" << '\n';
indent_up();
std::string constructor_args;
if (is_enum_map(type)) {
constructor_args = inner_enum_type_name(type);
}
indent(out) << "this." << field_name << " = new " << type_name(type, false, true) << "("
<< constructor_args << ");" << '\n';
indent_down();
indent(out) << "}" << '\n';
indent(out) << "this." << field_name << ".put(key, val);" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
}
// Simple getter
generate_java_doc(out, field);
if (type->is_binary()) {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public byte[] get" << cap_name << "() {" << '\n';
indent(out) << " set" << cap_name << "(org.apache.thrift.TBaseHelper.rightSize("
<< field_name << "));" << '\n';
indent(out) << " return " << field_name << " == null ? null : " << field_name << ".array();"
<< '\n';
indent(out) << "}" << '\n' << '\n';
indent(out) << "public java.nio.ByteBuffer buffer" << get_cap_name("for") << cap_name
<< "() {" << '\n';
if (unsafe_binaries_) {
indent(out) << " return " << field_name << ";" << '\n';
} else {
indent(out) << " return org.apache.thrift.TBaseHelper.copyBinary(" << field_name << ");"
<< '\n';
}
indent(out) << "}" << '\n' << '\n';
} else {
if (optional) {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
if (use_jdk8_option_type_) {
indent(out) << "public " << jdk_option_class << "<" << type_name(type, true) << ">";
} else {
indent(out) << "public " << thrift_option_class << "<" << type_name(type, true) << ">";
}
if (type->is_base_type() && ((t_base_type*)type)->get_base() == t_base_type::TYPE_BOOL) {
out << " is";
} else {
out << " get";
}
out << cap_name << "() {" << '\n';
indent_up();
indent(out) << "if (this.isSet" << cap_name << "()) {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".of(this.";
} else {
indent(out) << "return " << thrift_option_class << ".some(this.";
}
out << field_name << ");" << '\n';
indent_down();
indent(out) << "} else {" << '\n';
indent_up();
if (use_jdk8_option_type_) {
indent(out) << "return " << jdk_option_class << ".empty();" << '\n';
} else {
indent(out) << "return " << thrift_option_class << ".none();" << '\n';
}
indent_down();
indent(out) << "}" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
} else {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
if (type_can_be_null(type)) {
indent(out) << java_nullable_annotation() << '\n';
}
indent(out) << "public " << type_name(type);
if (type->is_base_type() && ((t_base_type*)type)->get_base() == t_base_type::TYPE_BOOL) {
out << " is";
} else {
out << " get";
}
out << cap_name << "() {" << '\n';
indent_up();
indent(out) << "return this." << make_valid_java_identifier(field_name) << ";" << '\n';
indent_down();
indent(out) << "}" << '\n' << '\n';
}
}
// Simple setter
generate_java_doc(out, field);
if (type->is_binary()) {
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public ";
if (bean_style_) {
out << "void";
} else {
out << type_name(tstruct);
}
out << " set" << cap_name << "(byte[] " << make_valid_java_identifier(field_name) << ") {" << '\n';
indent(out) << " this." << make_valid_java_identifier(field_name) << " = " << make_valid_java_identifier(field_name)
<< " == null ? (java.nio.ByteBuffer)null";
if (unsafe_binaries_) {
indent(out) << " : java.nio.ByteBuffer.wrap(" << make_valid_java_identifier(field_name) << ");" << '\n';
} else {
indent(out) << " : java.nio.ByteBuffer.wrap(" << make_valid_java_identifier(field_name) << ".clone());" << '\n';
}
if (!bean_style_) {
indent(out) << " return this;" << '\n';
}
indent(out) << "}" << '\n' << '\n';
}
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public ";
if (bean_style_) {
out << "void";
} else {
out << type_name(tstruct);
}
out << " set" << cap_name << "("
<< (type_can_be_null(type) ? (java_nullable_annotation() + " ") : "")
<< type_name(type)
<< " " << make_valid_java_identifier(field_name) << ") {" << '\n';
indent_up();
indent(out) << "this." << make_valid_java_identifier(field_name) << " = ";
if (type->is_binary() && !unsafe_binaries_) {
out << "org.apache.thrift.TBaseHelper.copyBinary(" << make_valid_java_identifier(field_name) << ")";
} else {
out << make_valid_java_identifier(field_name);
}
out << ";" << '\n';
generate_isset_set(out, field, "");
if (!bean_style_) {
indent(out) << "return this;" << '\n';
}
indent_down();
indent(out) << "}" << '\n' << '\n';
// Unsetter
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public void unset" << cap_name << "() {" << '\n';
indent_up();
if (type_can_be_null(type)) {
indent(out) << "this." << make_valid_java_identifier(field_name) << " = null;" << '\n';
} else if (issetType == ISSET_PRIMITIVE) {
indent(out)
<< "__isset_bitfield = org.apache.thrift.EncodingUtils.clearBit(__isset_bitfield, "
<< isset_field_id(field) << ");" << '\n';
} else {
indent(out) << "__isset_bit_vector.clear(" << isset_field_id(field) << ");" << '\n';
}
indent_down();
indent(out) << "}" << '\n' << '\n';
// isSet method
indent(out) << "/** Returns true if field " << field_name
<< " is set (has been assigned a value) and false otherwise */" << '\n';
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public boolean is" << get_cap_name("set") << cap_name << "() {" << '\n';
indent_up();
if (type_can_be_null(type)) {
indent(out) << "return this." << make_valid_java_identifier(field_name) << " != null;" << '\n';
} else if (issetType == ISSET_PRIMITIVE) {
indent(out) << "return org.apache.thrift.EncodingUtils.testBit(__isset_bitfield, "
<< isset_field_id(field) << ");" << '\n';
} else {
indent(out) << "return __isset_bit_vector.get(" << isset_field_id(field) << ");" << '\n';
}
indent_down();
indent(out) << "}" << '\n' << '\n';
if (is_deprecated) {
indent(out) << "@Deprecated" << '\n';
}
indent(out) << "public void set" << cap_name << get_cap_name("isSet") << "(boolean value) {"
<< '\n';
indent_up();
if (type_can_be_null(type)) {
indent(out) << "if (!value) {" << '\n';
indent(out) << " this." << make_valid_java_identifier(field_name) << " = null;" << '\n';
indent(out) << "}" << '\n';
} else if (issetType == ISSET_PRIMITIVE) {
indent(out) << "__isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, "
<< isset_field_id(field) << ", value);" << '\n';
} else {
indent(out) << "__isset_bit_vector.set(" << isset_field_id(field) << ", value);" << '\n';
}
indent_down();
indent(out) << "}" << '\n' << '\n';
}
}