{
    List<ETypeParameter> result = new ArrayList<ETypeParameter>();
    int start = 0;
    int depth = 0;
    for (int i = 0, length = templateParameters.length(); i < length; ++i)
    {
      char character = templateParameters.charAt(i);
      switch (character)
      {
        case ' ':
        {
          if (start == i)
          {
            ++start;
          }
          break;
        }
        case '<':
        {
          ++depth;
          break;
        }
        case '>':
        {
          --depth;
          break;
        }
        case ',':
        {
          if (depth == 0)
          {
            result.add(parseTemplateParameter(templateParameters.substring(start, i).trim()));
            start = i + 1;
          }
          break;
        }
      }
    }
    result.add(parseTemplateParameter(templateParameters.substring(start).trim()));
    return result;
  }