public static ProjectMethod FindMethodSymbolAndProjectInSolution(Solution solution, MethodDescriptor methodDescriptor)
 {
     ProjectMethod res;
     res.Method = null;
     res.Project = null;
     foreach (var project in solution.Projects)
     {
         // Alternative method using SymbolFinder, it only works with methods in the solution
         // Discarded by the moment
         //var methodDeclarations = SymbolFinder.FindDeclarationsAsync(project, methodDescriptor.MethodName,false).Result;
         //methodDeclarations = methodDeclarations.Where(ms => methodDescriptor.SameAsMethodSymbom(ms as IMethodSymbol));
         //if (methodDeclarations.Count() > 0)
         //{
         //    return methodDeclarations.First() as IMethodSymbol;
         //}
         //else
         //{
         // My own method
         var method = FindMethodSymbolInProject(methodDescriptor, project);
         if (method != null)
         {
             res.Project = project;
             res.Method = method;
             return res;
         }
         //}
     }
     return res;
 }
        public StatementProcessor(MethodDescriptor m,
            PropGraphNodeDescriptor rv, PropGraphNodeDescriptor thisRef,
            IEnumerable<PropGraphNodeDescriptor> parameters,
            ProjectCodeProvider codeProvider)
        {
            // this.containerEntity = containerEntity;
            this.ReturnVariable = rv;
            this.Method = m;
            this.ParameterNodes = parameters;
            this.ThisRef = thisRef;
            this.PropagationGraph = new PropagationGraph();
            this.InstantiatedTypes = new HashSet<TypeDescriptor>();
            this.RemovedTypes = new HashSet<TypeDescriptor>();

            if (rv != null)
            {
                PropagationGraph.AddRet(rv);
            }
            if (thisRef != null)
            {
                PropagationGraph.Add(thisRef);
            }

            foreach (var parameter in this.ParameterNodes)
            {
                if (parameter != null)
                {
                    PropagationGraph.Add(parameter);
                }
            }
            //this.dispatcher = dispatcher;
        }
Esempio n. 3
0
 public HubInvokerContext(IHub hub, StateChangeTracker tracker, MethodDescriptor methodDescriptor, object[] args)
 {
     Hub = hub;
     MethodDescriptor = methodDescriptor;
     Args = args;
     StateTracker = tracker;
 }
Esempio n. 4
0
 public HubInvokerContext(IHub hub, TrackingDictionary state, MethodDescriptor methodDescriptor, object[] args)
 {
     Hub = hub;
     MethodDescriptor = methodDescriptor;
     Args = args;
     State = state;
 }
        public ActionResult Create(Type modelType, int index)
        {
            var typeMapping = ModelMappingManager.FindByType(modelType);
            var mapping = typeMapping.Constructors.FirstOrDefault(m => m.Index == index);
            if (mapping == null)
                throw new RunningObjectsException(string.Format("No constructor found at index {0} for type {1}", index, modelType.PartialName()));

            var descriptor = new MethodDescriptor(mapping, ControllerContext.GetActionDescriptor(RunningObjectsAction.Create));
            return View(new Method(descriptor));
        }
Esempio n. 6
0
        public void CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action<IMessage> done)
        {
            uint hash = method.Service.GetHash();
            ExternalService externalService = exportedServicesIds[hash];

            var requestId = externalService.GetNextRequestId();
            callbacks.Enqueue(new Callback { Action = done, Builder = responsePrototype.WeakToBuilder(), RequestId = requestId });

            ServerPacket data = new ServerPacket(externalService.Id, (int)GetMethodId(method), requestId, ListenerId).WriteMessage(request);
            Send(data);
        }
 async internal  Task<MethodEntity> CreateMethodEntityAsync(MethodDescriptor methodDescriptor)
 {
     MethodEntity methodEntity = null;
     var tree = await this.GetSyntaxAsync(methodDescriptor);
     if(tree==null)
     { }
     var model = this.Compilation.GetSemanticModel(tree);
     var methodEntityGenerator = new MethodSyntaxProcessor(model, this, tree, methodDescriptor);
     methodEntity = methodEntityGenerator.ParseMethod();
     return methodEntity;
 }
		public BaseMethodDeclarationSyntax FindMethodSyntax(MethodDescriptor method, out IMethodSymbol symbol)
		{
			var root = this.SyntaxTree.GetRoot();
			var visitor = new MethodFinder(method, this.SemanticModel);
			visitor.Visit(root);

			Contract.Assert(visitor.Result != null);
			symbol = (IMethodSymbol)this.SemanticModel.GetDeclaredSymbol(visitor.Result);

			return visitor.Result;
		}
 public MethodDescriptor FindMethodImplementation(MethodDescriptor methodDescriptor, TypeDescriptor typeDescriptor)
 {
     var roslynMethod = FindMethod(methodDescriptor);
     if (roslynMethod != null)
     {
         var roslynType = RoslynSymbolFactory.GetTypeByName(typeDescriptor.TypeName, this.Compilation);
         var implementedMethod = Utils.FindMethodImplementation(roslynMethod, roslynType);
         return new MethodDescriptor(implementedMethod);
     }
     // If we cannot resolve the method, we return the same method.
     return methodDescriptor;
 }
        /// <summary>
        /// We use this mapping as a cache of already computed callees info
        /// </summary>
        //public MethodEntityProcessor EntityProcessor { get; private set; }
        //public ISet<E> NodesProcessing = new HashSet<E>();
        //public ISet<CallConext<M,E>> NodesProcessing = new HashSet<CallConext<M,E>>();
        /// <summary>
        /// A method entity is built using the methods interface (params, return) and the propagation graph that is 
        /// initially populated with the variables, parameters and calls of the method 
        /// </summary>
        /// <param name="methodDescriptor"></param>
        /// <param name="mid"></param>
        /// <param name="propGraph"></param>
        /// <param name="instantiatedTypes"></param>
        public MethodEntity(MethodDescriptor methodDescriptor,
			MethodInterfaceData mid,
			PropagationGraph propGraph,
			IEnumerable<TypeDescriptor> instantiatedTypes)
            : base()
        {
            this.MethodDescriptor = methodDescriptor;
            this.EntityDescriptor = EntityFactory.Create(methodDescriptor);
            this.MethodInterfaceData = mid;

            this.PropGraph = propGraph;
            this.InstantiatedTypes = new HashSet<TypeDescriptor>(instantiatedTypes);
        }
 public static IMethodSymbol FindMethodInCompilation(MethodDescriptor methodDescriptor, Compilation compilation)
 {
     var type = GetTypeByName(methodDescriptor.ClassName, compilation);
     if (type != null)
     {
         var members = type.GetMembers(methodDescriptor.MethodName);
         if (members.Count() > 0)
         {
             var member = members.First() as IMethodSymbol;
             return member;
         }
     }
     return null;
 }
 internal static IEntityDescriptor Create(MethodDescriptor methodDescriptor, IDispatcher dispatcher)
 {
     IEntityDescriptor result = null;
     if (dispatcher is OrleansDispatcher)
     {
         var orleanDispatcher = (OrleansDispatcher)dispatcher;
         //var guid = orleanDispatcher.GetGuidForMethod(methodDescriptor);
         // I think we should consult the dispatcher about an existing ID for the descriptor
         result = new OrleansEntityDescriptor(methodDescriptor); //System.Guid.NewGuid());
     }
     else
     {
         result = new MethodEntityDescriptor(methodDescriptor);
     }
     return result;
 }
        /// <summary>
        /// We use this mapping as a cache of already computed callees info
        /// </summary>
        //public MethodEntityProcessor EntityProcessor { get; private set; }
        //public ISet<E> NodesProcessing = new HashSet<E>();
        //public ISet<CallConext<M,E>> NodesProcessing = new HashSet<CallConext<M,E>>();
        /// <summary>
        /// A method entity is built using the methods interface (params, return) and the propagation graph that is 
        /// initially populated with the variables, parameters and calls of the method 
        /// </summary>
        /// <param name="methodDescriptor"></param>
        /// <param name="mid"></param>
        /// <param name="propGraph"></param>
        /// <param name="instantiatedTypes"></param>
        public MethodEntity(MethodDescriptor methodDescriptor,
            MethodInterfaceData mid,
            PropagationGraph propGraph,
            IEntityDescriptor descriptor,
            IEnumerable<TypeDescriptor> instantiatedTypes,
            bool canBeAnalyzed = true)
            : base()
        {
            this.MethodDescriptor = methodDescriptor;
            this.EntityDescriptor = descriptor; // EntityFactory.Create(methodDescriptor);
            this.MethodInterfaceData = mid;

            this.propGraph = propGraph;
            this.InstantiatedTypes = new HashSet<TypeDescriptor>(instantiatedTypes);
            this.CanBeAnalized = canBeAnalyzed;
        }
Esempio n. 14
0
        public void CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action<IMessage> done, ulong objectId)
        {
            var serviceName = method.Service.FullName;
            var serviceHash = StringHashHelper.HashString(serviceName);

            if (!this.Services.ContainsKey(serviceHash))
            {
                Logger.Error("Not bound to client service {0} [0x{1}] yet.", serviceName, serviceHash.ToString("X8"));
                return;
            }

            var serviceId = this.Services[serviceHash];
            var packet = new Packet(
                new Header((byte)serviceId, (uint)(method.Index + 1), this._requestCounter++, (uint)request.SerializedSize, objectId),
                request.ToByteArray());

            this.Send(packet);
        }
		public async Task<Tuple<BaseMethodDeclarationSyntax, IMethodSymbol>> FindMethodSyntaxAsync(MethodDescriptor method)
		{
			var root = await this.SyntaxTree.GetRootAsync();
			var visitor = new MethodFinder(method, this.SemanticModel);
			visitor.Visit(root);

			if (visitor.Result != null)
			{
				return new Tuple<BaseMethodDeclarationSyntax, IMethodSymbol>(
					visitor.Result,
					(IMethodSymbol)this.SemanticModel.GetDeclaredSymbol(visitor.Result)
					);
			}
			else
			{
				return null;
			}
		}
        async internal static Task<MethodEntity> FindProviderAndCreateMethodEntityAsync(MethodDescriptor methodDescriptor)
        {
            MethodEntity methodEntity = null;

            var pair = await ProjectCodeProvider.GetProjectProviderAndSyntaxAsync(methodDescriptor);

            if (pair != null)
            {
                var provider = pair.Item1;
                var tree = pair.Item2;
                var model = provider.Compilation.GetSemanticModel(tree);
                var methodEntityGenerator = new MethodSyntaxProcessor(model, provider, tree, methodDescriptor);
                methodEntity = methodEntityGenerator.ParseMethod();
            }
            else
            {
                var libraryMethodVisitor = new LibraryMethodProcessor(methodDescriptor);
                methodEntity = libraryMethodVisitor.ParseLibraryMethod();
            }
            return methodEntity;
        }
Esempio n. 17
0
        public void CallMethod(MethodDescriptor method, IMessage request, ulong localObjectId)
        {
            var serviceName = method.Service.FullName;
            var serviceHash = StringHashHelper.HashIdentity(serviceName);

            if (!this.Services.ContainsKey(serviceHash))
            {
                Logger.Error("Not bound to client service {0} [0x{1}] yet.", serviceName, serviceHash.ToString("X8"));
                return;
            }

            var serviceId = this.Services[serviceHash];
            var remoteObjectId = GetRemoteObjectID(localObjectId);

            Logger.Debug("Calling {0} localObjectId={1}, remoteObjectId={2}", method.FullName, localObjectId, remoteObjectId);

            var packet = new BNetPacket(
                new BNetHeader((byte)serviceId, (uint)(method.Index + 1), this._requestCounter++, (uint)request.SerializedSize, remoteObjectId),
                request.ToByteArray());

            this.Connection.Send(packet);
        }
Esempio n. 18
0
 private void WriteMethodDefinition(TextWriter output, MethodDescriptor item)
 {
     output.Write(item.Signature.IsFunction ? "Func " : "Proc ");
     output.Write(string.Format("{0} entryPoint: {1}, frameSize:{2}\n",
         item.Signature.Name,
         item.EntryPoint,
         item.VariableFrameSize));
     output.Write(string.Format(".args {0}\n", item.Signature.ArgCount));
     if (item.Signature.Params != null)
     {
         for (int i = 0; i < item.Signature.Params.Length; i++)
         {
             output.Write(string.Format("{0,-3}: ByVal={1}", i, item.Signature.Params[i].IsByValue.ToString()));
             if (item.Signature.Params[i].HasDefaultValue)
             {
                 output.Write(string.Format(" defValue: {0}\n", item.Signature.Params[i].DefaultValueIndex));
             }
             else
             {
                 output.WriteLine();
             }
         }
     }
 }
        public Task <PropagationEffects> AddMethodAsync(MethodDescriptor methodToAdd)
        {
            StatsHelper.RegisterMsg("ProjectGrain::AddMethod", this.GrainFactory);

            return(this.projectCodeProvider.AddMethodAsync(methodToAdd));
        }
Esempio n. 20
0
 public RequestContext(GoContext goContext, MethodDescriptor methodDescriptor)
 {
     GoContext        = goContext;
     MethodDescriptor = methodDescriptor;
 }
        public Task <MethodDescriptor> GetOverridenMethodAsync(MethodDescriptor methodDescriptor)
        {
            StatsHelper.RegisterMsg("ProjectGrain::GetOverridenMethod", this.GrainFactory);

            return(this.projectCodeProvider.GetOverridenMethodAsync(methodDescriptor));
        }
 private static void WriteMethodInvocation(StringBuilder builder, MethodDescriptor methodDescriptor, string currentIndent)
 {
     builder.Append($".{methodDescriptor.Name}(");
     WriteMethodParameters(builder, methodDescriptor, currentIndent);
     builder.Append(")");
 }
 public override Task <IEntity> CreateMethodEntityAsync(MethodDescriptor methodDescriptor)
 {
     reachableMethods.Add(methodDescriptor);
     return(base.CreateMethodEntityAsync(methodDescriptor));
 }
 private static string GetMethodName(MethodDescriptor method)
 {
     return(Json.CamelCase(method.Name));
 }
 public override Task <bool> IsReachableAsync(MethodDescriptor methodDescriptor)
 {
     return(Task.FromResult(this.MethodEntities.ContainsKey(methodDescriptor)));
 }
Esempio n. 26
0
 public bool HasAttributes <T1, T2>() where T1 : Attribute where T2 : Attribute
 {
     return(MethodDescriptor.HasAttributes <T1, T2>());
 }
Esempio n. 27
0
 // rpc to client
 public void CallMethod(MethodDescriptor method, IMessage request)
 {
     CallMethod(method, request, 0);
 }
Esempio n. 28
0
 public bool HasAttribute <T>() where T : Attribute
 {
     return(MethodDescriptor.HasAttribute <T>());
 }
Esempio n. 29
0
 public bool HasActionOrHandlerAttribute <T>() where T : Attribute
 {
     return(MethodDescriptor.HasAttribute <T>() || HandlerTypeDescriptor.HasAttribute <T>());
 }
Esempio n. 30
0
 public static uint GetMethodId(MethodDescriptor method)
 {
     return((uint)method.Options[bnet.protocol.Rpc.MethodId.Descriptor]);
 }
Esempio n. 31
0
 private RestMethod(MethodDescriptor protoMethod, HttpMethod httpMethod, JsonParser parser, Func <IMessage, TranscodingOutput> contentFactory) =>
 (_protoMethod, _httpMethod, _parser, FullName, _contentFactory) =
        public override Task <IMethodEntityWithPropagator> GetMethodEntityAsync(MethodDescriptor methodDescriptor)
        {
            var methodEntityGrain = OrleansMethodEntity.GetMethodEntityGrain(grainFactory, methodDescriptor);

            return(Task.FromResult <IMethodEntityWithPropagator>(methodEntityGrain));
        }
        public Task <bool> IsReachableAsync(MethodDescriptor methodDescriptor)
        {
            //StatsHelper.RegisterMsg("ProjectGrain::IsReachable", this.GrainFactory);

            return(this.projectCodeProvider.IsReachableAsync(methodDescriptor));
        }
Esempio n. 34
0
        private bool WriteTestMethodInvocationToken(string tokenName, int propertyIndex, StringBuilder builder, TestGenerationContext context, string testTemplate, MethodDescriptor methodDescriptor)
        {
            int numberOfParameters = methodDescriptor.MethodParameters.Count();

            switch (tokenName)
            {
            case "TestedMethodName":
                builder.Append(methodDescriptor.Name);

                break;

            case "TestMethodName":
                this.WriteTestMethodName(builder, context, methodDescriptor);
                break;

            case "AsyncModifier":
                if (methodDescriptor.IsAsync)
                {
                    builder.Append("async");
                }

                break;

            case "AsyncReturnType":
                builder.Append(methodDescriptor.IsAsync ? "Task" : "void");
                break;

            case "ParameterSetupDefaults":
                WriteParameterSetupDefaults(builder, context, methodDescriptor);
                break;

            case "ParameterSetupTodo":
                for (int j = 0; j < numberOfParameters; j++)
                {
                    builder.Append($"{methodDescriptor.MethodParameters[j].TypeInformation} {methodDescriptor.MethodParameters[j].ArgumentName} = TODO;");

                    if (j < numberOfParameters - 1)
                    {
                        builder.AppendLine();
                    }
                }

                break;

            case "MethodInvocationPrefix":
                if (methodDescriptor.HasReturnType)
                {
                    builder.Append("var result = ");
                }

                if (methodDescriptor.IsAsync)
                {
                    builder.Append("await ");
                }

                break;

            case "MethodInvocation":
                WriteMethodInvocation(builder, methodDescriptor, FindIndent(testTemplate, propertyIndex));

                break;

            default:
                return(false);
            }

            return(true);
        }
Esempio n. 35
0
 public Task <bool> IsReachableAsync(MethodDescriptor methodDescriptor)
 {
     return(solutionGrain.IsReachableAsync(methodDescriptor));
 }
Esempio n. 36
0
        private void WriteTestMethod(StringBuilder builder, TestGenerationContext context, string testTemplate, MethodDescriptor methodDescriptor = null)
        {
            string filledTemplate = StringUtilities.ReplaceTokens(
                testTemplate,
                (tokenName, propertyIndex, builder2) =>
            {
                if (WriteGlobalToken(tokenName, builder2, context))
                {
                    return;
                }

                if (this.WriteTestMethodCommonToken(tokenName, propertyIndex, builder2, context, testTemplate))
                {
                    return;
                }

                if (methodDescriptor != null && this.WriteTestMethodInvocationToken(tokenName, propertyIndex, builder2, context, testTemplate, methodDescriptor))
                {
                    return;
                }

                WriteTokenPassthrough(tokenName, builder2);
            });

            builder.Append(filledTemplate);
        }
        public override async Task <IMethodEntityWithPropagator> GetMethodEntityAsync(MethodDescriptor methodDescriptor)
        {
            IMethodEntityWithPropagator result;

            await this.methodEntitiesMutex.WaitAsync();

            try
            {
                if (!this.MethodEntities.TryGetValue(methodDescriptor, out result))
                {
                    var methodEntity = await this.CreateMethodEntityAsync(methodDescriptor.BaseDescriptor) as MethodEntity;

                    if (methodDescriptor.IsAnonymousDescriptor)
                    {
                        methodEntity = methodEntity.GetAnonymousMethodEntity((AnonymousMethodDescriptor)methodDescriptor);
                    }

                    result = new MethodEntityWithPropagator(methodEntity, this);
                    //lock (this.methodEntities)
                    {
                        this.MethodEntities.TryAdd(methodDescriptor, result);
                    }
                }
            }
            finally
            {
                this.methodEntitiesMutex.Release();
            }

            return(result);
        }
Esempio n. 38
0
        private static bool WriteTestMethodNameToken(string tokenName, StringBuilder builder, MethodDescriptor methodDescriptor)
        {
            switch (tokenName)
            {
            case "TestedMethodName":
                builder.Append(methodDescriptor.Name);
                break;

            default:
                return(false);
            }

            return(true);
        }
Esempio n. 39
0
        private static void WriteParameterSetupDefaults(StringBuilder builder, TestGenerationContext context, MethodDescriptor methodDescriptor)
        {
            int numberOfParameters = methodDescriptor.MethodParameters.Count();

            for (int j = 0; j < numberOfParameters; j++)
            {
                TypeDescriptor typeInformation = methodDescriptor.MethodParameters[j].TypeInformation;

                string argumentValue;
                if (typeInformation.TypeSymbol != null)
                {
                    // If we have proper type information, generate the default expression for this type
                    var generator = Microsoft.CodeAnalysis.Editing.SyntaxGenerator.GetGenerator(context.Document);
                    argumentValue = generator.DefaultExpression(typeInformation.TypeSymbol).ToString();
                }
                else
                {
                    argumentValue = "TODO";
                }

                builder.Append($"{typeInformation} {methodDescriptor.MethodParameters[j].ArgumentName} = {argumentValue};");
                if (j < numberOfParameters - 1)
                {
                    builder.AppendLine();
                }
            }
        }
Esempio n. 40
0
        public static MethodDescriptor[] GetMethodData(string ifaceName)
        {
            IntPtr buffer;
            UInt16 count;

            int res = typeinfo_GetAllMethodData(ifaceName, out buffer, out count);
            if (res != 0) {
            throw new Exception(String.Format("GetAllMethodData({0}) " +
                                              "failed: {1:X8}",
                                              ifaceName, res));
            }

            MethodDescriptor[] methods = new MethodDescriptor[count];

            for (int i = 0; i < (UInt16)count; i++) {
            IntPtr infoptr = Marshal.ReadIntPtr(buffer, i *
                                                Marshal.SizeOf(typeof(IntPtr)));
            try {
                methods[i] = ConvertMethodDescriptor(infoptr, ifaceName, i);
            } catch (Exception e) {
                Console.WriteLine("skipping {0}[{1}]: {2}",
                                  ifaceName, i, e.Message);
            }
            }

            if (count > 0)
            Marshal.FreeCoTaskMem(buffer);

            return methods;
        }
Esempio n. 41
0
 static ParamDescriptor BuildParamDescriptor(IntPtr paramptr, int index,
                                         MethodDescriptor method)
 {
     XPTParamDescriptor xptpd = (XPTParamDescriptor)
     Marshal.PtrToStructure(paramptr, typeof(XPTParamDescriptor));
     ParamDescriptor pd = new ParamDescriptor();
     pd.method = method;
     pd.index = index;
     pd.flags = (ParamFlags) xptpd.param_flags;
     pd.type = xptpd.type;
     return pd;
 }
 public override Task <bool> IsReachableAsync(MethodDescriptor methodDescriptor)
 {
     return(Task.FromResult(reachableMethods.Contains(methodDescriptor)));
 }
Esempio n. 43
0
 static ParamDescriptor BuildRetValDescriptor(IntPtr paramptr,
                                          MethodDescriptor method)
 {
     return BuildParamDescriptor(paramptr, -1, method);
 }
Esempio n. 44
0
        private void WriteTestMethodName(StringBuilder builder, TestGenerationContext context, MethodDescriptor methodDescriptor)
        {
            string testMethodNameTemplate = this.Settings.GetTemplate(
                context.TestFramework,
                context.MockFramework,
                TemplateType.TestMethodName);

            string baseTestMethodName = StringUtilities.ReplaceTokens(
                testMethodNameTemplate,
                (tokenName2, propertyIndex2, builder2) =>
            {
                if (WriteGlobalToken(tokenName2, builder2, context))
                {
                    return;
                }

                if (WriteTestMethodNameToken(tokenName2, builder2, methodDescriptor))
                {
                    return;
                }

                WriteTokenPassthrough(tokenName2, builder2);
            });

            var testMethodName = CreateUniqueTestMethodName(context, baseTestMethodName);

            context.UsedTestMethodNames.Add(testMethodName);
            builder.Append(testMethodName);
        }
Esempio n. 45
0
            public static bool IsExtensionForMethod(MethodDescriptor extension, MethodDescriptor method)
            {
                // methods must be same name
                if (extension.info.Name != method.info.Name)
                    return false;

                // first argument must be for target type
                var extensionParameter = extension.info.GetParameters()[0];
                if (extensionParameter.ParameterType != method.info.DeclaringType)
                    return false;

                // remainging argument count must match
                int parameterCount = method.info.GetParameters().Length;
                if (extension.info.GetParameters().Length != parameterCount + 1)
                    return false;

                return true;
            }
        private MethodDescriptor ConstructMethodDescriptor(MethodCallInfo mci, bool special)
        {
            MethodBase method = mci.GetStrongestOverride();
            MethodDescriptor md = new MethodDescriptor(
                method,
                mci.EvaluatedArgumentsWithoutThis,
                special ? mci.ArgumentVariabilities : VariabilityPattern.CreateDefault(method).Pattern);
            var caller = mci.CallerTemplate.Decompilee;
            var callerPd = caller as ProcessDescriptor;
            var callerMd = caller as MethodDescriptor;
            if (callerPd != null)
                md.CallingProcess = callerPd;
            else
                md.CallingProcess = callerMd.CallingProcess;

            return md;
        }
Esempio n. 47
0
        static ParamDescriptor[] BuildParamDescriptorArray(IntPtr paramptr,
                                                       int count,
                                                       MethodDescriptor method)
        {
            ParamDescriptor[] parr = new ParamDescriptor[count];

            for (int i = 0; i < count; i++) {
            parr[i] = BuildParamDescriptor(paramptr, i, method);
            paramptr = (IntPtr)(paramptr.ToInt32() + 8);
            }
            return parr;
        }
Esempio n. 48
0
 public Task <IProjectCodeProvider> GetProjectCodeProviderAsync(MethodDescriptor methodDescriptor)
 {
     this.SetRequestContext();
     return(solutionGrain.GetProjectCodeProviderAsync(methodDescriptor));
 }
Esempio n. 49
0
 static MethodDescriptor ConvertMethodDescriptor(IntPtr xptinfo,
                                             string ifaceName,
                                             int index)
 {
     XPTMethodDescriptor info;
     info = (XPTMethodDescriptor)
     Marshal.PtrToStructure(xptinfo, typeof(XPTMethodDescriptor));
     MethodDescriptor meth = new MethodDescriptor();
     meth.ifaceName = ifaceName;
     meth.index = index;
     meth.name = System.Char.ToUpper(info.name[0]) + info.name.Substring(1);
     meth.flags = (MethodFlags)info.flags;
     meth.args = BuildParamDescriptorArray(info.args, info.numArgs, meth);
     meth.result = BuildRetValDescriptor(info.result, meth);
     if (meth.IsVisible()) {
     meth.resultType = meth.FindResultType();
     meth.BuildArgTypes();
     }
     return meth;
 }
        public Task <CodeGraphModel.SymbolReference> GetDeclarationInfoAsync(MethodDescriptor methodDescriptor)
        {
            StatsHelper.RegisterMsg("ProjectGrain::GetDeclarationInfo", this.GrainFactory);

            return(this.projectCodeProvider.GetDeclarationInfoAsync(methodDescriptor));
        }
Esempio n. 51
0
 public T GetActionOrHandlerAttribute <T>() where T : Attribute
 {
     return(MethodDescriptor.GetAttribute <T>() ?? HandlerTypeDescriptor.GetAttribute <T>());
 }
Esempio n. 52
0
 public Task <IMethodEntityWithPropagator> GetMethodEntityAsync(MethodDescriptor methodDescriptor)
 {
     this.SetRequestContext();
     return(solutionGrain.GetMethodEntityAsync(methodDescriptor));
 }
Esempio n. 53
0
 // rpc to client
 public void CallMethod(MethodDescriptor method, IMessage request)
 {
     Logger.Debug("CallMethod with 0 localObjectId");
     CallMethod(method, request, 0);
 }
Esempio n. 54
0
 public IEnumerable <T> GetActionOrHandlerAttributes <T>() where T : Attribute
 {
     return(MethodDescriptor.GetAttributes <T>()
            .Union(HandlerTypeDescriptor.GetAttributes <T>()));
 }
 internal MethodEntityDescriptor(MethodDescriptor methodDescriptor)
 {
     this.methodDescriptor = methodDescriptor;
 }
Esempio n. 56
0
 public T[] GetAttributes <T>() where T : Attribute
 {
     return(MethodDescriptor.GetAttributes <T>());
 }
Esempio n. 57
0
        /// <summary>
        /// Makes an RPC over remote client.
        /// </summary>
        /// <param name="method">The method to call.</param>
        /// <param name="controller">The rpc controller.</param>
        /// <param name="request">The request message.</param>
        /// <param name="responsePrototype">The response message.</param>
        /// <param name="done">Action to run when client responds RPC.</param>
        public void CallMethod(MethodDescriptor method, IRpcController controller, IMessage request, IMessage responsePrototype, Action<IMessage> done)
        {
            var serviceName = method.Service.FullName;
            var serviceHash = StringHashHelper.HashIdentity(serviceName);

            if (!this.Services.ContainsKey(serviceHash))
            {
                Logger.Error("Not bound to client service {0} [0x{1}] yet.", serviceName, serviceHash.ToString("X8"));
                return;
            }

            var serviceId = this.Services[serviceHash];
            var token = this._tokenCounter++;

            RPCCallbacks.Add(token, new RPCCallback(done, responsePrototype.WeakToBuilder()));

            var packet = new PacketOut((byte)serviceId, MooNetRouter.GetMethodId(method), (uint)token, this._listenerId, request);
            this.Connection.Send(packet);
        }
Esempio n. 58
0
        public static IList <MethodDescriptor> Build(GoModel model)
        {
            var descriptors = new List <MethodDescriptor>();

            foreach (var typeModel in model.Types)
            {
                var goAttribute = typeModel.Attributes.OfType <GoAttribute>().SingleOrDefault();
                if (goAttribute == null)
                {
                    continue;
                }
                foreach (var methodModel in typeModel.Methods)
                {
                    var goRequestAttribute = methodModel.Attributes.OfType <GoRequestAttribute>().SingleOrDefault();
                    if (goRequestAttribute == null)
                    {
                        continue;
                    }

                    var interceptorDescriptors = model
                                                 .Interceptors
                                                 .Concat(typeModel.Interceptors)
                                                 .Concat(methodModel.Interceptors)
                                                 .Select(i => new InterceptorDescriptor(i))
                                                 .OrderBy(i => i.Order)
                                                 .ToArray();

                    var baseUrl = goAttribute.Url;
                    var path    = goRequestAttribute.Path;

                    if (baseUrl.EndsWith("/") && path.StartsWith("/"))
                    {
                        baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
                    }
                    if (!baseUrl.EndsWith("/") && !path.StartsWith("/"))
                    {
                        path = path.Insert(0, "/");
                    }

                    var uri = baseUrl + path;

                    var returnType = methodModel.Method.ReturnType;

                    if (returnType.IsGenericType && typeof(Task).IsAssignableFrom(returnType))
                    {
                        returnType = returnType.GenericTypeArguments[0];
                    }

                    var methodDescriptor = new MethodDescriptor
                    {
                        ClienType = typeModel.Type,
                        Codec     = methodModel.Codec,
                        InterceptorDescriptors = interceptorDescriptors,
                        Method      = goRequestAttribute.Method,
                        MethodInfo  = methodModel.Method,
                        ReturnType  = returnType,
                        UrlTemplate = new TemplateString(uri, TemplateUtilities.GetVariables(uri))
                    };

                    var parameterModels = new List <ParameterDescriptor>(methodModel.Parameters.Count);
                    foreach (var parameterModel in methodModel.Parameters)
                    {
                        var parameterTarget     = GetParameterTarget(methodDescriptor, parameterModel);
                        var parameterDescriptor = new ParameterDescriptor
                        {
                            Name           = parameterModel.ParameterName,
                            ParameterType  = parameterModel.ParameterInfo.ParameterType,
                            FormattingInfo = new ParameterFormattingInfo
                            {
                                FormatterName = GetFormatterName(parameterModel),
                                FormatterType = parameterModel.Attributes.OfType <CustomFormatterAttribute>().LastOrDefault()?.FormatterType,
                                Target        = parameterTarget
                            }
                        };

                        parameterModels.Add(parameterDescriptor);
                    }

                    methodDescriptor.Parameters = parameterModels;

                    descriptors.Add(methodDescriptor);
                }
            }

            return(descriptors);
        }
Esempio n. 59
0
 public static uint GetMethodId(MethodDescriptor method)
 {
     return (uint)method.Options[bnet.protocol.Rpc.MethodId.Descriptor];
 }
 /// <summary>
 /// 重写以将Default中的Array更改为List,使Args能修改
 /// </summary>
 public override IList <object> ResolveMethodParameters(MethodDescriptor method, IList <IJsonValue> values)
 {
     method.CheckNotNull("method");
     return(method.Parameters.Zip(values, ResolveParameter).ToList());
 }