code: public void fillArguments(@Nonnull @MustNotContainNull final List<ExpressionTree> arguments) {
      assertNotEmptySlot();
  
      if (arguments == null) {
        throw new PreprocessorException("[Expression]Argument list is null", this.sourceString, this.includeStack, null);
      }
  
      if (childElements.length != arguments.size()) {
        throw new PreprocessorException("Wrong argument list size", this.sourceString, this.includeStack, null);
      }
  
      int i = 0;
      for (ExpressionTree arg : arguments) {
        if (arg == null) {
          throw new PreprocessorException("[Expression]Argument [" + (i + 1) + "] is null", this.sourceString, this.includeStack, null);
        }
  
        if (!childElements[i].isEmptySlot()) {
          throw new PreprocessorException("[Expression]Non-empty slot detected, it is possible that there is a program error, contact a developer please", this.sourceString, this.includeStack, null);
        }
  
        final ExpressionTreeElement root = arg.getRoot();
        if (root.isEmptySlot()) {
          throw new PreprocessorException("[Expression]Empty argument [" + (i + 1) + "] detected", this.sourceString, this.includeStack, null);
        }
        childElements[i] = root;
        root.parentTreeElement = this;
  
        i++;
      }
    }
docs: It fills children slots from a list containing expression trees
  
  @param arguments the list containing trees to be used as children