public void visitAssignmentExpression(GrAssignmentExpression expression) {
    GrExpression lValue = expression.getLValue();
    if (expression.getOperationTokenType() != mASSIGN) {
      if (lValue instanceof GrReferenceExpression
          && myPolicy.isReferenceAccepted((GrReferenceExpression) lValue)) {
        String referenceName = ((GrReferenceExpression) lValue).getReferenceName();
        if (referenceName != null) {
          addNodeAndCheckPending(new ReadWriteVariableInstruction(referenceName, lValue, READ));
        }
      }
    }

    GrExpression rValue = expression.getRValue();
    if (rValue != null) {
      rValue.accept(this);
      lValue.accept(this);
    }
  }
 private static boolean assignmentExpressionsAreEquivalent(
     @NotNull GrAssignmentExpression assignExp1, @NotNull GrAssignmentExpression assignExp2) {
   final IElementType sign1 = assignExp1.getOperationToken();
   final IElementType sign2 = assignExp2.getOperationToken();
   if (!sign1.equals(sign2)) {
     return false;
   }
   final GrExpression lhs1 = assignExp1.getLValue();
   final GrExpression lhs2 = assignExp2.getLValue();
   final GrExpression rhs1 = assignExp1.getRValue();
   final GrExpression rhs2 = assignExp2.getRValue();
   return expressionsAreEquivalent(lhs1, lhs2) && expressionsAreEquivalent(rhs1, rhs2);
 }