SdkGenerator.ClassCreator.AddProperties C# (CSharp) Method

AddProperties() public method

public AddProperties ( string propertyName, Type propertyType ) : ClassCreator
propertyName string
propertyType System.Type
return ClassCreator
        public ClassCreator AddProperties(string propertyName, Type propertyType)
        {
            var backingField = new CodeMemberField(propertyType, "_" + propertyName);
            _targetClass.Members.Add(backingField);

            // Declare the read-only Width property.
            var memberProperty = new CodeMemberProperty
            {
                Attributes = MemberAttributes.Public | MemberAttributes.Final,
                Name = propertyName,
                HasGet = true,
                HasSet = true,
                Type = new CodeTypeReference(propertyType)
            };

            memberProperty.GetStatements.Add(new CodeMethodReturnStatement(
                new CodeFieldReferenceExpression(
                    new CodeThisReferenceExpression(), "_" + propertyName)));

            memberProperty.SetStatements.Add(
                new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), "_" + propertyName),
                    new CodePropertySetValueReferenceExpression())
                );

            _targetClass.Members.Add(memberProperty);

            return this;
        }

Usage Example

Example #1
0
        public static void WriteClassProperties(Type classType, string outputFolder)
        {
            var className = classType.Name.Replace("`1", "");

            if (GenedClasses.Contains(classType.Namespace + "." + className))
            {
                return;
            }

            GenedClasses.Add(classType.Namespace + "." + className);


            if (classType.GetGenericArguments().Length > 0)
            {
                foreach (var genericArgument in classType.GetGenericArguments())
                {
                    if (!genericArgument.IsEnum)
                    {
                        WriteClassProperties(genericArgument, outputFolder);
                    }

                    if (genericArgument.IsEnum)
                    {
                        WriteEnum(genericArgument, outputFolder);
                    }
                }
            }

            var useTypeT = classType.IsConstructedGenericType;


            var folderName = classType.Namespace.Replace(".", @"\");

            var pathBuilder = new StringBuilder(outputFolder);

            pathBuilder.AppendFormat(@"{0}\", folderName);

            if (!Directory.Exists(pathBuilder.ToString()))
            {
                try { Directory.CreateDirectory(pathBuilder.ToString()); }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                }
            }

            if (!File.Exists(pathBuilder + className + ".cs"))
            {
                var creator = new ClassCreator(classType.Namespace);
                creator.SetClassName(className, useTypeT);

                foreach (var prop in classType.GetProperties())
                {
                    if (prop.PropertyType.IsGenericType)
                    {
                        foreach (var t in prop.PropertyType.GetGenericArguments())
                        {
                            if (t.IsClass && !t.FullName.StartsWith("System"))
                            {
                                WriteClassProperties(t, outputFolder);
                            }

                            if (t.IsEnum && !t.FullName.StartsWith("System"))
                            {
                                WriteEnum(t, outputFolder);
                            }
                        }

                        creator.AddProperties(prop.Name, prop.PropertyType);
                    }
                    else
                    {
                        if (prop.PropertyType.IsClass && !prop.PropertyType.FullName.StartsWith("System"))
                        {
                            WriteClassProperties(prop.PropertyType, outputFolder);
                        }

                        creator.AddProperties(prop.Name, prop.PropertyType);
                    }
                }

                creator.GenerateCSharpCode(pathBuilder + className + ".cs");
            }
        }
All Usage Examples Of SdkGenerator.ClassCreator::AddProperties