private static void startStreamFromCollection(CFGBuilder builder, Step firstStep, PsiExpression collectionExpression) {
    PsiType elementType = PsiUtil.substituteTypeParameter(collectionExpression.getType(), JAVA_UTIL_COLLECTION, 0, false);
    if (collectionExpression instanceof PsiMethodCallExpression call &&
        COLLECTION_SOURCE.matches(call)) {
      PsiExpression[] args = call.getArgumentList().getExpressions();
      if (args.length == 1 && !MethodCallUtils.isVarArgCall(call)) {
        startStreamFromContainer(builder, firstStep, args[0], SpecialField.ARRAY_LENGTH, elementType);
      } else {
        builder
          .chain(firstStep::before)
          .loopOver(args, builder.createTempVariable(elementType), elementType)
          .chain(firstStep::iteration).end();
      }
    } else {
      startStreamFromContainer(builder, firstStep, collectionExpression, SpecialField.COLLECTION_SIZE, elementType);
    }
  }
private static void startStreamFromCollection(CFGBuilder builder, Step firstStep, PsiExpression collectionExpression)