@Nullable
    @Override
    VarargContext getContext(@NotNull PsiElement origin) {
      PsiExpressionList expressionList = PsiTreeUtil.getParentOfType(origin, PsiExpressionList.class);
      if (expressionList == null) return null;
      PsiMethodCallExpression call = ObjectUtils.tryCast(expressionList.getParent(), PsiMethodCallExpression.class);
      if (call == null) return null;
      PsiExpression[] arguments = expressionList.getExpressions();
      if (arguments.length < MIN_ELEMENTS_COUNT) return null;
      PsiMethod method = ObjectUtils.tryCast(call.getMethodExpression().resolve(), PsiMethod.class);
      if (method == null) return null;
      PsiParameterList parameterList = method.getParameterList();
      PsiParameter[] parameters = parameterList.getParameters();
      if (isSuitableVarargLikeCall(call)) {
        return new VarargContext(expressionList, Arrays.asList(call.getArgumentList().getExpressions()));
      }
      if (arguments.length - parameters.length + 1 < MIN_ELEMENTS_COUNT) return null;
      PsiExpression[] varargArguments = getVarargArguments(arguments, origin, parameters);
      if (varargArguments == null) return null;
      return new VarargContext(expressionList, Arrays.asList(varargArguments));
    }
@Nullable
    @Override
    VarargContext getContext(@NotNull PsiElement origin)