docs: ImmutableMap<ExecutableElement, TypeMirror> methodReturnTypes(
        Set<ExecutableElement> methods, DeclaredType in) {
      ImmutableMap.Builder<ExecutableElement, TypeMirror> map = ImmutableMap.builder();
      Map<Name, ExecutableElement> noArgMethods = null;
      for (ExecutableElement method : methods) {
        TypeMirror returnType = null;
        try {
          TypeMirror methodMirror = typeUtils.asMemberOf(in, method);
          returnType = MoreTypes.asExecutable(methodMirror).getReturnType();
        } catch (IllegalArgumentException e) {
          if (method.getParameters().isEmpty()) {
            if (noArgMethods == null) {
              noArgMethods = noArgMethodsIn(in);
            }
            returnType = noArgMethods.get(method.getSimpleName()).getReturnType();
          }
        }
        if (returnType == null) {
          returnType = method.getReturnType();
        }
        map.put(method, returnType);
      }
      return map.build();
    }