docs: public Binding toBinding(BindingElement element) {
  		final TypeReference typeReference = typeRef(element.getBind());
  		final String annotatedWith = element.getAnnotatedWith();
  		final String annotatedWithName = element.getAnnotatedWithName();
  		if (!Strings.isEmpty(annotatedWith)) {
  			final TypeReference annotationType = typeRef(annotatedWith);
  			if (element.isInstance()) {
  				return bindAnnotatedWithToInstance(typeReference, annotationType, element.getTo(),
  						element.getFunctionName());
  			}
  			final TypeReference typeReference2 = typeRef(element.getTo());
  			return bindAnnotatedWith(typeReference, annotationType, typeReference2,
  						element.getFunctionName());
  		}
  		if (!Strings.isEmpty(annotatedWithName)) {
  			if (element.isInstance()) {
  				return bindAnnotatedWithNameToInstance(typeReference, annotatedWithName,
  						element.getTo(),
  						element.getFunctionName());
  			}
  			final TypeReference typeReference2 = typeRef(element.getTo());
  			return bindAnnotatedWithName(typeReference, annotatedWithName, typeReference2,
  						element.getFunctionName());
  		}
  		if (element.isInstance()) {
  			return bindToInstance(typeReference,
  					element.getFunctionName(),
  					element.getTo(),
  					element.isSingleton(),
  					element.isEager());
  		}
  		final TypeReference typeReference2 = typeRef(element.getTo());
  		return bindToType(
  					typeReference,
  					element.getFunctionName(),
  					typeReference2,
  					element.isSingleton(),
  					element.isEager(),
  					element.isProvider());
  	}