예제 #1
0
        private IReadOnlyList <MethodSignature> GetMethodSignatures(IComponentProvider provider)
        {
            var boolSymbol = _symbols.GetSymbol <bool>();
            var intSymbol  = _symbols.GetSymbol <int>();
            var memberType = _member.ReturnType !.Symbol;

            // Incoming Data type
            var discovery  = new MethodArg(RefKind.In, provider.DiscoveryType, "parent");
            var sourceType = new MethodArg(RefKind.In, _member.ContainingFullType.Symbol, "source");

            // Buffers
            var readOnlySpan = new MethodArg(_symbols.GetSymbol(typeof(ReadOnlySpan <byte>)), "readOnlySpan");
            var span         = new MethodArg(_symbols.GetSymbol(typeof(Span <byte>)), "span");
            var cursor       = new MethodArg(RefKind.Ref, _symbols.GetSymbol(typeof(SequenceCursor <byte>)), "cursor");

            // Return Data
            var readBytes    = new MethodArg(RefKind.Out, intSymbol, "readBytes");
            var writtenBytes = new MethodArg(RefKind.Out, intSymbol, "writtenBytes");
            var result       = new MethodArg(RefKind.Out, memberType, "result");

            return(new MethodSignature[] {
                MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser")),
                MethodSignatureBuilder.CreateConstructor(_typeName, (provider.DiscoveryType, "parser"), (RefKind.Out, boolSymbol, "isSuccess")),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0))
                .AddArgument(discovery, readOnlySpan, readBytes, result)
                .WithReturn <bool>(),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TryDeserializeState(0))
                .AddArgument(discovery, cursor, result)
                .WithReturn <bool>(),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0))
                .AddArgument(discovery, readOnlySpan, result)
                .WithReturn(memberType),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.DeserializeState(0))
                .AddArgument(discovery, cursor)
                .WithReturn(memberType),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.TrySerializeState(0))
                .AddArgument(discovery, sourceType, span, writtenBytes)
                .WithReturn(boolSymbol),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.SerializeState(0))
                .AddArgument(discovery, sourceType, span)
                .WithReturn(intSymbol),

                MethodSignatureBuilder.CreateMethod(_typeName, MemberMethod.GetLengthState(0))
                .AddArgument(discovery, sourceType)
                .WithReturn(intSymbol)
            });
        public IGenerateAction InitalizeSelection(CodeGenerationOptions options, Gtk.TreeView treeView)
        {
            CreateConstructor createConstructor = new CreateConstructor(options);

            createConstructor.Initialize(treeView);
            return(createConstructor);
        }
예제 #3
0
        protected virtual void CreateRouteDefinition()
        {
            routeDefinition = sourceGenerator.GenerateTypeDeclaration(@namespace, node.Name + "Route", routeDefinitions.Name);
            AddRouteDefinitionBaseType();

            routeDefinition.Members.Add(
                CreateConstructor.WithParameters()
                .WithAttributes(MemberAttributes.Public)
                .WithBaseConstructorArgs(GetRouteDefinitionBaseConstructorArgs())
                .Constructor);
        }
예제 #4
0
        private static void CreateRoutesTypeConstructor(CodeTypeDeclaration type)
        {
            CodeMemberField engineContext = CreateMemberField.WithNameAndType <IEngineContext>(engineContextFieldName).WithAttributes(MemberAttributes.Family).Field;

            type.Members.Add(engineContext);

            CodeConstructor constructor = CreateConstructor
                                          .WithParameters(new CodeParameterDeclarationExpression(typeof(IEngineContext), engineContext.Name))
                                          .WithAttributes(MemberAttributes.Public)
                                          .WithBody(CreateAssignStatement.This(engineContext.Name).EqualsArgument(engineContext.Name).Statement)
                                          .Constructor;

            type.Members.Add(constructor);
        }
        public bool IsValid(CodeGenerationOptions options)
        {
            CreateConstructor createConstructor = new CreateConstructor(options);

            return(createConstructor.IsValid());
        }
		public IGenerateAction InitalizeSelection (CodeGenerationOptions options, Gtk.TreeView treeView)
		{
			CreateConstructor createConstructor = new CreateConstructor (options);
			createConstructor.Initialize (treeView);
			return createConstructor;
		}
		public bool IsValid (CodeGenerationOptions options)
		{
			CreateConstructor createConstructor = new CreateConstructor (options);
			return createConstructor.IsValid ();
		}
예제 #8
0
 /// <summary>
 /// 创建指定类型的对象实例。
 /// </summary>
 /// <param name="type">要创建实例的类型。</param>
 /// <param name="args">调用构造函数需要传递的参数。</param>
 /// <returns></returns>
 public static object Create(Type type, params object[] args)
 {
     return(args == null || args.Length == 0
         ? CreateDefaultConstructor(type)()
         : CreateConstructor(FindConstructor(type, args))(args));
 }
예제 #9
0
 public static object Createinstance(Type type, object[] args)
 {
     return(CreateConstructor(type, args)(args));
 }