static internal object ToFactoryObject(ClassFactory classFactory, InspectableAdapter adapter) { if (adapter == null) { return(null); } InspectableAdapter inspectableAdapter; EnumValueAdapter enumValueAdapter = adapter as EnumValueAdapter; if (enumValueAdapter != null) { return(ToEnumValue(classFactory, enumValueAdapter)); } PropertyValueAdapter pvAdapter = adapter as PropertyValueAdapter; if (pvAdapter != null) { if (pvAdapter.PropertyType == PropertyType.InspectableArray) { IntPtr[] arrayObjects = pvAdapter.GetInspectableArray(); object[] factoryObjects = new object[arrayObjects.Length]; for (int index = 0; index < arrayObjects.Length; ++index) { inspectableAdapter = ObjectStaticsUtil.CreateInspectable(arrayObjects[index]); factoryObjects[index] = ToFactoryObject(classFactory, inspectableAdapter); } return(factoryObjects); } return(pvAdapter.ToObject()); } ObjectAdapter objectAdapter = adapter as ObjectAdapter; if (objectAdapter != null) { return(ToObject(classFactory, objectAdapter)); } DictionaryAdapter dictionaryAdapter = adapter as DictionaryAdapter; if (dictionaryAdapter != null) { return(new Dictionary(dictionaryAdapter, classFactory)); } inspectableAdapter = adapter as InspectableAdapter; if (inspectableAdapter != null) { return(new FactoryObject <InspectableAdapter>(inspectableAdapter, classFactory)); } throw new NotImplementedException(); }
static internal object ToEnumValue(ClassFactory classFactory, EnumValueAdapter adapter) { uint value = adapter.EnumValue; if (classFactory != null) { Guid iid = adapter.RuntimeType; Type type; if (classFactory._objectTypes.TryGetValue(iid, out type)) { return(Enum.ToObject(type, value)); } } return(value); }