private static void append_method_invoke(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { sb.Append("\t\t\tObject returnValue = null;"); sb.AppendLine(); List <MethodObserver> osList = getMethodObserver(x.ObservedType.Type, x.Method.Name); String strReturn = getReturnString(x.Method); if (strReturn == "void") { strReturn = ""; } else { strReturn = "returnValue = "; } int invokeObserverIndex = getInovkeObserverIndex(osList); if (invokeObserverIndex > -1) { append_invoke_object(sb, x, dialect); sb.AppendFormat("\t\t\t{0}observer{1}.Invoke( invocation );", strReturn, invokeObserverIndex); sb.AppendLine(); } else { sb.AppendFormat("\t\t\t{0}{1}.{2}({3});", strReturn, dialect.GetInvokeTargetBase(), x.Method.Name, getArgBodyFromArray(x.Method)); sb.AppendLine(); } }
private static void append_method_end(StringBuilder sb, ObservedMethod x) { String strReturn = getReturnString(x.Method); if (strReturn != "void") { if (x.Method.ReturnType.IsValueType) { sb.AppendFormat("\t\t\tif( returnValue==null ||(returnValue is ValueType ==false )) return default({0});", getReturnType(x.Method.ReturnType)); sb.AppendLine(); sb.AppendFormat("\t\t\treturn ({0})returnValue;", strReturn); sb.AppendLine(); } else { sb.Append("\t\t\tif( returnValue==null ) return null;"); sb.AppendLine(); sb.AppendFormat("\t\t\treturn returnValue as {0};", strReturn); sb.AppendLine(); } } sb.Append("\t\t}"); sb.AppendLine(); sb.AppendLine(); }
private static void append_method_before(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { if (x.Method.GetParameters().Length > 0) { sb.AppendFormat("\t\t\tMethodInfo m = {0}.GetType().GetMethod( \"{1}\", {2} );", dialect.GetInvokeTargetThis(), x.Method.Name, "new Type[] {" + getArgType(x.Method) + "}"); } else { sb.AppendFormat("\t\t\tMethodInfo m = {0}.GetType().GetMethod( \"{1}\", {2} );", dialect.GetInvokeTargetThis(), x.Method.Name, "new Type[]{}"); } sb.AppendLine(); sb.AppendFormat("\t\t\tObject[] args = {0};", getArgArray(x.Method)); sb.AppendLine(); List <MethodObserver> osList = getMethodObserver(x.ObservedType.Type, x.Method.Name); int i = 1; foreach (MethodObserver os in osList) { sb.AppendFormat("\t\t\t{0} observer{1} = {2};", os.GetType().FullName, i, getObserverCreator(os)); sb.AppendLine(); sb.AppendFormat("\t\t\tobserver{0}.Before( m, args, {1} );", i, dialect.GetInvokeTargetThis()); sb.AppendLine(); i++; } }
private static ObservedMethod addNewObserverMethod(MethodObserver objObserver, MethodInfo method) { ObservedMethod om = new ObservedMethod(); om.Method = method; om.Observer = new List <MethodObserver>(); om.Observer.Add(objObserver); return(om); }
private static void append_method_after(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { List <MethodObserver> osList = getMethodObserver(x.ObservedType.Type, x.Method.Name); int i = 1; foreach (MethodObserver os in osList) { sb.AppendFormat("\t\t\tobserver{0}.After( returnValue, m, args, {1} );", i, dialect.GetInvokeTargetThis()); sb.AppendLine(); i++; } }
private static void append_method_single(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { String strArgs = getArgString(x.Method); String strReturn = getReturnString(x.Method); append_method_begin(sb, x, strArgs, strReturn, dialect); append_method_before(sb, x, dialect); append_method_invoke(sb, x, dialect); append_method_after(sb, x, dialect); append_method_end(sb, x); }
private static void addObserverToMethodSingle(ObservedMethod m, MethodObserver obj) { if (m.Observer == null) { m.Observer = new List <MethodObserver>(); } if (m.Observer.Contains(obj)) { return; } m.Observer.Add(obj); }
private static void append_invoke_object(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { sb.Append("\t\t\tIMethodInvocation invocation = new MethodInvocation();"); sb.AppendLine(); sb.Append("\t\t\tinvocation.Method = m;"); sb.AppendLine(); sb.AppendFormat("\t\t\tinvocation.Args = args;"); sb.AppendLine(); sb.AppendFormat("\t\t\tinvocation.Target = {0};", dialect.GetInvokeTargetThis()); sb.AppendLine(); sb.AppendFormat("\t\t\tinvocation.IsSubClass = {0};", dialect.IsSubClassStr()); sb.AppendLine(); }
private static void populateMethodList(ObservedType oType, MethodObserver obj, MethodInfo method) { if (oType.MethodList == null) { oType.MethodList = new List <ObservedMethod>(); } if (hasAddMethod(oType, method)) { oType.MethodList = addObserverToMethodList(oType.MethodList, method, obj); } else { ObservedMethod om = addNewObserverMethod(obj, method); om.ObservedType = oType; oType.MethodList.Add(om); } }
private static void append_method_base_single(StringBuilder sb, ObservedMethod x, AopCoderDialect dialect) { String strReturn = getReturnString(x.Method); String strArg = getArgString(x.Method); String strArgBody = getArgBody(x.Method); sb.AppendFormat("\t\tpublic {0} {1}{2}({3}) ", strReturn, dialect.GetMethodBasePrefix(), x.Method.Name, strArg); sb.Append("{"); sb.AppendLine(); String strReturnLable = strReturn == "void" ? "" : "return "; sb.AppendFormat("\t\t\t{0}{1}.{2}( {3} );", strReturnLable, dialect.GetInvokeTargetBase(), x.Method.Name, strArgBody); sb.AppendLine(); sb.Append("\t\t}"); sb.AppendLine(); sb.AppendLine(); }
private Boolean methodMatchInterface( ObservedMethod x, System.Type interfaceOne ) { return rft.IsMethodInInterface( x.Method, x.ObservedType.Type, interfaceOne ); }
private Boolean methodMatchInterface(ObservedMethod x, System.Type interfaceOne) { return(rft.IsMethodInInterface(x.Method, x.ObservedType.Type, interfaceOne)); }
private static void append_method_single( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { String strArgs = getArgString( x.Method ); String strReturn = getReturnString( x.Method ); append_method_begin( sb, x, strArgs, strReturn, dialect ); append_method_before( sb, x, dialect ); append_method_invoke( sb, x, dialect ); append_method_after( sb, x, dialect ); append_method_end( sb, x ); }
private static void append_method_invoke( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { sb.Append( "\t\t\tObject returnValue = null;" ); sb.AppendLine(); List<MethodObserver> osList = getMethodObserver( x.ObservedType.Type, x.Method.Name ); String strReturn = getReturnString( x.Method ); if (strReturn == "void") { strReturn = ""; } else { strReturn = "returnValue = "; } int invokeObserverIndex = getInovkeObserverIndex( osList ); if (invokeObserverIndex > -1) { append_invoke_object( sb, x, dialect ); sb.AppendFormat( "\t\t\t{0}observer{1}.Invoke( invocation );", strReturn, invokeObserverIndex ); sb.AppendLine(); } else { sb.AppendFormat( "\t\t\t{0}{1}.{2}({3});", strReturn, dialect.GetInvokeTargetBase(), x.Method.Name, getArgBodyFromArray( x.Method ) ); sb.AppendLine(); } }
private static void append_method_end( StringBuilder sb, ObservedMethod x ) { String strReturn = getReturnString( x.Method ); if (strReturn != "void") { if (x.Method.ReturnType.IsValueType) { sb.AppendFormat( "\t\t\tif( returnValue==null ||(returnValue is ValueType ==false )) return default({0});", getReturnType( x.Method.ReturnType ) ); sb.AppendLine(); sb.AppendFormat( "\t\t\treturn ({0})returnValue;", strReturn ); sb.AppendLine(); } else { sb.Append( "\t\t\tif( returnValue==null ) return null;" ); sb.AppendLine(); sb.AppendFormat( "\t\t\treturn returnValue as {0};", strReturn ); sb.AppendLine(); } } sb.Append( "\t\t}" ); sb.AppendLine(); sb.AppendLine(); }
//---------------------------------------------------------------------------------------- private static void append_method_begin( StringBuilder sb, ObservedMethod x, String strArgs, String strReturn, AopCoderDialect dialect ) { sb.AppendFormat( "\t\tpublic {0} {1} {2}( {3} ) ", dialect.GetMethodOverride(), strReturn, x.Method.Name, strArgs ); sb.Append( "{" ); sb.AppendLine(); }
private static void append_method_before( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { if (x.Method.GetParameters().Length > 0) { sb.AppendFormat( "\t\t\tMethodInfo m = {0}.GetType().GetMethod( \"{1}\", {2} );", dialect.GetInvokeTargetThis(), x.Method.Name, "new Type[] {" + getArgType( x.Method ) + "}" ); } else { sb.AppendFormat( "\t\t\tMethodInfo m = {0}.GetType().GetMethod( \"{1}\", {2} );", dialect.GetInvokeTargetThis(), x.Method.Name, "new Type[]{}" ); } sb.AppendLine(); sb.AppendFormat( "\t\t\tObject[] args = {0};", getArgArray( x.Method ) ); sb.AppendLine(); List<MethodObserver> osList = getMethodObserver( x.ObservedType.Type, x.Method.Name ); int i = 1; foreach (MethodObserver os in osList) { sb.AppendFormat( "\t\t\t{0} observer{1} = {2};", os.GetType().FullName, i, getObserverCreator( os ) ); sb.AppendLine(); sb.AppendFormat( "\t\t\tobserver{0}.Before( m, args, {1} );", i, dialect.GetInvokeTargetThis() ); sb.AppendLine(); i++; } }
private static void append_method_base_single( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { String strReturn = getReturnString( x.Method ); String strArg = getArgString( x.Method ); String strArgBody = getArgBody( x.Method ); sb.AppendFormat( "\t\tpublic {0} {1}{2}({3}) ", strReturn, dialect.GetMethodBasePrefix(), x.Method.Name, strArg ); sb.Append( "{" ); sb.AppendLine(); String strReturnLable = strReturn == "void" ? "" : "return "; sb.AppendFormat( "\t\t\t{0}{1}.{2}( {3} );", strReturnLable, dialect.GetInvokeTargetBase(), x.Method.Name, strArgBody ); sb.AppendLine(); sb.Append( "\t\t}" ); sb.AppendLine(); sb.AppendLine(); }
private static void append_method_after( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { List<MethodObserver> osList = getMethodObserver( x.ObservedType.Type, x.Method.Name ); int i = 1; foreach (MethodObserver os in osList) { sb.AppendFormat( "\t\t\tobserver{0}.After( returnValue, m, args, {1} );", i, dialect.GetInvokeTargetThis() ); sb.AppendLine(); i++; } }
private static void append_invoke_object( StringBuilder sb, ObservedMethod x, AopCoderDialect dialect ) { sb.Append( "\t\t\tIMethodInvocation invocation = new MethodInvocation();" ); sb.AppendLine(); sb.Append( "\t\t\tinvocation.Method = m;" ); sb.AppendLine(); sb.AppendFormat( "\t\t\tinvocation.Args = args;" ); sb.AppendLine(); sb.AppendFormat( "\t\t\tinvocation.Target = {0};", dialect.GetInvokeTargetThis() ); sb.AppendLine(); sb.AppendFormat( "\t\t\tinvocation.IsSubClass = {0};", dialect.IsSubClassStr() ); sb.AppendLine(); }
//---------------------------------------------------------------------------------------- private static void append_method_begin(StringBuilder sb, ObservedMethod x, String strArgs, String strReturn, AopCoderDialect dialect) { sb.AppendFormat("\t\tpublic {0} {1} {2}( {3} ) ", dialect.GetMethodOverride(), strReturn, x.Method.Name, strArgs); sb.Append("{"); sb.AppendLine(); }