docs: protected Binding bindAnnotatedWith(TypeReference bind, TypeReference annotatedWith, TypeReference to,
  			String functionName) {
  		final StringConcatenationClient client = new StringConcatenationClient() {
  			@Override
  			protected void appendTo(TargetStringConcatenation builder) {
  				builder.append("binder.bind("); //$NON-NLS-1$
  				builder.append(bind);
  				builder.append(".class).annotatedWith("); //$NON-NLS-1$
  				builder.append(annotatedWith);
  				builder.append(".class).to("); //$NON-NLS-1$
  				builder.append(to);
  				builder.append(".class);"); //$NON-NLS-1$
  			}
  		};
  		String fctname = functionName;
  		if (Strings.isEmpty(fctname)) {
  			fctname = bind.getSimpleName();
  		}
  		final BindKey key = new GuiceModuleAccess.BindKey(formatFunctionName(fctname), null, false, false);
  		final  BindValue statements = new BindValue(null, null, false, Collections.singletonList(client));
  	    return new Binding(key, statements, true, this.name);
  	}