private void appendTypeArguments(TypeMirror type, DeclaredType declaredType) {
    List<? extends TypeMirror> arguments = declaredType.getTypeArguments();
    if (!arguments.isEmpty()) {
      buffer.append('<');
      boolean notFirst = false;
      for (TypeMirror argument : arguments) {
        typeAnnotationHandle(argument);
        if (notFirst) {
          buffer.append(',').append(' ');
        }
        notFirst = true;
        int mark = buffer.length();
        caseType(argument);
        cutTypeArgument(type, mark);
      }
      buffer.append('>');
    }
  }
Encapsulates routines and various hacks for get relevant strings for the raw types and type
parameters, while attempting to resolve unresolved types using source imports.
value-processor/src/org/immutables/value/processor/meta/TypeStringProvider.java