示例#1
0
        private static void StaticMethodRequest(Method methodRequest)
        {
            var staticMethodDictionary = GetStaticMethodDictionary(methodRequest);

            var expressionInterpreterHandler = new ExpressionInterpreterHandler(methodRequest);

            var compiledMethod = expressionInterpreterHandler.GetLamdaExpression().Compile();

            if (staticMethodDictionary.ContainsKey(methodRequest.ParentType))
            {
                var membersDictionary = staticMethodDictionary[methodRequest.ParentType];
                if (membersDictionary.ContainsKey(methodRequest.Name))
                {
                    membersDictionary[methodRequest.Name] = compiledMethod;
                }
                else
                {
                    membersDictionary.Add(methodRequest.Name, compiledMethod);
                }
            }
            else
            {
                var membersDictionary = new Dictionary <string, Delegate>();
                membersDictionary.Add(methodRequest.Name, compiledMethod);
                staticMethodDictionary.Add(methodRequest.ParentType, membersDictionary);
            }
        }
示例#2
0
        public static CSharpLamdaExpression GetLamdaExpression(string codeFile, string methodName)
        {
            var syntaxTree = Helper.GetSyntaxTree(codeFile);

            var mds = Helper.GetMethodDeclarationSyntax((CompilationUnitSyntax)syntaxTree.GetRoot(), methodName);

            var semanticModel = Helper.GetSemanticModel(syntaxTree);
            var statementInterpreterHandler = new StatementInterpreterHandler(mds, semanticModel);

            var method = statementInterpreterHandler.GetMethod();

            var interpreterHandler = new ExpressionInterpreterHandler(method);

            var lamdaExpression = interpreterHandler.GetLamdaExpression();

            return(lamdaExpression);
        }
示例#3
0
        private static void InstanceMethodRequest(Method methodRequest)
        {
            var instanceMethodDictionary = GetInstanceMethodDictionary(methodRequest);

            var expressionInterpreterHandler = new ExpressionInterpreterHandler(methodRequest);

            var instanceMethod = expressionInterpreterHandler.GetLamdaExpression();

            if (instanceMethodDictionary.ContainsKey(methodRequest.ParentType))
            {
                var membersDictionary = instanceMethodDictionary[methodRequest.ParentType];
                if (membersDictionary.ContainsKey(methodRequest.Name))
                {
                    membersDictionary[methodRequest.Name] = instanceMethod;
                }
                else
                {
                    membersDictionary.Add(methodRequest.Name, instanceMethod);
                }
            }
            else
            {
                var membersDictionary = new Dictionary <string, CSharpLamdaExpression>();
                membersDictionary.Add(methodRequest.Name, instanceMethod);
                instanceMethodDictionary.Add(methodRequest.ParentType, membersDictionary);
            }

            foreach (var list in instanceClasses.Where(x => x.GetType() == methodRequest.ParentType))
            {
                if (list.InstanceMethods.ContainsKey(methodRequest.Name))
                {
                    list.InstanceMethods[methodRequest.Name] = instanceMethod.Compile();
                }
                else
                {
                    list.InstanceMethods.Add(methodRequest.Name, instanceMethod.Compile());
                }
            }
        }
示例#4
0
 public MethodContainer(Method method)
 {
     Method      = method;
     interpreter = new ExpressionInterpreterHandler(method);
 }