in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/AltJavaGenerator.java [714:796]
private void generateBeanEquals(MessageDescriptor m, String className) {
p("public boolean equals(Object obj) {");
indent();
p("if( obj==this )");
p(" return true;");
p("");
p("if( obj==null || obj.getClass()!="+className+".class )");
p(" return false;");
p("");
p("return equals(("+className+")obj);");
unindent();
p("}");
p("");
p("public boolean equals("+className+" obj) {");
indent();
for (FieldDescriptor field : m.getFields().values()) {
String uname = uCamel(field.getName());
String getterMethod="get"+uname+"()";
String hasMethod = "has"+uname+"()";
if( field.getRule() == FieldDescriptor.REPEATED_RULE ) {
getterMethod = "get"+uname+"List()";
}
p("if ("+hasMethod+" ^ obj."+hasMethod+" ) ");
p(" return false;");
if( field.getRule() != FieldDescriptor.REPEATED_RULE && (field.isNumberType() || field.getType()==FieldDescriptor.BOOL_TYPE) ) {
p("if ("+hasMethod+" && ( "+getterMethod+"!=obj."+getterMethod+" ))");
} else {
p("if ("+hasMethod+" && ( !"+getterMethod+".equals(obj."+getterMethod+") ))");
}
p(" return false;");
}
p("return true;");
unindent();
p("}");
p("");
p("public int hashCode() {");
indent();
int hc = className.hashCode();
p("int rc="+hc+";");
int counter=0;
for (FieldDescriptor field : m.getFields().values()) {
counter++;
String uname = uCamel(field.getName());
String getterMethod="get"+uname+"()";
String hasMethod = "has"+uname+"()";
if( field.getRule() == FieldDescriptor.REPEATED_RULE ) {
getterMethod = "get"+uname+"List()";
}
p("if ("+hasMethod+") {");
indent();
if( field.getRule() == FieldDescriptor.REPEATED_RULE ) {
p("rc ^= ( "+uname.hashCode()+"^"+getterMethod+".hashCode() );");
} else if( field.isInteger32Type() ) {
p("rc ^= ( "+uname.hashCode()+"^"+getterMethod+" );");
} else if( field.isInteger64Type() ) {
p("rc ^= ( "+uname.hashCode()+"^(new Long("+getterMethod+")).hashCode() );");
} else if( field.getType()==FieldDescriptor.DOUBLE_TYPE ) {
p("rc ^= ( "+uname.hashCode()+"^(new Double("+getterMethod+")).hashCode() );");
} else if( field.getType()==FieldDescriptor.FLOAT_TYPE ) {
p("rc ^= ( "+uname.hashCode()+"^(new Double("+getterMethod+")).hashCode() );");
} else if( field.getType()==FieldDescriptor.BOOL_TYPE ) {
p("rc ^= ( "+uname.hashCode()+"^ ("+getterMethod+"? "+counter+":-"+counter+") );");
} else {
p("rc ^= ( "+uname.hashCode()+"^"+getterMethod+".hashCode() );");
}
unindent();
p("}");
}
p("return rc;");
unindent();
p("}");
p("");
}