@Nullable
  private static NullabilityProblem<?> getAssignmentProblem(@NotNull PsiAssignmentExpression assignment,
                                                            @NotNull PsiExpression expression,
                                                            @NotNull PsiExpression context) {
    IElementType tokenType = assignment.getOperationTokenType();
    if (assignment.getRExpression() == context) {
      PsiExpression lho = PsiUtil.skipParenthesizedExprDown(assignment.getLExpression());
      if (lho != null) {
        PsiType type = lho.getType();
        if (tokenType.equals(JavaTokenType.PLUSEQ) && TypeUtils.isJavaLangString(type)) {
          return null;
        }
        if (type instanceof PsiPrimitiveType) {
          return createUnboxingProblem(context, expression);
        }
        Nullability nullability = Nullability.UNKNOWN;
        PsiVariable target = null;
        if (lho instanceof PsiReferenceExpression) {
          target = tryCast(((PsiReferenceExpression)lho).resolve(), PsiVariable.class);
          if (target != null) {
            nullability = DfaPsiUtil.getElementNullability(type, target);
          }
        }
        else {
          nullability = DfaPsiUtil.getTypeNullability(type);
        }
        boolean forceDeclaredNullity = !(target instanceof PsiParameter && target.getParent() instanceof PsiParameterList);
        if (forceDeclaredNullity && nullability == Nullability.NOT_NULL) {
          return (lho instanceof PsiArrayAccessExpression ? storingToNotNullArray : assigningToNotNull).problem(context, expression);
        }
        if (nullability == Nullability.UNKNOWN && lho instanceof PsiReferenceExpression) {
          PsiField field = tryCast(((PsiReferenceExpression)lho).resolve(), PsiField.class);
          if (field != null && !field.hasModifierProperty(PsiModifier.FINAL)) {
            return assigningToNonAnnotatedField.problem(context, expression);
          }
        }
      }
    }
    return null;
  }
@Nullable
  private static NullabilityProblem<?> getAssignmentProblem(@NotNull PsiAssignmentExpression assignment,
                                                            @NotNull PsiExpression expression,
                                                            @NotNull PsiExpression context)