Skip to content

Commit

Permalink
FORGE-995: Retained the original method signature for backwards compa…
Browse files Browse the repository at this point in the history
…tibility
  • Loading branch information
gastaldi committed Jul 8, 2013
1 parent 5041225 commit 560f260
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 6 deletions.
29 changes: 23 additions & 6 deletions api/src/main/java/org/jboss/forge/parser/java/util/Refactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@
import org.jboss.forge.parser.java.Method;

/**
*
*
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*
*/
public class Refactory
{
Expand All @@ -44,13 +44,30 @@ public static void createGetterAndSetter(final JavaClass clazz, final Field<Java
}
}

public static void createHashCodeAndEquals(final JavaClass clazz)
{
final Field<?>[] fields;
Field<JavaClass> idField = clazz.getField("id");
// FORGE-995: Retained this for backwards compatibility
if (idField != null)
{
fields = new Field[] { idField };
}
else
{
List<Field<JavaClass>> classFields = clazz.getFields();
fields = classFields.toArray(new Field[classFields.size()]);
}
createHashCodeAndEquals(clazz, fields);
}

public static void createHashCodeAndEquals(final JavaClass clazz, final Field<?>... fields)
{
if(fields == null || fields.length < 1)
if (fields == null || fields.length < 1)
{
throw new IllegalArgumentException("fields cannot be null or empty.");
}

StringBuilder fieldEqualityChecks = new StringBuilder();
StringBuilder hashCodeComputation = new StringBuilder();
for (Field<?> field : fields)
Expand All @@ -62,7 +79,7 @@ public static void createHashCodeAndEquals(final JavaClass clazz, final Field<?>
fieldEqualityChecks.append("if (").append(fieldName).append(" != that.").append(fieldName).append(") { ");
fieldEqualityChecks.append(" return false;");
fieldEqualityChecks.append("} ");

hashCodeComputation.append("result = prime * result + ").append(fieldName).append(";");
}
else
Expand All @@ -77,7 +94,7 @@ public static void createHashCodeAndEquals(final JavaClass clazz, final Field<?>
.append(fieldName).append(".hashCode());");
}
}

clazz.addMethod(
"public boolean equals(Object that) { " +
"if (this == that) { return true; } " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ public void testAddGettersAndSetters() throws Exception
assertEquals("getFoo", getter.getName());
assertTrue(getter.getParameters().isEmpty());
assertEquals("setFoo", setter.getName());
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
Expand All @@ -65,6 +66,7 @@ public void testAddGettersAndSettersCamelCase() throws Exception
assertEquals("getFirstName", getter.getName());
assertTrue(getter.getParameters().isEmpty());
assertEquals("setFirstName", setter.getName());
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
Expand All @@ -78,6 +80,7 @@ public void testAddGetterNotSetterForFinalField() throws Exception

assertEquals("getBar", getter.getName());
assertEquals(1, methods.size());
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
Expand All @@ -97,6 +100,7 @@ public void testAddGettersAndSettersGeneric() throws Exception
assertEquals("setNames", setter.getName());
assertFalse(setter.getParameters().isEmpty());
assertEquals("Set<String>", setter.getParameters().get(0).getType());
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
Expand All @@ -107,8 +111,28 @@ public void testCreateToStringFromFields() throws Exception
assertTrue(javaClass.hasMethodSignature("toString"));
assertTrue(javaClass.getMethod("toString").getBody().contains("return"));
assertTrue(javaClass.getMethod("toString").getBody().contains("firstName != null"));
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
public void testCreateHashCodeAndEqualsNoFields() throws Exception
{
Refactory.createHashCodeAndEquals(javaClass);

List<Method<JavaClass>> methods = javaClass.getMethods();
Method<JavaClass> equals = methods.get(0);
Method<JavaClass> hashcode = methods.get(1);

assertEquals("equals", equals.getName());
assertEquals(1, equals.getParameters().size());

assertEquals("hashCode", hashcode.getName());
assertEquals(0, hashcode.getParameters().size());
assertEquals("int", hashcode.getReturnType());
assertFalse(javaClass.hasSyntaxErrors());
}


@Test
public void testCreateHashCodeAndEquals() throws Exception
{
Expand All @@ -127,6 +151,7 @@ public void testCreateHashCodeAndEquals() throws Exception
assertEquals(0, hashcode.getParameters().size());
assertEquals("int", hashcode.getReturnType());
assertThat(hashcode.getBody(), containsString("result=prime * result + foo;"));
assertFalse(javaClass.hasSyntaxErrors());
}

@Test
Expand All @@ -150,5 +175,6 @@ public void testCreateHashCodeAndEqualsMultipleFields() throws Exception
assertEquals("int", hashcode.getReturnType());
assertThat(hashcode.getBody(), containsString("result=prime * result + foo;"));
assertThat(hashcode.getBody(), containsString("result=prime * result + ((firstName == null) ? 0 : firstName.hashCode());"));
assertFalse(javaClass.hasSyntaxErrors());
}
}

0 comments on commit 560f260

Please sign in to comment.