in dataenum-processor/src/main/java/com/spotify/dataenum/processor/generator/value/ValueTypeFactory.java [260:300]
private static MethodSpec createHashCode(OutputValue value) {
MethodSpec.Builder result =
MethodSpec.methodBuilder("hashCode")
.addAnnotation(Override.class)
.addModifiers(Modifier.PUBLIC)
.returns(int.class);
if (!value.hasParameters()) {
result.addStatement("return 0");
return result.build();
}
result.addStatement("int result = 0");
int parameterCount = Iterables.sizeOf(value.parameters());
int parameterIndex = 0;
for (Parameter parameter : value.parameters()) {
String fieldName = parameter.name();
parameterIndex++;
if (parameterIndex == parameterCount) {
result.addCode("return result * 31 + ");
} else {
result.addCode("result = result * 31 + ");
}
if (parameter.type().isPrimitive()) {
TypeName boxedType = parameter.type().box();
result.addStatement("$T.valueOf(this.$L).hashCode()", boxedType, fieldName);
} else if (isArrayType(parameter)) {
result.addStatement("$T.hashCode(this.$L)", ClassName.get(Arrays.class), fieldName);
} else {
if (parameter.canBeNull()) {
result.addStatement("(this.$1L != null ? this.$1L.hashCode() : 0)", fieldName);
} else {
result.addStatement("this.$L.hashCode()", fieldName);
}
}
}
return result.build();
}