Beispiel #1
0
        /// <summary>
        /// Create inheritance chain for given definition.
        /// </summary>
        /// <param name="definition">Definition which chain is registered.</param>
        private void createChain(RuntimeTypeDefinition definition)
        {
            var subChains = definition.GetSubChains();
            var chain     = new InheritanceChain(definition.TypeInfo, subChains);

            registerChain(chain);
        }
Beispiel #2
0
        /// <summary>
        /// Creates the static property.
        /// </summary>
        /// <param name="definition">The definition.</param>
        /// <param name="method">The method.</param>
        /// <param name="name">The name.</param>
        /// <returns>RuntimeMethodGenerator.</returns>
        private RuntimeMethodGenerator _createStaticProperty(RuntimeTypeDefinition definition, MethodInfo method, string name)
        {
            var prefix    = "_static_";
            var generator = buildMethod(definition, method, method.Name.Substring(prefix.Length), true);

            return(generator);
        }
Beispiel #3
0
        /// <summary>
        /// Register given definition into runtime assembly.
        /// </summary>
        /// <param name="definition">Registered definition.</param>
        private void buildDefinition(RuntimeTypeDefinition definition)
        {
            //every definition needs initialization
            definition.Initialize(this, this.TypeServices);

            //add static edits defined by built definition
            _globalEdits.AddRange(definition.StaticEdits);

            //every definition needs to register its chain
            createChain(definition);

            //get all methods defined by definition
            var methodGenerators = definition.GetMethods();

            foreach (var generator in methodGenerators)
            {
                var item = new MethodItem(generator, generator.MethodInfo);
                _runtimeMethods.AddItem(item, generator.Implemented);
            }

            if (definition.ComponentInfo != null)
            {
                ComponentDiscovered(definition.ComponentInfo);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Build method generator from given method info.
        /// </summary>
        /// <param name="definition">Type where method is defined.</param>
        /// <param name="method">Method info defining method.</param>
        /// <param name="methodName">Name of defined method.</param>
        /// <param name="forceStatic">if set to <c>true</c> [force static].</param>
        /// <returns>Builder where method is built.</returns>
        private RuntimeMethodGenerator buildMethod(RuntimeTypeDefinition definition, MethodInfo method, string methodName, bool forceStatic = false)
        {
            var builder = new MethodBuilder(definition, methodName, forceStatic);

            builder.ThisObjectExpression = builder.DeclaringDefinitionConstant;
            builder.AdapterFor(method);
            return(builder.Build());
        }
Beispiel #5
0
        /// <summary>
        /// Creates the method.
        /// </summary>
        /// <param name="definition">The definition.</param>
        /// <param name="method">The method.</param>
        /// <param name="name">The name.</param>
        /// <returns>RuntimeMethodGenerator.</returns>
        private RuntimeMethodGenerator _createMethod(RuntimeTypeDefinition definition, MethodInfo method, string name)
        {
            if (name == "ctor")
            {
                name = Naming.CtorName;
            }
            var generator = buildMethod(definition, method, name);

            return(generator);
        }
Beispiel #6
0
        /// <summary>
        /// Get method generators defined in given runtime type definition.
        /// </summary>
        /// <param name="definition">Definition which methods are resolved.</param>
        /// <returns>Method generators for defined methods.</returns>
        internal IEnumerable <RuntimeMethodGenerator> GetMethodGenerators(RuntimeTypeDefinition definition)
        {
            var result = new List <RuntimeMethodGenerator>();

            foreach (var method in definition.GetType().GetMethods())
            {
                var name = method.Name;

                //create method definition according to it's prefix
                foreach (var provider in _methodGeneratorProviders)
                {
                    if (name.StartsWith(provider.Key))
                    {
                        var notPrefixedName = name.Substring(provider.Key.Length);
                        var generator       = provider.Value(definition, method, notPrefixedName);
                        result.Add(generator);
                        break;
                    }
                }
            }

            return(result);
        }
Beispiel #7
0
        /// <summary>
        /// Creates the property.
        /// </summary>
        /// <param name="definition">The definition.</param>
        /// <param name="method">The method.</param>
        /// <param name="name">The name.</param>
        /// <returns>RuntimeMethodGenerator.</returns>
        private RuntimeMethodGenerator _createProperty(RuntimeTypeDefinition definition, MethodInfo method, string name)
        {
            var generator = buildMethod(definition, method, method.Name.Substring(1));

            return(generator);
        }