You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Mike Rettig (JIRA)" <ji...@apache.org> on 2014/12/03 23:22:12 UTC
[jira] [Updated] (THRIFT-2877) Optimize generated hashCode
[ https://issues.apache.org/jira/browse/THRIFT-2877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mike Rettig updated THRIFT-2877:
--------------------------------
Description:
The generated java hashCode method allocates an ArrayList then appends the fields to the list. Primitive fields will be boxed when added to the list.
The generated code shouldn't allocate a list or box primitives. The hashCode can be calculated by using a primitive int and some static utility methods which can return the hashCode for each type.
out << indent() << "@Override" << endl << indent() << "public int hashCode() {" << endl;
1839 indent_up();
1840 indent(out) << "List<Object> list = new ArrayList<Object>();" << endl;
1841
1842 for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
1843 out << endl;
1844
1845 t_type* t = get_true_type((*m_iter)->get_type());
1846 bool is_optional = (*m_iter)->get_req() == t_field::T_OPTIONAL;
1847 bool can_be_null = type_can_be_null(t);
1848 string name = (*m_iter)->get_name();
1849
1850 string present = "true";
1851
1852 if (is_optional || can_be_null) {
1853 present += " && (" + generate_isset_check(*m_iter) + ")";
1854 }
1855
1856 indent(out) << "boolean present_" << name << " = " << present << ";" << endl;
1857 indent(out) << "list.add(present_" << name << ");" << endl;
1858 indent(out) << "if (present_" << name << ")" << endl;
1859 if (t->is_enum()) {
1860 indent(out) << " list.add(" << name << ".getValue());" << endl;
1861 } else {
1862 indent(out) << " list.add(" << name << ");" << endl;
1863 }
1864 }
1865
1866 out << endl;
1867 indent(out) << "return list.hashCode();" << endl;
1868 indent_down();
1869 indent(out) << "}" << endl << endl;
1870 }
was:
The generated java hashCode method allocates an ArrayList then appends the fields to the list. Primitive fields will be boxed when added to the list.
The generated code shouldn't allocate a list or box primitives. The hashCode can be calculated by using a primitive int and some static utility methods which can return the hashCode for each type.
> Optimize generated hashCode
> ---------------------------
>
> Key: THRIFT-2877
> URL: https://issues.apache.org/jira/browse/THRIFT-2877
> Project: Thrift
> Issue Type: Improvement
> Components: Java - Compiler
> Affects Versions: 0.9.3
> Reporter: Mike Rettig
> Priority: Critical
>
> The generated java hashCode method allocates an ArrayList then appends the fields to the list. Primitive fields will be boxed when added to the list.
> The generated code shouldn't allocate a list or box primitives. The hashCode can be calculated by using a primitive int and some static utility methods which can return the hashCode for each type.
> out << indent() << "@Override" << endl << indent() << "public int hashCode() {" << endl;
> 1839 indent_up();
> 1840 indent(out) << "List<Object> list = new ArrayList<Object>();" << endl;
> 1841
> 1842 for (m_iter = members.begin(); m_iter != members.end(); ++m_iter) {
> 1843 out << endl;
> 1844
> 1845 t_type* t = get_true_type((*m_iter)->get_type());
> 1846 bool is_optional = (*m_iter)->get_req() == t_field::T_OPTIONAL;
> 1847 bool can_be_null = type_can_be_null(t);
> 1848 string name = (*m_iter)->get_name();
> 1849
> 1850 string present = "true";
> 1851
> 1852 if (is_optional || can_be_null) {
> 1853 present += " && (" + generate_isset_check(*m_iter) + ")";
> 1854 }
> 1855
> 1856 indent(out) << "boolean present_" << name << " = " << present << ";" << endl;
> 1857 indent(out) << "list.add(present_" << name << ");" << endl;
> 1858 indent(out) << "if (present_" << name << ")" << endl;
> 1859 if (t->is_enum()) {
> 1860 indent(out) << " list.add(" << name << ".getValue());" << endl;
> 1861 } else {
> 1862 indent(out) << " list.add(" << name << ");" << endl;
> 1863 }
> 1864 }
> 1865
> 1866 out << endl;
> 1867 indent(out) << "return list.hashCode();" << endl;
> 1868 indent_down();
> 1869 indent(out) << "}" << endl << endl;
> 1870 }
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)