private void appendHashCode(final JCodeModel codeModel, final JBlock block,
final JVar hash, final JType type, final JExpression value,
final JExpression isValueSet) {
if (type.isArray()) {
final JConditional _if = block._if(JExpr._null().eq(value));
_if._then().assign(hash, JOp.mul(JExpr.lit(31), hash));
final JForLoop _for = _if._else()._for();
final JVar i = _for.init(codeModel.INT, "i", JExpr.lit(0));
_for.test(JOp.lt(i, value.ref("length")));
_for.update(JOp.incr(i));
final JVar valueComponent = _for.body().decl(type.elementType(),
"valueComponent", value.component(i));
_for.body().assign(
hash,
JOp.plus(
JOp.mul(JExpr.lit(31), hash),
valueHashCode(codeModel, type.elementType(),
valueComponent,
JOp.eq(JExpr._null(), valueComponent))));
} else {
block.assign(
hash,
JOp.plus(JOp.mul(JExpr.lit(31), hash),
valueHashCode(codeModel, type, value, isValueSet)));
}
}