Fix Types.equals for arrays. (#279)

This commit is contained in:
Eric Cochran
2017-04-20 15:27:47 -07:00
committed by Jesse Wilson
parent e76110b4b1
commit d95dd07c56
2 changed files with 15 additions and 0 deletions

View File

@@ -210,6 +210,10 @@ public final class Types {
return true; // Also handles (a == null && b == null).
} else if (a instanceof Class) {
if (b instanceof GenericArrayType) {
return equals(((Class) a).getComponentType(),
((GenericArrayType) b).getGenericComponentType());
}
return a.equals(b); // Class already specifies equals().
} else if (a instanceof ParameterizedType) {
@@ -227,6 +231,10 @@ public final class Types {
&& Arrays.equals(aTypeArguments, bTypeArguments);
} else if (a instanceof GenericArrayType) {
if (b instanceof Class) {
return equals(((Class) b).getComponentType(),
((GenericArrayType) a).getGenericComponentType());
}
if (!(b instanceof GenericArrayType)) return false;
GenericArrayType ga = (GenericArrayType) a;
GenericArrayType gb = (GenericArrayType) b;

View File

@@ -220,4 +220,11 @@ public final class TypesTest {
assertThat(actual.hashCode()).isEqualTo(expected.hashCode());
assertThat(actual.getClass()).isNotEqualTo(TestQualifier.class);
}
@Test public void arrayEqualsGenericTypeArray() {
assertThat(Types.equals(int[].class, Types.arrayOf(int.class))).isTrue();
assertThat(Types.equals(Types.arrayOf(int.class), int[].class)).isTrue();
assertThat(Types.equals(String[].class, Types.arrayOf(String.class))).isTrue();
assertThat(Types.equals(Types.arrayOf(String.class), String[].class)).isTrue();
}
}