async getChangeHandler(mPropertyBag) {
			const sChangeType = mPropertyBag.changeType || mPropertyBag.flexObject?.getChangeType();
			if (mPropertyBag.flexObject instanceof AppDescriptorChange || mPropertyBag.appDescriptorChange) {
				const mStrategy = mPropertyBag.strategy || await ApplyStrategyFactory.getRuntimeStrategy();
				try {
					const oRegistry = await mStrategy.registry();
					return await oRegistry[sChangeType]?.();
				} catch (oError) {
					mStrategy.handleError(oError);
				}
			} else if (mPropertyBag.flexObject instanceof AnnotationChange || mPropertyBag.annotationChange) {
				return ChangeHandlerStorage.getAnnotationChangeHandler({
					changeType: sChangeType
				});
			} else if (isVariantRelated(mPropertyBag)) {
				return VariantManagementState.getChangeInformationProvider(mPropertyBag.flexObject);
			} else if (mPropertyBag.control) {
				const sLibraryName = await mPropertyBag.modifier.getLibraryName(mPropertyBag.control);
				// the ChangeHandlerRegistration includes all the predefined ChangeHandlers.
				// With this as a standard import the ChangeHandlers would not be able to access API classes due to circular dependencies.
				// TODO should be removed as soon as the ChangePersistence / FlexController are gone
				const ChangeHandlerRegistration =
					await requireAsync("sap/ui/fl/initial/_internal/changeHandlers/ChangeHandlerRegistration");
				await ChangeHandlerRegistration.waitForChangeHandlerRegistration(sLibraryName);
				const sLayer = mPropertyBag.layer || mPropertyBag.flexObject?.getLayer();
				return ChangeHandlerStorage.getChangeHandler(
					sChangeType, mPropertyBag.controlType, mPropertyBag.control, mPropertyBag.modifier, sLayer
				);
			}
			return undefined;
		}
Fetches the change handler or ChangeInformationProvider for a specific flex object or for the given parameters
(e.g. for UI changes or when the flex object is not available yet).
ChangeInformationProvider only provide functions to condense or visualize the changes.
If the change handler is currently being registered, the function waits for the registration.

@param {object} mPropertyBag - Data required to retrieve the change handler
@param {sap.ui.fl.apply._internal.flexObjects.FlexObject} [mPropertyBag.flexObject] - Flex object for which the change handler is requested
@param {string} [mPropertyBag.changeType] - Change type of the flex object
@param {sap.ui.core.Control} [mPropertyBag.control] - Control for which the change handler is requested
@param {string} [mPropertyBag.controlType] - Type of the control for which the change handler is requested
@param {string} [mPropertyBag.layer] - Layer of the flex object
@param {sap.ui.core.util.reflection.BaseTreeModifier} [mPropertyBag.modifier] - Control tree modifier
@param {boolean} [mPropertyBag.appDescriptorChange] - Whether the flex object is an app descriptor change
@param {boolean} [mPropertyBag.annotationChange] - Whether the flex object is an annotation change
@returns {Promise} Promise resolving with the retrieved change handler or undefined