//----------------------------------------------------------------------------------------------------------------------------------------------------- public void ApplyChecks(MethodDecorationBuilder decoration) { foreach (var check in base.GetChecks <ApiMethodCheckWriter>()) { check.WriteMethodCheck(decoration); } }
//------------------------------------------------------------------------------------------------------------------------------------------------- private void WriteReturnValueCheck(MethodDecorationBuilder decoration) { decoration.OnReturnValue((w, retVal) => { using (TypeTemplate.CreateScope <TypeTemplate.TArgument>(m_ParameterInfo.ParameterType)) { WriteArgumentOrCollectionItemCheck(w, retVal.CastTo <TypeTemplate.TArgument>(), isOutput: true); } }); }
//------------------------------------------------------------------------------------------------------------------------------------------------- private void WriteArgumentInputCheck(MethodDecorationBuilder decoration) { decoration.OnBefore(w => { using (TypeTemplate.CreateScope <TypeTemplate.TArgument>(m_ParameterInfo.ParameterType)) { var argument = w.Argument <TypeTemplate.TArgument>(m_ParameterInfo.Position + 1); WriteArgumentOrCollectionItemCheck(w, argument, isOutput: false); } }); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- private void InternalOnMethod <TBase>(IHappilClassBody <TBase> classDefinition, MethodInfo info) { var decoration = new MethodDecorationBuilder(); OnMethod(info, decoration); if (!decoration.IsEmpty) { classDefinition.Method(info).Decorate( attributes: decoration.GetAttributes, body: decoration.ApplyBody); } }
//------------------------------------------------------------------------------------------------------------------------------------------------- public override void WriteMethodCheck(MethodDecorationBuilder decoration) { if (IsReturnParameter) { WriteReturnValueCheck(decoration); } else { if (!m_ParameterInfo.IsOut) { WriteArgumentInputCheck(decoration); } if (m_ParameterInfo.IsOut || m_ParameterInfo.ParameterType.IsByRef) { WriteArgumentOutputCheck(decoration); } } }
public override void OnMethod(MethodInfo info, MethodDecorationBuilder decoration) { decoration .OnBefore(m => Static.Prop(() => ActionLog).Add(m.Const("ON-BEFORE:" + info.Name)) ) .OnReturnValue((m, retVal) => Static.Prop(() => ActionLog).Add(m.Const("ON-RETURN-VALUE:" + info.Name + "=") + retVal.Func <string>(x => x.ToString)) ) .OnReturnVoid(m => Static.Prop(() => ActionLog).Add(m.Const("ON-RETURN-VOID:" + info.Name)) ) .OnSuccess(m => Static.Prop(() => ActionLog).Add(m.Const("ON-SUCCESS:" + info.Name)) ) .OnException <ExceptionRepository.TestExceptionOne>((m, e) => { Static.Prop(() => ActionLog).Add(m.Const("ON-EXCEPTION-ONE:" + m.MethodInfo.Name + "=") + e.Prop(x => x.Message)); if (!m.MethodInfo.IsVoid()) { m.Return(m.Default <TypeTemplate.TReturn>()); } }) .OnException <Exception>((m, e) => { Static.Prop(() => ActionLog).Add( m.Const("ON-EXCEPTION-UNKNOWN:" + m.MethodInfo.Name + "=") + e.Func <Type>(x => x.GetType).Prop <string>(x => x.Name) + m.Const(":") + e.Prop(x => x.Message)); m.Throw(); }) .OnFailure(m => Static.Prop(() => ActionLog).Add(m.Const("ON-FAILURE:" + info.Name)) ) .OnAfter(m => Static.Prop(() => ActionLog).Add(m.Const("ON-AFTER:" + info.Name)) ); }
public abstract void WriteMethodCheck(MethodDecorationBuilder decoration);
//----------------------------------------------------------------------------------------------------------------------------------------------------- public virtual void OnMethod(MethodInfo info, MethodDecorationBuilder decoration) { }