src/sap.ui.core/src/sap/ui/core/Component.js
function collectLoadManifestPromises(oMetadata, oManifest) {
			// ComponentMetadata classes with a static manifest or with legacy metadata
			// do already have a manifest, so no action required
			if (!oMetadata._oManifest) {
				// TODO: If the "manifest" property is set, the code to load the manifest.json could be moved up to run in
				// parallel with the ResourceModels that are created (after the Component-preload has finished) to trigger
				// a potential request a bit earlier. Right now the whole component loading would be delayed by the async request.

				var sName = oMetadata.getComponentName();
				var sDefaultManifestUrl = getManifestUrl(sName);

				var pLoadManifest;
				if (oManifest) {
					// Apply a copy of the already loaded manifest to be used by the static metadata class
					pLoadManifest = Promise.resolve(JSON.parse(JSON.stringify(oManifest.getRawJson())));
				} else {
					// We need to load the manifest.json for the metadata class as
					// it might differ from the one already loaded
					// If the manifest.json is part of the Component-preload it will be taken from there
					pLoadManifest = LoaderExtensions.loadResource({
						url: sDefaultManifestUrl,
						dataType: "json",
						async: true
					}).catch(function(oError) {
						Log.error(
							"Failed to load component manifest from \"" + sDefaultManifestUrl + "\" (component " + sName
							+ ")! Reason: " + oError
						);

						// If the request fails, ignoring the error would end up in a sync call, which would fail, too.
						return {};
					});
				}
				aManifestsToLoad.push(pLoadManifest);
				aMetadataObjects.push(oMetadata);
			}

			var oParentMetadata = oMetadata.getParent();
			if (oParentMetadata && (oParentMetadata instanceof ComponentMetadata) && !oParentMetadata.isBaseClass()) {
				collectLoadManifestPromises(oParentMetadata);
			}
		}
function collectLoadManifestPromises(oMetadata, oManifest) {
			// ComponentMetadata classes with a static manifest or with legacy metadata
			// do already have a manifest, so no action required
			if (!oMetadata._oManifest) {
				// TODO: If the "manifest" property is set, the code to load the manifest.json could be moved up to run in
				// parallel with the ResourceModels that are created (after the Component-preload has finished) to trigger
				// a potential request a bit earlier. Right now the whole component loading would be delayed by the async request.

				var sName = oMetadata.getComponentName();
				var sDefaultManifestUrl = getManifestUrl(sName);

				var pLoadManifest;
				if (oManifest) {
					// Apply a copy of the already loaded manifest to be used by the static metadata class
					pLoadManifest = Promise.resolve(JSON.parse(JSON.stringify(oManifest.getRawJson())));
				} else {
					// We need to load the manifest.json for the metadata class as
					// it might differ from the one already loaded
					// If the manifest.json is part of the Component-preload it will be taken from there
					pLoadManifest = LoaderExtensions.loadResource({
						url: sDefaultManifestUrl,
						dataType: "json",
						async: true
					}).catch(function(oError) {
						Log.error(
							"Failed to load component manifest from \"" + sDefaultManifestUrl + "\" (component " + sName
							+ ")! Reason: " + oError
						);

						// If the request fails, ignoring the error would end up in a sync call, which would fail, too.
						return {};
					});
				}
				aManifestsToLoad.push(pLoadManifest);
				aMetadataObjects.push(oMetadata);
			}

			var oParentMetadata = oMetadata.getParent();
			if (oParentMetadata && (oParentMetadata instanceof ComponentMetadata) && !oParentMetadata.isBaseClass()) {
				collectLoadManifestPromises(oParentMetadata);
			}
		}
function collectLoadManifestPromises ( oMetadata , oManifest ) { // ComponentMetadata classes with a static manifest or with legacy metadata // do already have a manifest, so no action required if ( ! oMetadata . _oManifest ) { // TODO: If the "manifest" property is set, the code to load the manifest.json could be moved up to run in // parallel with the ResourceModels that are created (after the Component-preload has finished) to trigger // a potential request a bit earlier. Right now the whole component loading would be delayed by the async request. var sName = oMetadata . getComponentName ( ) ; var sDefaultManifestUrl = getManifestUrl ( sName ) ; var pLoadManifest ; if ( oManifest ) { // Apply a copy of the already loaded manifest to be used by the static metadata class pLoadManifest = Promise . resolve ( JSON . parse ( JSON . stringify ( oManifest . getRawJson ( ) ) ) ) ; } else { // We need to load the manifest.json for the metadata class as // it might differ from the one already loaded // If the manifest.json is part of the Component-preload it will be taken from there pLoadManifest = LoaderExtensions . loadResource ( { url : sDefaultManifestUrl , dataType : "json" , async : true } ) . catch ( function ( oError ) { Log . error ( "Failed to load component manifest from \"" + sDefaultManifestUrl + "\" (component " + sName + ")! Reason: " + oError ) ; // If the request fails, ignoring the error would end up in a sync call, which would fail, too. return { } ; } ) ; } aManifestsToLoad . push ( pLoadManifest ) ; aMetadataObjects . push ( oMetadata ) ; } var oParentMetadata = oMetadata . getParent ( ) ; if ( oParentMetadata && ( oParentMetadata instanceof ComponentMetadata ) && ! oParentMetadata . isBaseClass ( ) ) { collectLoadManifestPromises ( oParentMetadata ) ; } }
Collects the promises to load the manifest content and all of its parents manifest files.

Gathers promises within aManifestsToLoad.
Gathers associates meta data objects within aMetadataObjects.
@param {object} oMetadata The metadata object
@param {sap.ui.core.Manifest} [oManifest] root manifest, which is possibly already loaded
Collects the promises to load the manifest content and all of its parents manifest files .