Ejemplo n.º 1
0
        private static void PopulateKnownSerializers()
        {
            object obj;

            Type[] typeArray;
            int    i;

            foreach (Type type in ApexReflection.GetRelevantTypes().Where <Type>((Type t) => {
                if (!typeof(IValueConverter).IsAssignableFrom(t) && !typeof(IStager).IsAssignableFrom(t) && !typeof(ISerializer).IsAssignableFrom(t) || t.IsAbstract)
                {
                    return(false);
                }
                return(t.GetConstructor(Type.EmptyTypes) != null);
            }))
            {
                FieldInfo field = type.GetField("instance", BindingFlags.Static | BindingFlags.Public);
                obj = (field == null ? Activator.CreateInstance(type) : field.GetValue(null));
                IValueConverter valueConverter = obj as IValueConverter;
                if (valueConverter != null)
                {
                    if (valueConverter.handledTypes == null)
                    {
                        continue;
                    }
                    typeArray = valueConverter.handledTypes;
                    for (i = 0; i < (int)typeArray.Length; i++)
                    {
                        Type type1 = typeArray[i];
                        if (!SerializationMaster._typeConverters.ContainsKey(type1) || type.IsDefined <SerializationOverrideAttribute>(false))
                        {
                            SerializationMaster._typeConverters[type1] = valueConverter;
                        }
                    }
                }
                else if (!(obj is ISerializer) || SerializationMaster._serializer != null && !type.IsDefined <SerializationOverrideAttribute>(false))
                {
                    IStager stager = obj as IStager;
                    if (stager.handledTypes == null)
                    {
                        continue;
                    }
                    typeArray = stager.handledTypes;
                    for (i = 0; i < (int)typeArray.Length; i++)
                    {
                        Type type2 = typeArray[i];
                        if (!SerializationMaster._typeStagers.ContainsKey(type2) || type.IsDefined <SerializationOverrideAttribute>(false))
                        {
                            SerializationMaster._typeStagers[type2] = stager;
                        }
                    }
                }
                else
                {
                    SerializationMaster._serializer = (ISerializer)obj;
                }
            }
        }
 private static IEnumerable <Type> GetDerived(Type forType)
 {
     return(ApexReflection.GetRelevantTypes().Where <Type>((Type t) => {
         if (!t.IsClass || t.IsAbstract)
         {
             return false;
         }
         return forType.IsAssignableFrom(t);
     }));
 }
Ejemplo n.º 3
0
        private void ShowContextSelector()
        {
            object cp = _target.As <IContextProvider>();

            if (cp == null)
            {
                if (_contextProviderList == null)
                {
                    _contextProviderList = new List <KeyValuePair <string, Type> >();

                    _contextProviderList = (from t in ApexReflection.GetRelevantTypes()
                                            where typeof(IContextProvider).IsAssignableFrom(t) && !t.IsAbstract
                                            orderby t.Name
                                            select new KeyValuePair <string, Type>(t.Name, t)).ToList();

                    _contextProviderNames = _contextProviderList.Select(p => p.Key).ToArray();
                }

                EditorGUILayout.Separator();
                var style = new GUIStyle(GUI.skin.label);
                style.normal.textColor = Color.yellow;

                if (_contextProviderList.Count == 0)
                {
                    EditorGUILayout.LabelField("A Context Provider is required!", style);
                    EditorGUILayout.BeginHorizontal();
                    _nameSpace = EditorGUILayout.TextField("Namespace", _nameSpace);
                    if (GUILayout.Button("Create a Context Provider"))
                    {
                        ContextGenerator.WriteContextFiles(_nameSpace);
                        EditorUtility.DisplayDialog("Context Created", "A basic Context and Context provider has been created in the root of the Assets folder.\n\nPlease review the documentation for additional details on Contexts.", "Ok");
                    }

                    EditorGUILayout.EndHorizontal();
                }
                else if (_contextProviderList.Count == 1)
                {
                    _target.gameObject.AddComponent(_contextProviderList[0].Value);
                }
                else
                {
                    EditorGUILayout.LabelField("Select a Context Provider", style);
                    var selectedIdx = EditorGUILayout.Popup(-1, _contextProviderNames);
                    if (selectedIdx >= 0)
                    {
                        _target.gameObject.AddComponent(_contextProviderList[selectedIdx].Value);
                    }
                }
            }
        }
        private void Investigate(AIStorage[] ais)
        {
            var availableTypes = from t in ApexReflection.GetRelevantTypes()
                                 where !t.IsAbstract && (!_excludeApexTypes || t.Namespace == null || !t.Namespace.StartsWith("Apex.AI")) && (t.IsDefined <ApexSerializedTypeAttribute>(true) || SerializationMaster.GetSerializedProperties(t).Any() || SerializationMaster.GetSerializedFields(t).Any())
                                 orderby t.FullName
                                 select new TypeNameTokens(t.AssemblyQualifiedName);

            var aiLookup = new Dictionary <string, ReferencingAI>(StringComparer.Ordinal);

            foreach (var ai in ais)
            {
                aiLookup.Add(ai.aiId, new ReferencingAI(ai.name));
            }

            _referencedTypes.Clear();
            _unreferencedTypes.Clear();
            foreach (var t in availableTypes)
            {
                var refType = new ReferencedType(t.fullTypeName);

                foreach (var ai in ais)
                {
                    if (ai.configuration.Contains(t.completeTypeName))
                    {
                        var refAI = aiLookup[ai.aiId];
                        refAI.referencedTypes.Add(refType);
                        refType.referencingAIs.Add(refAI);
                    }
                }

                if (refType.referencingAIs.Count > 0)
                {
                    _referencedTypes.Add(refType);
                }
                else
                {
                    _unreferencedTypes.Add(t);
                }
            }

            _referencingAIs = (from ai in aiLookup.Values
                               where ai.referencedTypes.Count > 0
                               orderby ai.name
                               select ai).ToArray();

            _step = Step.Result;
            _owner.Repaint();
        }
Ejemplo n.º 5
0
        private static void PopulateKnownEditorFields()
        {
            var relevantTypes = ApexReflection.GetRelevantTypes();

            var editorFields = from t in relevantTypes
                               let tha = t.GetAttribute <TypesHandledAttribute>(true)
                                         where tha != null && typeof(IEditorField).IsAssignableFrom(t) && !t.IsAbstract && t.GetConstructor(new Type[] { typeof(MemberData), typeof(object) }) != null
                                         select new
            {
                fieldType    = t,
                typesHandled = tha.typesHandled
            };

            foreach (var field in editorFields)
            {
                foreach (var t in field.typesHandled)
                {
                    _typedEditorFields[t] = field.fieldType;
                }
            }
        }
Ejemplo n.º 6
0
        internal void Begin(AIStorage[] ais)
        {
            _ais             = ais;
            _repairedAIIds   = null;
            _identifiedTypes = new Dictionary <string, Type>();
            _stagedAis       = new StageElement[ais.Length];
            for (int i = 0; i < ais.Length; i++)
            {
                _stagedAis[i] = SerializationMaster.Deserialize(ais[i].configuration);
            }

            if (_customTasks == null)
            {
                _customTasks = (from t in ApexReflection.GetRelevantTypes()
                                where !t.IsAbstract && typeof(IRepairTask).IsAssignableFrom(t) && t.GetConstructor(Type.EmptyTypes) != null
                                select Activator.CreateInstance(t) as IRepairTask).OrderByDescending(t => t.versionThreshold).ToArray();
            }

            if (_customTasks.Length > 0)
            {
                for (int i = 0; i < ais.Length; i++)
                {
                    var aiVersion = new AIVersion(ais[i].version).ToVersion();
                    for (int j = 0; j < _customTasks.Length; j++)
                    {
                        var task = _customTasks[j];
                        if (task.versionThreshold >= aiVersion)
                        {
                            var editorCfg = task.repairsEditorConfiguration ? GetEditorDoc(i) : null;
                            if (task.Repair(_stagedAis[i], editorCfg))
                            {
                                this.customRepairsMade = true;
                            }
                        }
                    }
                }
            }
        }
Ejemplo n.º 7
0
        private static void PopulateKnownSerializers()
        {
            var relevantTypes = ApexReflection.GetRelevantTypes();

            var serializerTypes = from t in relevantTypes
                                  where (typeof(IValueConverter).IsAssignableFrom(t) || typeof(IStager).IsAssignableFrom(t) || typeof(ISerializer).IsAssignableFrom(t)) &&
                                  !t.IsAbstract && t.GetConstructor(Type.EmptyTypes) != null
                                  select t;

            foreach (var st in serializerTypes)
            {
                object instance;
                var    singletonField = st.GetField("instance", BindingFlags.Public | BindingFlags.Static);
                if (singletonField != null)
                {
                    instance = singletonField.GetValue(null);
                }
                else
                {
                    instance = Activator.CreateInstance(st);
                }

                var vc = instance as IValueConverter;
                if (vc != null)
                {
                    if (vc.handledTypes == null)
                    {
                        continue;
                    }

                    foreach (var t in vc.handledTypes)
                    {
                        if (!_typeConverters.ContainsKey(t) || st.IsDefined <SerializationOverrideAttribute>(false))
                        {
                            _typeConverters[t] = vc;
                        }
                    }
                }
                else if (instance is ISerializer && (_serializer == null || st.IsDefined <SerializationOverrideAttribute>(false)))
                {
                    _serializer = (ISerializer)instance;
                }
                else
                {
                    var s = instance as IStager;

                    if (s.handledTypes == null)
                    {
                        continue;
                    }

                    foreach (var t in s.handledTypes)
                    {
                        if (!_typeStagers.ContainsKey(t) || st.IsDefined <SerializationOverrideAttribute>(false))
                        {
                            _typeStagers[t] = s;
                        }
                    }
                }
            }
        }
 private static IEnumerable <Type> GetDerived(Type forType)
 {
     return(from t in ApexReflection.GetRelevantTypes()
            where t.IsClass && !t.IsAbstract && forType.IsAssignableFrom(t)
            select t);
 }
 private static IEnumerable <Type> GetConstructableTypes()
 {
     return(from t in ApexReflection.GetRelevantTypes()
            where !t.IsAbstract && !t.IsDefined <HiddenAttribute>(false) && t.GetConstructor(Type.EmptyTypes) != null
            select t);
 }