@Override public boolean enterBinaryNode(final BinaryNode binaryNode) { if (binaryNode.isAssignment()) { final Expression lhs = binaryNode.lhs(); if (!binaryNode.isSelfModifying()) { tagNeverOptimistic(lhs); } if (lhs instanceof IdentNode) { final Symbol symbol = ((IdentNode) lhs).getSymbol(); // Assignment to internal symbols is never optimistic, except for self-assignment // expressions if (symbol.isInternal() && !binaryNode.rhs().isSelfModifying()) { tagNeverOptimistic(binaryNode.rhs()); } } } else if (binaryNode.isTokenType(TokenType.INSTANCEOF)) { tagNeverOptimistic(binaryNode.lhs()); tagNeverOptimistic(binaryNode.rhs()); } return true; }