docs: private boolean checkSetterParameter(ExecutableElement valueGetter, ExecutableElement setter) {
      TypeMirror targetType = getterToPropertyType.get(valueGetter);
      ExecutableType finalSetter =
          MoreTypes.asExecutable(
              typeUtils.asMemberOf(MoreTypes.asDeclared(builderType.asType()), setter));
      TypeMirror parameterType = finalSetter.getParameterTypes().get(0);
      if (typeUtils.isSameType(parameterType, targetType)) {
        return true;
      }
  
      // Parameter type is not equal to property type, but might be convertible with copyOf.
      ImmutableList<ExecutableElement> copyOfMethods = copyOfMethods(targetType);
      if (!copyOfMethods.isEmpty()) {
        return canMakeCopyUsing(copyOfMethods, valueGetter, setter);
      }
      String error =
          String.format(
              "Parameter type %s of setter method should be %s to match getter %s.%s",
              parameterType, targetType, autoValueClass, valueGetter.getSimpleName());
      errorReporter.reportError(error, setter);
      return false;
    }