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(); }