private void callBeforeExpressionPush(@NotNull DfaValue value,
                                        @NotNull PsiExpression expression,
                                        @NotNull DfaMemoryState state,
                                        PsiExpression anchor) {
    beforeExpressionPush(value, anchor, state);
    PsiElement parent = PsiUtil.skipParenthesizedExprUp(anchor.getParent());
    if (parent instanceof PsiLambdaExpression) {
      beforeValueReturn(value, expression, parent, state);
    }
    else if (parent instanceof PsiReturnStatement) {
      PsiParameterListOwner context = PsiTreeUtil.getParentOfType(parent, PsiMethod.class, PsiLambdaExpression.class);
      if (context != null) {
        beforeValueReturn(value, expression, context, state);
      }
    }
    else if (anchor instanceof PsiArrayInitializerExpression && parent instanceof PsiNewExpression) {
      callBeforeExpressionPush(value, expression, state, (PsiExpression)parent);
    }
    else if (parent instanceof PsiConditionalExpression &&
             !PsiTreeUtil.isAncestor(((PsiConditionalExpression)parent).getCondition(), anchor, false)) {
      callBeforeExpressionPush(value, expression, state, (PsiConditionalExpression)parent);
    }
  }
private void callBeforeExpressionPush(@NotNull DfaValue value,
                                        @NotNull PsiExpression expression,
                                        @NotNull DfaMemoryState state,
                                        PsiExpression anchor)