if (!tree.lhs.type.isPrimitive() &&
tree.operator.type.getReturnType().isPrimitive()) {
// boxing required; need to rewrite as x = (unbox typeof x)(x op y);
// or if x == (typeof x)z then z = (unbox typeof x)((typeof x)z op y)
// (but without recomputing x)
JCTree arg = (tree.lhs.getTag() == JCTree.TYPECAST)
? ((JCTypeCast)tree.lhs).expr
: tree.lhs;
JCTree newTree = abstractLval(arg, new TreeBuilder() {
public JCTree build(final JCTree lhs) {
int newTag = tree.getTag() - JCTree.ASGOffset;
// Erasure (TransTypes) can change the type of
// tree.lhs. However, we can still get the
// unerased type of tree.lhs as it is stored