src/sap.ui.core/src/sap/ui/core/util/XMLPreprocessor.js
function getResolvedBinding(sValue, oElement, oWithControl, bMandatory,
					fnCallIfConstant) {
				var vBindingInfo,
					oPromise;

				Measurement.average(sPerformanceGetResolvedBinding, "", aPerformanceCategories);
				try {
					vBindingInfo
						= BindingParser.complexParser(sValue, oScope, bMandatory, true, true, true)
						|| sValue; // in case there is no binding and nothing to unescape
				} catch (e) {
					return SyncPromise.reject(e);
				}

				if (vBindingInfo.functionsNotFound) {
					if (bMandatory) {
						warn(oElement, 'Function name(s)',
							vBindingInfo.functionsNotFound.join(", "), 'not found');
					}
					Measurement.end(sPerformanceGetResolvedBinding);
					return null; // treat incomplete bindings as unrelated
				}

				if (typeof vBindingInfo === "object") {
					oPromise = getAny(oWithControl, vBindingInfo, mSettings, oScope,
						!oViewInfo.sync);
					if (bMandatory && !oPromise) {
						warn(oElement, 'Binding not ready');
					} else if (oViewInfo.sync && oPromise && oPromise.isPending()) {
						error("Async formatter in sync view in " + sValue + " of ", oElement);
					}
				} else {
					oPromise = SyncPromise.resolve(vBindingInfo);
					if (fnCallIfConstant) { // string
						fnCallIfConstant();
					}
				}
				Measurement.end(sPerformanceGetResolvedBinding);
				return oPromise;
			}
function getResolvedBinding(sValue, oElement, oWithControl, bMandatory,
					fnCallIfConstant) {
				var vBindingInfo,
					oPromise;

				Measurement.average(sPerformanceGetResolvedBinding, "", aPerformanceCategories);
				try {
					vBindingInfo
						= BindingParser.complexParser(sValue, oScope, bMandatory, true, true, true)
						|| sValue; // in case there is no binding and nothing to unescape
				} catch (e) {
					return SyncPromise.reject(e);
				}

				if (vBindingInfo.functionsNotFound) {
					if (bMandatory) {
						warn(oElement, 'Function name(s)',
							vBindingInfo.functionsNotFound.join(", "), 'not found');
					}
					Measurement.end(sPerformanceGetResolvedBinding);
					return null; // treat incomplete bindings as unrelated
				}

				if (typeof vBindingInfo === "object") {
					oPromise = getAny(oWithControl, vBindingInfo, mSettings, oScope,
						!oViewInfo.sync);
					if (bMandatory && !oPromise) {
						warn(oElement, 'Binding not ready');
					} else if (oViewInfo.sync && oPromise && oPromise.isPending()) {
						error("Async formatter in sync view in " + sValue + " of ", oElement);
					}
				} else {
					oPromise = SyncPromise.resolve(vBindingInfo);
					if (fnCallIfConstant) { // string
						fnCallIfConstant();
					}
				}
				Measurement.end(sPerformanceGetResolvedBinding);
				return oPromise;
			}
function getResolvedBinding ( sValue , oElement , oWithControl , bMandatory , fnCallIfConstant ) { var vBindingInfo , oPromise ; Measurement . average ( sPerformanceGetResolvedBinding , "" , aPerformanceCategories ) ; try { vBindingInfo = BindingParser . complexParser ( sValue , oScope , bMandatory , true , true , true ) || sValue ; // in case there is no binding and nothing to unescape } catch ( e ) { return SyncPromise . reject ( e ) ; } if ( vBindingInfo . functionsNotFound ) { if ( bMandatory ) { warn ( oElement , 'Function name(s)' , vBindingInfo . functionsNotFound . join ( ", " ) , 'not found' ) ; } Measurement . end ( sPerformanceGetResolvedBinding ) ; return null ; // treat incomplete bindings as unrelated } if ( typeof vBindingInfo === "object" ) { oPromise = getAny ( oWithControl , vBindingInfo , mSettings , oScope , ! oViewInfo . sync ) ; if ( bMandatory && ! oPromise ) { warn ( oElement , 'Binding not ready' ) ; } else if ( oViewInfo . sync && oPromise && oPromise . isPending ( ) ) { error ( "Async formatter in sync view in " + sValue + " of " , oElement ) ; } } else { oPromise = SyncPromise . resolve ( vBindingInfo ) ; if ( fnCallIfConstant ) { // string fnCallIfConstant ( ) ; } } Measurement . end ( sPerformanceGetResolvedBinding ) ; return oPromise ; }
Interprets the given value as a binding and returns the resulting value; takes care
of unescaping and thus also of constant expressions.

@param {string} sValue
an XML DOM attribute value
@param {Element} oElement
the XML DOM element
@param {sap.ui.core.util._with} oWithControl
the "with" control
@param {boolean} bMandatory
whether a binding is actually required (e.g. by a <code>template:if</code>) and not
optional (e.g. for {@link resolveAttributeBinding}); if so, the binding parser
unescapes the given value (which is a prerequisite for constant expressions) and
warnings are logged for functions not found
@param {function} [fnCallIfConstant]
optional function to be called in case the return value is obviously a constant,
not influenced by any binding
@returns {sap.ui.base.SyncPromise|null}
a sync promise which resolves with the property value or is rejected with a
corresponding error (for example, an error thrown by a formatter), or
<code>null</code> in case the binding is not ready (because it refers to a model
which is not available)
@throws {Error}
if a formatter returns a promise in sync mode
Interprets the given value as a binding and returns the resulting value ; takes care of unescaping and thus also of constant expressions .