예제 #1
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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();
            }
        }
예제 #2
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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();
        }
예제 #3
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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++;
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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++;
            }
        }
예제 #6
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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);
        }
예제 #7
0
        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);
        }
예제 #8
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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();
        }
예제 #9
0
        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);
            }
        }
예제 #10
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        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();
        }
예제 #11
0
 private Boolean methodMatchInterface( ObservedMethod x, System.Type interfaceOne )
 {
     return rft.IsMethodInInterface( x.Method, x.ObservedType.Type, interfaceOne );
 }
예제 #12
0
 private Boolean methodMatchInterface(ObservedMethod x, System.Type interfaceOne)
 {
     return(rft.IsMethodInInterface(x.Method, x.ObservedType.Type, interfaceOne));
 }
예제 #13
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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 );
        }
예제 #14
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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();
            }
        }
예제 #15
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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();
        }
예제 #16
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
 //----------------------------------------------------------------------------------------
 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();
 }
예제 #17
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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++;
            }
        }
예제 #18
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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();
        }
예제 #19
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
 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++;
     }
 }
예제 #20
0
파일: AopCoder.cs 프로젝트: bae2014/wojilu
        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();
        }
예제 #21
0
파일: AopCoder.cs 프로젝트: zuhuizou/wojilu
        //----------------------------------------------------------------------------------------

        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();
        }