public static string GetName()
        {
            Namer namer = new Namer();

            namer.ShowDialog();
            return(namer.GetName());
        }
Example #2
0
        private string ConvertParameter(ParameterInfo info, CodeMemberMethod method)
        {
            var type = info.ParameterType;

            if (type.IsRegMember(RegPairs, out var regPair))
            {
                CodeFieldReferenceExpression regRef;
                if (!TryGetReferenceToFieldOfType(regPair.Registry, out regRef))
                {
                    regRef = AddConstructorInitializedField(regPair.Registry);
                }

                var param = new CodeParameterDeclarationExpression(regPair.Key, Namer.GetName());
                method.Parameters.Add(param);

                // Declare localVar
                var localVarDeclaration = new CodeVariableDeclarationStatement(regPair.Member, Namer.GetName());
                method.Statements.Add(localVarDeclaration);

                // Assign to localVar
                var localVarAssignment = new CodeAssignStatement(
                    new CodeVariableReferenceExpression(localVarDeclaration.Name),
                    new CodeIndexerExpression(regRef, new CodeArgumentReferenceExpression(param.Name)));

                method.Statements.Add(localVarAssignment);
                return(localVarDeclaration.Name);
            }
            else
            {
                Console.WriteLine("ERROR IN PARAMETER CONVERSION");
                return(null);
            }
        }
Example #3
0
        private CodeFieldReferenceExpression AddDirectlyInitializedField(Type type, string svcString)
        {
            var field = CodeDomEx.CreatePrivateField(Namer.GetName(), type);

            field.InitExpression = new CodeSnippetExpression("SuperMemoAssistant.Services.Svc.SM." + svcString);
            Klass.Members.Add(field);
            return(CodeDomEx.CreateThisFieldRef(field.Name));
        }
Example #4
0
        private CodeFieldReferenceExpression AddConstructorInitializedField(Type type)
        {
            // Add parameter arg
            var param = CodeDomEx.CreateParam(Namer.GetName(), type);

            Constructor.Parameters.Add(param);

            // Add field
            var field = CodeDomEx.CreatePrivateField(Namer.GetName(), type);

            Klass.Members.Add(field);
            var fieldRef = CodeDomEx.CreateThisFieldRef(field.Name);

            // Assign to field from constructor
            var paramRef   = new CodeArgumentReferenceExpression(param.Name);
            var assignment = new CodeAssignStatement(fieldRef, paramRef);

            Constructor.Statements.Add(assignment);

            return(CodeDomEx.CreateThisFieldRef(field.Name));
        }
Example #5
0
        private CodeVariableReferenceExpression GetRegistryMemberFromRegistryField(CodeMemberMethod method, RegistryType regPair, CodeFieldReferenceExpression regRef)
        {
            // Add as the method's first parameter
            var param = new CodeParameterDeclarationExpression(regPair.Key, Namer.GetName());

            method.Parameters.Add(param);

            // Create the local variable to store the reference to the registry member
            var thisVarDeclaration = new CodeVariableDeclarationStatement(
                regPair.Member,
                Namer.GetName());

            method.Statements.Add(thisVarDeclaration);


            // eg. IElement thisIElement = Svc.SM.Registry.Element[thisId];
            CodeAssignStatement thisVarAssignment = new CodeAssignStatement(
                new CodeVariableReferenceExpression(thisVarDeclaration.Name),
                new CodeIndexerExpression(regRef, new CodeArgumentReferenceExpression(param.Name)));

            method.Statements.Add(thisVarAssignment);

            return(new CodeVariableReferenceExpression(thisVarDeclaration.Name));
        }
Example #6
0
 private void ConvertReturnedInvoke(CodeMemberMethod method, Type retType, CodeMethodInvokeExpression invoke)
 {
     if (retType.IsRegMember(RegPairs, out _))
     {
         var decl       = new CodeVariableDeclarationStatement(new CodeTypeReference(retType), Namer.GetName());
         var varRef     = new CodeVariableReferenceExpression(decl.Name);
         var assignment = new CodeAssignStatement(varRef, invoke);
         var prop       = new CodePropertyReferenceExpression(varRef, "Id");
         method.Statements.Add(decl);
         method.Statements.Add(assignment);
         method.Statements.Add(new CodeMethodReturnStatement(prop));
         method.ReturnType = new CodeTypeReference(typeof(int));
     }
     else if (retType.IsGenericType && retType.GetGenericTypeDefinition() == typeof(IEnumerable <>) && retType.GetGenericArguments()[0].IsRegMember(RegPairs, out _))
     {
         var decl       = new CodeVariableDeclarationStatement(new CodeTypeReference(retType), Namer.GetName());
         var varRef     = new CodeVariableReferenceExpression(decl.Name);
         var assignment = new CodeAssignStatement(varRef, invoke);
         method.Statements.Add(decl);
         method.Statements.Add(assignment);
         method.Statements.Add(new CodeMethodReturnStatement(new CodeSnippetExpression(decl.Name + ".Select(x => x.Id)")));
         method.ReturnType = new CodeTypeReference(typeof(IEnumerable <int>));
         AddImportIfNotExists("System.Linq");
     }
     else
     {
         method.Statements.Add(
             new CodeMethodReturnStatement(
                 invoke
                 ));
     }
 }
Example #7
0
        private void ConvertMethod(MethodInfo info)
        {
            var method = CodeDomEx.CreateMethod(info.Name, info.ReturnType);

            method.Comments.Add(new CodeCommentStatement(GetDocsFor(info)));

            var targetMethodRef  = new CodeMethodReferenceExpression(WrappedRef, info.Name);
            var targetMethodArgs = new List <CodeExpression>();
            var retType          = info.ReturnType;

            if (Wrapped.IsRegMember(RegPairs, out var regPair))
            {
                CodeFieldReferenceExpression regRef;
                if (!TryGetReferenceToFieldOfType(regPair.Registry, out regRef))
                {
                    regRef = AddConstructorInitializedField(regPair.Registry);
                }

                var localInstanceRef = GetRegistryMemberFromRegistryField(method, regPair, regRef);
                targetMethodRef = new CodeMethodReferenceExpression(localInstanceRef, info.Name);
            }

            var parameters = info.GetParameters();

            if (parameters != null)
            {
                foreach (var parameter in parameters)
                {
                    if (parameter.IsOut)
                    {
                        var paramType = parameter.ParameterType;
                        var decl      = new CodeVariableDeclarationStatement(new CodeTypeReference(paramType.GetElementType()), Namer.GetName());
                        method.Statements.Add(decl);
                        targetMethodArgs.Add(new CodeSnippetExpression("out " + decl.Name));
                        continue;
                    }

                    if (parameter.ParameterType.IsRegMember(RegPairs, out _))
                    {
                        string x = ConvertParameter(parameter, method);
                        targetMethodArgs.Add(new CodeVariableReferenceExpression(x));
                    }
                    else
                    {
                        string x = KeepParameter(parameter, method);
                        targetMethodArgs.Add(new CodeArgumentReferenceExpression(x));
                    }
                }
            }

            var invoke = new CodeMethodInvokeExpression(targetMethodRef, targetMethodArgs.ToArray());

            ConvertReturnedInvoke(method, retType, invoke);
            Klass.Members.Add(method);
        }
Example #8
0
        private string KeepParameter(ParameterInfo info, CodeMemberMethod method)
        {
            var param = new CodeParameterDeclarationExpression(new CodeTypeReference(info.ParameterType), Namer.GetName());

            method.Parameters.Add(param);
            return(param.Name);
        }