private Entry<String, List<String>> resolveTypes(Entry<String, List<String>> sourceTypes) {
    String typeName = sourceTypes.getKey();
    typeName = importsResolver.apply(typeName);
    hasMaybeUnresolvedYetAfter |= importsResolver.unresolved;

    List<String> typeArguments = Lists.newArrayListWithCapacity(sourceTypes.getValue().size());
    for (String typeArgument : sourceTypes.getValue()) {
      String resolvedTypeArgument = SourceTypes.stringify(resolveTypes(SourceTypes.extract(typeArgument)));
      typeArguments.add(resolvedTypeArgument);
    }
    return Maps.immutableEntry(typeName, typeArguments);
  }
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