예제 #1
0
        // Public Methods 

        public void Add(Type t, NodeTranslatorBound b)
        {
            List <NodeTranslatorBound> x;

            if (!_items.TryGetValue(t, out x))
            {
                _items[t] = x = new List <NodeTranslatorBound>();
            }
            x.Add(b);
        }
예제 #2
0
        /// <summary>
        ///     Porządkuje dane i przygotowuje cache do tłumaczeń
        /// </summary>
        public void Prepare()
        {
            var allTypes = (from assembly in TranslationAssemblies
                            from type in assembly.GetTypes()
                            select type).ToArray();

            foreach (var type in allTypes)
            {
                if (type.IsInterface)
                {
                    continue;
                }
                var interfaces = type.GetInterfaces();
                foreach (var interfaceType in interfaces)
                {
                    var generic = interfaceType.IsGenericType
                        ? interfaceType.GetGenericTypeDefinition()
                        : interfaceType;

                    #region IPhpNodeTranslator

                    if (generic == typeof(IPhpNodeTranslator <>))
                    {
                        var genericType          = interfaceType.GetGenericArguments()[0];
                        var obj                  = Activator.CreateInstance(type);
                        var map                  = type.GetInterfaceMap(interfaceType);
                        var methods              = map.InterfaceMethods;
                        var methodTranslateToPhp = methods.Single(ii => ii.Name == "TranslateToPhp");
                        var gpmethod             = methods.Single(ii => ii.Name == "GetPriority");
                        var bound                = new NodeTranslatorBound(methodTranslateToPhp, obj, gpmethod);
                        NodeTranslators.Add(genericType, bound);
                    }

                    #endregion

                    #region IModuleProcessor

                    // ReSharper disable once InvertIf
                    if (generic == typeof(IModuleProcessor))
                    {
                        var obj = Activator.CreateInstance(type) as IModuleProcessor;
                        ModuleProcessors.Add(obj);
                    }

                    #endregion
                }
            }
        }
예제 #3
0
 private static int?GetNodeTranslatorBoundPriority(NodeTranslatorBound i)
 {
     // use this named method insead of lambda for performace reasons
     return(i.Priority);
 }
예제 #4
0
        /// <summary>
        /// Porządkuje dane i przygotowuje cache do tłumaczeń
        /// </summary>
        public void Prepare()
        {
            var allTypes = (from assembly in _translationAssemblies
                            from type in assembly.GetTypes()
                            select type).ToArray();
            foreach (var type in allTypes)
            {
                if (type.IsInterface)
                    continue;
                var interfaces = type.GetInterfaces();
                foreach (var interfaceType in interfaces)
                {
                    var generic = interfaceType.IsGenericType
                        ? interfaceType.GetGenericTypeDefinition()
                        : interfaceType;
                    #region IPhpNodeTranslator
                    if (generic == typeof(IPhpNodeTranslator<>))
                    {
                        var genericType = interfaceType.GetGenericArguments()[0];
                        var obj = Activator.CreateInstance(type);
                        var map = type.GetInterfaceMap(interfaceType);
                        var methods = map.InterfaceMethods;
                        var methodTranslateToPhp = methods.Single(ii => ii.Name == "TranslateToPhp");
                        var gpmethod = methods.Single(ii => ii.Name == "GetPriority");
                        var bound = new NodeTranslatorBound(methodTranslateToPhp, obj, gpmethod);
                        _nodeTranslators.Add(genericType, bound);
                    }
                    #endregion
                    #region IModuleProcessor
                    // ReSharper disable once InvertIf
                    if (generic == typeof(IModuleProcessor))
                    {
                        var obj = Activator.CreateInstance(type) as IModuleProcessor;
                        _moduleProcessors.Add(obj);
                    }
                    #endregion


                }
            }
        }