Example #1
0
        public void Clean(string sourcePath, string outputPath, WcfCleanerOptions options)
        {
            string src = File.ReadAllText(sourcePath).Replace("\r", "");	// Normalize to just \n for newlines

            // 1) Gather any existing using statements, set aside
            int namespaceIndex = src.IndexOf("namespace");
            var usings = src.Substring(0, namespaceIndex);
            var usingNamespaces = new HashSet<string>(RegexHelper.ListGroups(@"using ([^;]+);", usings));

            // 2) Gather namespace, set aside
            var fileNamespace = RegexHelper.FirstGroup(@"namespace ([\w_`\$\.]+)", src, namespaceIndex);

            // 3) Begin class loop
            int index = src.IndexOf('\n', namespaceIndex + 1) + 1;

            var codeSections = parseSections(src, index, usingNamespaces, options);

            // 8) Write out
            using (var text = new FileStreamWriter(outputPath))
            {
                writeFile(text, usingNamespaces, fileNamespace, codeSections, options);
            }
        }
Example #2
0
        protected KeyValuePair<string, CodeBlock> writeProperty(FileStreamWriter text, WcfCleanerOptions options, CodeClass codeClass, KeyValuePair<string, CodeBlock> kv)
        {
            var prop = (CodeProperty)kv.Value;

            if (options.AutoSetSpecified && codeClass.Properties.ContainsKey(kv.Key + "Specified"))
            {
                text.WriteLine("\t\tprotected ", prop.Type, " _", kv.Key, ";")
                    .WriteLine()
                    .WriteLine(prop.Headings)
                    .WriteLine("\t\tpublic ", prop.Type, " ", kv.Key)
                    .WriteLine("\t\t{")
                    .WriteLine("\t\t\tget { return _", kv.Key, "; }")
                    .WriteLine("\t\t\tset {")
                    .WriteLine("\t\t\t\t_", kv.Key, " = value;")
                    .WriteLine("\t\t\t\t", kv.Key, "Specified = true;")
                    .WriteLine("\t\t\t}")
                    .WriteLine("\t\t}");
            }
            else
            {
                text.WriteLine(prop.Headings)
                    .WriteLine("\t\tpublic ", prop.Type, " ", kv.Key, " { get; set; }");
            }
            return kv;
        }
Example #3
0
 protected void writeInterface(FileStreamWriter text, WcfCleanerOptions options, CodeInterface codeInterface)
 {
     text.WriteLine(codeInterface.Headings)
         .WriteLine(codeInterface.Text);
 }
Example #4
0
        protected void writeFile(FileStreamWriter text, HashSet<string> usingNamespaces, string fileNamespace,
            List<CodeSection> codeSections, WcfCleanerOptions options)
        {
            foreach (string usingNamespace in usingNamespaces)
            {
                text.WriteLine("using ", usingNamespace, ";");
            }

            text.WriteLine();

            text.WriteLine("namespace ", fileNamespace)
                .WriteLine("{");

            var codeEnums = codeSections.Where(c => c is CodeEnum).Cast<CodeEnum>();

            codeEnums.FencePostBefore(
                codeEnum =>
                {
                    text.WriteLine();
                },
                codeEnum =>
                {
                    writeEnum(text, options, codeEnum);
                }
            );

            var codeInterfaces = codeSections.Where(c => c is CodeInterface).Cast<CodeInterface>();
            var interfaceAction = new Action<CodeInterface>(codeInterface => writeInterface(text, options, codeInterface));

            if (codeEnums.Count() == 0)
                codeInterfaces.FencePostBefore(c => text.WriteLine(), interfaceAction);
            else
                codeInterfaces.ForEach(interfaceAction);

            var codeClasses = codeSections.Where(c => c is CodeClass).Cast<CodeClass>();
            var classAction = new Action<CodeClass>(codeClass => writeClass(text, options, codeClass));

            if (codeEnums.Count() == 0 && codeInterfaces.Count() == 0)
                codeClasses.FencePostBefore(c => text.WriteLine(), classAction);
            else
                codeClasses.ForEach(classAction);

            text.WriteLine("}");
        }
Example #5
0
 protected void writeEnumValue(FileStreamWriter text, CodeEnumValue enumValue)
 {
     text.WriteLine(enumValue.Headings)
         .WriteLine("\t\t", enumValue.Name, ",");
 }
Example #6
0
        protected void writeEnum(FileStreamWriter text, WcfCleanerOptions options, CodeEnum codeEnum)
        {
            text.WriteLine(codeEnum.Headings)
                .WriteLine("\tpublic enum ", codeEnum.Name)
                .WriteLine("\t{");

            codeEnum.Values.FencePostBefore(
                enumValue =>
                {
                    text.WriteLine();
                },
                enumValue =>
                {
                    writeEnumValue(text, enumValue);
                }
            );

            text.WriteLine("\t}");
        }
Example #7
0
 protected void writeCodeChunk(FileStreamWriter text, string chunk)
 {
     text.WriteLine("\t\t", chunk);
 }
Example #8
0
        protected void writeClass(FileStreamWriter text, WcfCleanerOptions options, CodeClass codeClass)
        {
            text.WriteLine(codeClass.Headings)
                .WriteLine("\tpublic class ", codeClass.Name, " ", codeClass.Inheritance)
                .WriteLine("\t{");

            int written = 0;

            codeClass.Chunks.FencePostBefore(
                chunk =>
                {
                    text.WriteLine();
                },
                chunk =>
                {
                    written++;
                    writeCodeChunk(text, chunk);
                }
            );

            if (written > 0)
            {
                foreach (var kv in codeClass.Properties)
                {
                    text.WriteLine();
                    writeProperty(text, options, codeClass, kv);
                }
            }
            else
            {
                codeClass.Properties.FencePostBefore(
                    kv =>
                    {
                        text.WriteLine();
                    },
                    kv =>
                    {
                        writeProperty(text, options, codeClass, kv);
                    }
                );
            }

            text.WriteLine("\t}");
        }