@Nonnull
  public ConstructorCallInfo findConstructorCallInfoForField(
      @Nonnull String simpleName, @Nonnull TypeMirror type) throws IllegalArgumentException {
    ConstructorDeclaration constructorDeclaration = TypeUtils.findBestConstructor(classDeclaration);

    int index = 0;

    for (ParameterDeclaration parameterDeclaration : constructorDeclaration.getParameters()) {
      if (parameterDeclaration.getSimpleName().equals(simpleName)) {
        // Found a fitting type
        if (TypeUtils.mightBeConstructorCallFor(parameterDeclaration.getType(), type)) {
          return new ConstructorCallInfo(constructorDeclaration, index, parameterDeclaration);
        } else {
          throw new IllegalArgumentException(
              "Type mismatch for <"
                  + simpleName
                  + ">. Was <"
                  + parameterDeclaration.getType()
                  + "> but expected <"
                  + type
                  + ">");
        }
      }
      index++;
    }

    throw new IllegalArgumentException("No parameter found that fits <" + simpleName + ">");
  }