@Nullable
  private static NullabilityProblem<? extends PsiElement> getParameterProblem(@NotNull PsiParameter parameter,
                                                                              @NotNull PsiExpression expression,
                                                                              @NotNull PsiExpression context) {
    if (parameter.getType() instanceof PsiPrimitiveType) {
      return createUnboxingProblem(context, expression);
    }
    // Either context -> expressionList -> call (if context is argument)
    // or context -> referenceExpression -> call (if context is qualifier)
    PsiElement grandParent = context.getParent().getParent();
    if (grandParent instanceof PsiAnonymousClass) {
      grandParent = grandParent.getParent();
    }
    if (grandParent instanceof PsiCall) {
      PsiSubstitutor substitutor = ((PsiCall)grandParent).resolveMethodGenerics().getSubstitutor();
      Nullability nullability = DfaPsiUtil.getElementNullability(substitutor.substitute(parameter.getType()), parameter);
      if (nullability == Nullability.NOT_NULL) {
        return passingToNotNullParameter.problem(context, expression);
      }
      if (nullability == Nullability.UNKNOWN) {
        return passingToNonAnnotatedParameter.problem(context, expression);
      }
    }
    return null;
  }
@Nullable
  private static NullabilityProblem<? extends PsiElement> getParameterProblem(@NotNull PsiParameter parameter,
                                                                              @NotNull PsiExpression expression,
                                                                              @NotNull PsiExpression context)