function (oInterface, oRawValue) {
			var oAssociationEnd,
				sPath,
				sContextPath,
				iIndexOfAt,
				oModel = oInterface.getModel(),
				aParts,
				oResult = {
					associationSetEnd : undefined,
					navigationAfterMultiple : false,
					isMultiple : false,
					navigationProperties : [],
					resolvedPath : undefined
				},
				sSegment,
				oType;

			Measurement.average(sPerformanceFollowPath, "", aPerformanceCategories);
			sPath = Basics.getPath(oRawValue);
			sContextPath = sPath !== undefined && Basics.getStartingPoint(oInterface, sPath);
			if (!sContextPath) {
				Measurement.end(sPerformanceFollowPath);
				return undefined;
			}
			aParts = sPath.split("/");

			while (sPath && aParts.length && sContextPath) {
				sSegment = aParts[0];
				iIndexOfAt = sSegment.indexOf("@");
				if (iIndexOfAt === 0) {
					// term cast
					sContextPath += "/" + sSegment.slice(1);
					aParts.shift();
					continue;
//				} else if (iIndexOfAt > 0) { // annotation of a navigation property
//					sSegment = sSegment.slice(0, iIndexOfAt);
				}

				oType = oModel.getObject(sContextPath);
				oAssociationEnd = oModel.getODataAssociationEnd(oType, sSegment);
				if (oAssociationEnd) {
					// navigation property
					oResult.associationSetEnd
						= oModel.getODataAssociationSetEnd(oType, sSegment);
					oResult.navigationProperties.push(sSegment);
					if (oResult.isMultiple) {
						oResult.navigationAfterMultiple = true;
					}
					oResult.isMultiple = oAssociationEnd.multiplicity === "*";
					sContextPath = oModel.getODataEntityType(oAssociationEnd.type, true);
					aParts.shift();
					continue;
				}

				// structural properties or some unsupported case
				sContextPath = oModel.getODataProperty(oType, aParts, true);
			}

			oResult.resolvedPath = sContextPath;
			Measurement.end(sPerformanceFollowPath);
			return oResult;
		}
function (oInterface, oRawValue) {
			var oAssociationEnd,
				sPath,
				sContextPath,
				iIndexOfAt,
				oModel = oInterface.getModel(),
				aParts,
				oResult = {
					associationSetEnd : undefined,
					navigationAfterMultiple : false,
					isMultiple : false,
					navigationProperties : [],
					resolvedPath : undefined
				},
				sSegment,
				oType;

			Measurement.average(sPerformanceFollowPath, "", aPerformanceCategories);
			sPath = Basics.getPath(oRawValue);
			sContextPath = sPath !== undefined && Basics.getStartingPoint(oInterface, sPath);
			if (!sContextPath) {
				Measurement.end(sPerformanceFollowPath);
				return undefined;
			}
			aParts = sPath.split("/");

			while (sPath && aParts.length && sContextPath) {
				sSegment = aParts[0];
				iIndexOfAt = sSegment.indexOf("@");
				if (iIndexOfAt === 0) {
					// term cast
					sContextPath += "/" + sSegment.slice(1);
					aParts.shift();
					continue;
//				} else if (iIndexOfAt > 0) { // annotation of a navigation property
//					sSegment = sSegment.slice(0, iIndexOfAt);
				}

				oType = oModel.getObject(sContextPath);
				oAssociationEnd = oModel.getODataAssociationEnd(oType, sSegment);
				if (oAssociationEnd) {
					// navigation property
					oResult.associationSetEnd
						= oModel.getODataAssociationSetEnd(oType, sSegment);
					oResult.navigationProperties.push(sSegment);
					if (oResult.isMultiple) {
						oResult.navigationAfterMultiple = true;
					}
					oResult.isMultiple = oAssociationEnd.multiplicity === "*";
					sContextPath = oModel.getODataEntityType(oAssociationEnd.type, true);
					aParts.shift();
					continue;
				}

				// structural properties or some unsupported case
				sContextPath = oModel.getODataProperty(oType, aParts, true);
			}

			oResult.resolvedPath = sContextPath;
			Measurement.end(sPerformanceFollowPath);
			return oResult;
		}
function ( oInterface , oRawValue ) { var oAssociationEnd , sPath , sContextPath , iIndexOfAt , oModel = oInterface . getModel ( ) , aParts , oResult = { associationSetEnd : undefined , navigationAfterMultiple : false , isMultiple : false , navigationProperties : [ ] , resolvedPath : undefined } , sSegment , oType ; Measurement . average ( sPerformanceFollowPath , "" , aPerformanceCategories ) ; sPath = Basics . getPath ( oRawValue ) ; sContextPath = sPath !== undefined && Basics . getStartingPoint ( oInterface , sPath ) ; if ( ! sContextPath ) { Measurement . end ( sPerformanceFollowPath ) ; return undefined ; } aParts = sPath . split ( "/" ) ; while ( sPath && aParts . length && sContextPath ) { sSegment = aParts [ 0 ] ; iIndexOfAt = sSegment . indexOf ( "@" ) ; if ( iIndexOfAt === 0 ) { // term cast sContextPath += "/" + sSegment . slice ( 1 ) ; aParts . shift ( ) ; continue ; //				} else if (iIndexOfAt > 0) { // annotation of a navigation property //					sSegment = sSegment.slice(0, iIndexOfAt); } oType = oModel . getObject ( sContextPath ) ; oAssociationEnd = oModel . getODataAssociationEnd ( oType , sSegment ) ; if ( oAssociationEnd ) { // navigation property oResult . associationSetEnd = oModel . getODataAssociationSetEnd ( oType , sSegment ) ; oResult . navigationProperties . push ( sSegment ) ; if ( oResult . isMultiple ) { oResult . navigationAfterMultiple = true ; } oResult . isMultiple = oAssociationEnd . multiplicity === "*" ; sContextPath = oModel . getODataEntityType ( oAssociationEnd . type , true ) ; aParts . shift ( ) ; continue ; } // structural properties or some unsupported case sContextPath = oModel . getODataProperty ( oType , aParts , true ) ; } oResult . resolvedPath = sContextPath ; Measurement . end ( sPerformanceFollowPath ) ; return oResult ; }
Follows the dynamic "14.5.12 Expression edm:Path" (or variant thereof) contained within
the given raw value, starting the absolute path identified by the given interface, and
returns the resulting absolute path as well as some other aspects about the path.

@param {sap.ui.core.util.XMLPreprocessor.IContext|sap.ui.model.Context} oInterface
the callback interface related to the current formatter call; the path must be within
a complex or entity type!
@param {object} oRawValue
the raw value from the meta model, e.g. <code>{AnnotationPath :
"ToSupplier/@com.sap.vocabularies.Communication.v1.Address"}</code> or <code>
{AnnotationPath : "@com.sap.vocabularies.UI.v1.FieldGroup#Dimensions"}</code>;
embedded within an entity set or entity type
@returns {object}
- {object} [associationSetEnd=undefined]
association set end corresponding to the last navigation property
- {boolean} [navigationAfterMultiple=false]
if the navigation path has an association end with multiplicity "*" which is not
the last one
- {boolean} [isMultiple=false]
whether the navigation path ends with an association end with multiplicity "*"
- {string[]} [navigationProperties=[]]
all navigation property names
- {string} [resolvedPath=undefined]
the resulting absolute path

@see sap.ui.model.odata.AnnotationHelper.getNavigationPath
@see sap.ui.model.odata.AnnotationHelper.gotoEntitySet
@see sap.ui.model.odata.AnnotationHelper.isMultiple
@see sap.ui.model.odata.AnnotationHelper.resolvePath
Follows the dynamic 14 . 5 . 12 Expression edm : Path ( or variant thereof ) contained within the given raw value starting the absolute path identified by the given interface and returns the resulting absolute path as well as some other aspects about the path .
Returns the value of the property