Ejemplo n.º 1
0
        // Example: public virtual void SetDescription(string value)
        private string BuildEvent(MethodInfo method, string ownerName)
        {
            if (!method.IsPublic)
            {
                throw new InvalidOperationException($"Event method \"{method.Name}\" should be public.");
            }
            if (!method.IsVirtual)
            {
                throw new InvalidOperationException($"Event method \"{method.Name}\" should be virtual.");
            }
            if (method.IsAbstract)
            {
                return(BuildAbstractEvent(method, ownerName));
            }
            if (method.ReturnType != typeof(void))
            {
                throw new InvalidOperationException($"Event method \"{method.Name}\" should return void.");
            }
            var paramsBuilder = new ParamsBuilder(method.GetParameters());

            GetEntityLoaders(method.DeclaringType).AppendLine(BuildEntityLoader(method.Name, paramsBuilder));
            return($@"
						public override void {method.Name}({paramsBuilder.CreateDeclarations()})
						{{
							if (!_loading)
							{{
								var @params = new Dictionary<string,object> {{{paramsBuilder.CreateDictionaryParams()}}};
								AddEvent(this, ""{method.Name}"", @params);
							}}
							base.{method.Name}({paramsBuilder.GetNameList()});
						}}"                        );
        }
Ejemplo n.º 2
0
        private string BuildCostructor(ConstructorInfo constructor, string ownerName)
        {
            var sourceName = _entityType.Name;
            var @params    = new ParamsBuilder(constructor.GetParameters());

            return($@"
								public {sourceName}Impl({_rootBuilder.TransactionType.Name} {ownerName}, {@params.CreateDeclarations()}) : base({@params.GetNameList()})
								{{
									_{ownerName} = {ownerName};
								}}"                                );
        }
Ejemplo n.º 3
0
        private static string BuildLoader(Type resultType, string eventName, ParamsBuilder paramsBuilder)
        {
            var @params = paramsBuilder.CreateParamsWith("@event.Params");

            if (!string.IsNullOrEmpty(@params))
            {
                @params = $", {@params}";
            }
            return($@"
							if (typeof(TEntity) == typeof({resultType.ToCsDeclaration()}) && @event.EventName == ""{eventName}"") 
								return (TEntity)(object)(new {resultType.Name}Impl(this{@params}).LoadEvents(events));"                                );
        }
Ejemplo n.º 4
0
        // Example: public abstract TestEntity CreateTestEntity(string name);
        private string BuildAbstractEvent(MethodInfo method, string ownerName)
        {
            if (!method.ReturnType.GetTypeInfo().IsClass)
            {
                throw new InvalidOperationException($"Event method \"{method.Name}\" should return class.");
            }
            var paramsBuilder = new ParamsBuilder(method.GetParameters());
            var sourceName    = method.ReturnType.Name;

            _entitiesCode.AppendLine(BuildEntityClass(method.ReturnType));
            _loaders.AppendLine(BuildLoader(method.ReturnType, method.Name, paramsBuilder));
            return($@"
						public override {method.ReturnType.ToCsDeclaration()} {method.Name}({paramsBuilder.CreateDeclarations()})
						{{
							if (_loading) throw new System.InvalidOperationException(""Invalid call in loading state."");
							var result = new {sourceName}Impl(_{ownerName}, {paramsBuilder.GetNameList()});
							var @params = new Dictionary<string,object> {{{paramsBuilder.CreateDictionaryParams()}}};
							AddEvent(result, ""{method.Name}"", @params);
							return result;
						}}"                        );
        }
Ejemplo n.º 5
0
        private string BuildEntityLoader(string eventName, ParamsBuilder paramsBuilder)
        {
            return($@"
							if (@event.EventName == ""{eventName}"" && AbstractTransaction.HaveEqualParamNames(@event.Params{paramsBuilder.GetQuotedList()})) 
								{eventName}({paramsBuilder.CreateParamsWith("@event.Params")}); else"                                );
        }