public async Task <string> Gen(CodeClass selectedClass, GenOptions opts)
        {
            _opts   = opts;
            _genner = new ClassGenerator(_parts, _opts, _dte);

            if (_debugMode == true)
            {
                ParseFunctions(selectedClass);
                return(PutItAllTogether());
            }
            else
            {
                return(await Task.Run(() =>
                {
                    ParseFunctions(selectedClass);
                    return PutItAllTogether();
                }));
            }
        }
        public string GenerateFunctionParamForClassInput(CodeTypeRef codeTypeRef)
        {
            var strippedCodeTypeRef = StripGenerics(codeTypeRef);

            var fullName = strippedCodeTypeRef.AsFullName.Replace("?", "");
            var name     = strippedCodeTypeRef.CodeType.Name.Replace("?", "");

            if (ClassGenerator.IsCodeTypeAList(name))
            {
                var baseType = TryToGuessGenericArgument(codeTypeRef);
                if (baseType == null)
                {
                    return(null);
                }
                name     = baseType.CodeType.Name + "List";
                fullName = strippedCodeTypeRef.AsFullName.Replace("?", "");
            }

            var exists = _parts.ParamsGenerated.FirstOrDefault(x => x.FullName == fullName);

            if (exists != null)
            {
                return(exists.GetFunctionName);                //do not add a 2nd one
            }
            var functionName = string.Format("Get{0}", name);

            //if (functionName == "GetList")
            //  {
            //       var asdasdsad = 55;
            //  }

            //_parts.ParamsGenerated keeps a list of functions that will get the value of the object we generated
            _parts.ParamsGenerated.Add(new ParamsGenerated()
            {
                FullName = fullName, GetFunctionName = functionName
            });

            string innerCode;

            if (functionName == "GetTask")
            {
                innerCode = "new Task()";
            }
            else
            {
                innerCode = GetParamValue(codeTypeRef, string.Empty, 3);
            }

            if (innerCode.Contains("Task"))
            {
                var asdasd = 444;
            }

            var gen = string.Format(@"
        private static {0} {1}() {{
            return {2};
        }}
        ", fullName, functionName, innerCode);

            _parts.ParamInputs += gen;
            return(functionName);
        }