code: protected List<TypeName> getExtractedTypes(TypeName permutationType, TypeName paramType) {
      return match(permutationType)
          .when(typeOf(ParameterizedTypeName.class)).get(
              t -> {
                if (isDecomposableBuilder(t.rawType)) {
                  return t.typeArguments.subList(1, t.typeArguments.size());
                } else if (t.rawType.equals(MATCH_ANY)) {
                  return ImmutableList.of(paramType);
                } else {
                  return Collections.<TypeName>emptyList();
                }
              })
          .when(typeOf(TypeVariableName.class)).get(t -> ImmutableList.of())
          .when(typeOf(ClassName.class)).get(t -> ImmutableList.of(paramType))
          .orElse(t -> ImmutableList.of(t))
          .getMatch();
    }
docs: Returns the extracted type parameters.