Skip to content

Commit

Permalink
Used equals generation as Effective Java describes
Browse files Browse the repository at this point in the history
Moved hashCode and equals generation steps after additional properties generation so the additional properties will be used in the hashCode and equals generation
  • Loading branch information
jharmelink committed Sep 2, 2014
1 parent cac4fb4 commit 701ea90
Showing 1 changed file with 7 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -103,17 +103,17 @@ public JType apply(String nodeName, JsonNode node, JPackage _package, Schema sch
addToString(jclass);
}

if (ruleFactory.getGenerationConfig().isIncludeHashcodeAndEquals()) {
addHashCode(jclass);
addEquals(jclass);
}

if (node.has("javaInterfaces")) {
addInterfaces(jclass, node.get("javaInterfaces"));
}

ruleFactory.getAdditionalPropertiesRule().apply(nodeName, node.get("additionalProperties"), jclass, schema);

if (ruleFactory.getGenerationConfig().isIncludeHashcodeAndEquals()) {
addHashCode(jclass);
addEquals(jclass);
}

return jclass;

}
Expand Down Expand Up @@ -260,7 +260,7 @@ private void addHashCode(JDefinedClass jclass) {
hashCodeBuilderInvocation = hashCodeBuilderInvocation.invoke("append").arg(fieldVar);
}

body._return(hashCodeBuilderInvocation.invoke("hashCode"));
body._return(hashCodeBuilderInvocation.invoke("toHashCode"));

hashCode.annotate(Override.class);
}
Expand All @@ -280,15 +280,12 @@ private void addEquals(JDefinedClass jclass) {

JBlock body = equals.body();

body._if(otherObject.eq(JExpr._null()))._then()._return(JExpr.FALSE);
body._if(otherObject.eq(JExpr._this()))._then()._return(JExpr.TRUE);
body._if(otherObject.invoke("getClass").ne(JExpr._this().invoke("getClass")))._then()._return(JExpr.FALSE);
body._if(otherObject._instanceof(jclass).eq(JExpr.FALSE))._then()._return(JExpr.FALSE);

JVar rhsVar = body.decl(jclass, "rhs").init(JExpr.cast(jclass, otherObject));
JClass equalsBuilderClass = jclass.owner().ref(equalsBuilder);
JInvocation equalsBuilderInvocation = JExpr._new(equalsBuilderClass);
equalsBuilderInvocation = equalsBuilderInvocation.invoke("appendSuper")
.arg(JExpr._super().invoke("equals").arg(otherObject));

for (JFieldVar fieldVar : fields.values()) {
equalsBuilderInvocation = equalsBuilderInvocation.invoke("append")
Expand Down

0 comments on commit 701ea90

Please sign in to comment.