Metadata = function(sClassName, oClassInfo) {

		assert(typeof sClassName === "string" && sClassName, "Metadata: sClassName must be a non-empty string");
		assert(typeof oClassInfo === "object", "Metadata: oClassInfo must be empty or an object");

		/**
		 * Support for old usage of Metadata.
		 * @deprecated Since 1.3.1
		 */
		if ( !oClassInfo || typeof oClassInfo.metadata !== "object" ) {
			oClassInfo = {
				metadata : oClassInfo || {},
				// retrieve class by its name. Using a lookup costs time but avoids the need for redundant arguments to this function
				constructor : ObjectPath.get(sClassName) // legacy-relevant, code path not used by extend call
			};
			oClassInfo.metadata.__version = 1.0;
		}

		oClassInfo.metadata ??= {};
		oClassInfo.metadata.__version = oClassInfo.metadata.__version || 2.0;
		if ( !isFunction(oClassInfo.constructor) ) {
			throw Error("constructor for class " + sClassName + " must have been declared before creating metadata for it");
		}

		// invariant: oClassInfo exists, oClassInfo.metadata exists, oClassInfo.constructor exists
		this._sClassName = sClassName;
		this._oClass = oClassInfo.constructor;
		this.extend(oClassInfo);
	}
Creates a new metadata object from the given static infos.

<b>Note:</b> Throughout this class documentation, the described subclass of Object
is referenced as <i>the described class</i>.

@param {string} sClassName Fully qualified name of the described class
@param {object} oClassInfo Info to construct the class and its metadata from
@param {sap.ui.base.Object.MetadataOptions} [oClassInfo.metadata]
 The metadata object describing the class

@class Metadata for a class.
@author Frank Weigel
@version ${version}
@since 0.8.6
@public
@alias sap.ui.base.Metadata