function! s:__equals(class) let result = "@Override\n" let result .= "public boolean equals(Object o) {\n" let result .= "if (this == o) return true;\n" let result .= "if (o == null || getClass() != o.getClass()) return false;\n\n" let result .= a:class.name ." object = (". a:class.name .") o;\n\n" let idx = 0 for field in a:class.fields if idx != len(a:class.fields) - 1 let result .= "if " else let result .= "return !" endif if index(g:J_PRIMITIVE_TYPES, field.type) > -1 if field.type == "double" let result .= "(Double.compare(". field.name .", object.". field.name .") != 0)" elseif field.type == "float" let result .= "(Float.compare(". field.name .", object.". field.name .") != 0)" else let result .= "(". field.name ." != object.". field.name .")" endif elseif field.isArray let result .= "(!java.util.Arrays.equals(". field.name .", object.". field.name ."))" else let result .= "(". field.name ." != null ? !". field.name .".equals(object.". field.name .") : object.". field.name ." != null)" endif if idx != len(a:class.fields) - 1 let result .= " return false;\n" else let result .= ";\n" endif let idx += 1 endfor return result. "}" endfunction'