private static Map<Set<TypeParameter>, Constructor<?>> findConstructors(Class<?> clazz) {
   ImmutableMap.Builder<Set<TypeParameter>, Constructor<?>> builder = ImmutableMap.builder();
   for (Constructor<?> constructor : clazz.getConstructors()) {
     Set<TypeParameter> typeParameters = new HashSet<>();
     Stream.of(constructor.getAnnotationsByType(TypeParameter.class)).forEach(typeParameters::add);
     builder.put(typeParameters, constructor);
   }
   return builder.build();
 }