private void generateMethodEquals()

in activemq-protobuf/src/main/java/org/apache/activemq/protobuf/compiler/JavaGenerator.java [494:586]


    private void generateMethodEquals(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();
        if( deferredDecode ) {
        	p("return toUnframedBuffer().equals(obj.toUnframedBuffer());");
        } else {        
	        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();
        if( deferredDecode ) {
            p("return "+hc+" ^ toUnframedBuffer().hashCode();");
        } else {
            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("");
	}