src/sap.f/src/sap/f/cards/BindingResolver.js
function process(vValue, oModel, sPath, iCurrentLevel, iMaxLevel) {
			var bReachedMaxLevel = iCurrentLevel === iMaxLevel;
			if (bReachedMaxLevel) {
				Log.warning("BindingResolver maximum level processing reached. Please check for circular dependencies.");
			}

			if (!vValue || bReachedMaxLevel) {
				return vValue;
			}

			if (Array.isArray(vValue)) {
				vValue.forEach(function (vItem, iIndex, aArray) {
					if (typeof vItem === "object") {
						process(vItem, oModel, sPath, iCurrentLevel + 1, iMaxLevel);
					} else if (typeof vItem === "string") {
						aArray[iIndex] = resolveBinding(vItem, oModel, sPath);
					}
				}, this);
				return vValue;
			} else if (typeof vValue === "object") {
				for (var sProp in vValue) {
					if (typeof vValue[sProp] === "object") {
						process(vValue[sProp], oModel, sPath, iCurrentLevel + 1, iMaxLevel);
					} else if (typeof vValue[sProp] === "string") {
						vValue[sProp] = resolveBinding(vValue[sProp], oModel, sPath);
					}
				}
				return vValue;
			} else if (typeof vValue === "string") {
				return resolveBinding(vValue, oModel, sPath);
			} else {
				return vValue;
			}
		}
function process(vValue, oModel, sPath, iCurrentLevel, iMaxLevel) {
			var bReachedMaxLevel = iCurrentLevel === iMaxLevel;
			if (bReachedMaxLevel) {
				Log.warning("BindingResolver maximum level processing reached. Please check for circular dependencies.");
			}

			if (!vValue || bReachedMaxLevel) {
				return vValue;
			}

			if (Array.isArray(vValue)) {
				vValue.forEach(function (vItem, iIndex, aArray) {
					if (typeof vItem === "object") {
						process(vItem, oModel, sPath, iCurrentLevel + 1, iMaxLevel);
					} else if (typeof vItem === "string") {
						aArray[iIndex] = resolveBinding(vItem, oModel, sPath);
					}
				}, this);
				return vValue;
			} else if (typeof vValue === "object") {
				for (var sProp in vValue) {
					if (typeof vValue[sProp] === "object") {
						process(vValue[sProp], oModel, sPath, iCurrentLevel + 1, iMaxLevel);
					} else if (typeof vValue[sProp] === "string") {
						vValue[sProp] = resolveBinding(vValue[sProp], oModel, sPath);
					}
				}
				return vValue;
			} else if (typeof vValue === "string") {
				return resolveBinding(vValue, oModel, sPath);
			} else {
				return vValue;
			}
		}
function process ( vValue , oModel , sPath , iCurrentLevel , iMaxLevel ) { var bReachedMaxLevel = iCurrentLevel === iMaxLevel ; if ( bReachedMaxLevel ) { Log . warning ( "BindingResolver maximum level processing reached. Please check for circular dependencies." ) ; } if ( ! vValue || bReachedMaxLevel ) { return vValue ; } if ( Array . isArray ( vValue ) ) { vValue . forEach ( function ( vItem , iIndex , aArray ) { if ( typeof vItem === "object" ) { process ( vItem , oModel , sPath , iCurrentLevel + 1 , iMaxLevel ) ; } else if ( typeof vItem === "string" ) { aArray [ iIndex ] = resolveBinding ( vItem , oModel , sPath ) ; } } , this ) ; return vValue ; } else if ( typeof vValue === "object" ) { for ( var sProp in vValue ) { if ( typeof vValue [ sProp ] === "object" ) { process ( vValue [ sProp ] , oModel , sPath , iCurrentLevel + 1 , iMaxLevel ) ; } else if ( typeof vValue [ sProp ] === "string" ) { vValue [ sProp ] = resolveBinding ( vValue [ sProp ] , oModel , sPath ) ; } } return vValue ; } else if ( typeof vValue === "string" ) { return resolveBinding ( vValue , oModel , sPath ) ; } else { return vValue ; } }
Traverses an object and resolves all binding syntaxes.

@param {*} vValue The value to resolve.
@param {sap.ui.model.Model} oModel The model.
@param {string} [sPath] The path to take.
@param {number} iCurrentLevel The current level of recursion.
@param {number} iMaxLevel The maximum level of recursion.
@private
@returns {*} The resolved value.
Traverses an object and resolves all binding syntaxes .