private void generateBeanEquals()

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("");
	}