/// <summary> Add a class to the MetaDataCache. </summary>
		/// <param name='bstrClassName'> </param>
		/// <param name='luClid'> </param>
		/// <param name='bstrSuperclassName'> </param>
		/// <param name='isAbstract'> </param>
		private void AddClass1(string bstrClassName, int luClid, string bstrSuperclassName, bool isAbstract)
		{
			var mcr = new MetaClassRec(bstrSuperclassName, isAbstract, bstrClassName) {m_clid = luClid};

			// These will throw if it is already in the dictionary.
			m_metaClassRecords.Add(luClid, mcr);
			m_nameToClid.Add(mcr.m_className, luClid);
		}
		/// <summary> Add a class to the MetaDataCache. </summary>
		/// <param name='className'> </param>
		/// <param name='clid'> </param>
		/// <param name='superclassName'> </param>
		/// <param name='isAbstract'> </param>
		private void AddClass(string className, int clid, string superclassName, bool isAbstract)
		{
			var mcr = new MetaClassRec(superclassName, isAbstract, className) {m_clid = clid};

			// These will throw if it is already in the dictionary.
			m_metaClassRecords.Add(clid, mcr);
			m_nameToClid.Add(mcr.m_className, clid);

			// Set superclass info, except for top CmObject superclass.
			if (className == "CmObject") return;

			mcr.m_baseClsid = m_nameToClid[mcr.m_superclassName];
			var mcrSuperclass = m_metaClassRecords[mcr.m_baseClsid];
			mcrSuperclass.m_directSubclasses.Add(mcr);
		}