private static List<Exprent> extractParameters(List<PooledConstant> bootstrapArguments, InvocationExprent expr) {
    List<Exprent> parameters = expr.getLstParameters();
    if (bootstrapArguments != null) {
      PooledConstant constant = bootstrapArguments.get(0);
      if (constant.type == CodeConstants.CONSTANT_String) {
        String recipe = ((PrimitiveConstant)constant).getString();

        List<Exprent> res = new ArrayList<>();
        StringBuilder acc = new StringBuilder();
        int parameterId = 0;
        for (int i = 0; i < recipe.length(); i++) {
          char c = recipe.charAt(i);

          if (c == TAG_CONST || c == TAG_ARG) {
            // Detected a special tag, flush all accumulated characters
            // as a constant first:
            if (acc.length() > 0) {
              res.add(new ConstExprent(VarType.VARTYPE_STRING, acc.toString(), expr.bytecode));
              acc.setLength(0);
            }
            if (c == TAG_CONST) {
              // skip for now
            }
            if (c == TAG_ARG) {
              res.add(parameters.get(parameterId++));
            }
          }
          else {
            // Not a special characters, this is a constant embedded into
            // the recipe itself.
            acc.append(c);
          }
        }

        // Flush the remaining characters as constant:
        if (acc.length() > 0) {
          res.add(new ConstExprent(VarType.VARTYPE_STRING, acc.toString(), expr.bytecode));
        }

        return res;
      }
    }
    return new ArrayList<>(parameters);
  }