示例#1
0
        public static void BuildProject(
            string outputDirectory,
            string sourceDirectory,
            string analyzer,
            ProjectKind kind,
            IEnumerable <string> copyFiles,
            IEnumerable <string> renamedFiles,
            string projectName,
            Dictionary <string, IEnumerable <string> > categories,
            Dictionary <string, Dictionary <string, string> > projectGuids,
            IList <CheckData> checks)
        {
            string target = Path.Combine(outputDirectory, "src", analyzer + ".Analyzers", kind.ToString());

            Directory.CreateDirectory(target);

            // Identically named supporting Files
            string source = Path.Combine(sourceDirectory, "src", "REPLACE.ME", kind.ToString());

            foreach (string copiedFile in copyFiles)
            {
                Utilities.CopyFile(source, target, copiedFile);
            }

            // Everybody gets an assemblyInfo, except vb and nuget
            if (kind != ProjectKind.VisualBasic && kind != ProjectKind.NuGet)
            {
                Directory.CreateDirectory(Path.Combine(target, "Properties"));
                Utilities.CopyFile(source, target, @"Properties\AssemblyInfo.cs");
            }

            foreach (string renamedFile in renamedFiles)
            {
                if (renamedFile == "REPLACEMEAnalyzersResources.resx")
                {
                    Debug.Assert(kind == ProjectKind.Core);
                    Debug.Assert(checks != null);
                }
                Utilities.CopyRenamedFile(source, target, renamedFile, analyzer, checks, categories, projectGuids);
            }

            Dictionary <string, string> analyzerGuids;

            if (!projectGuids.TryGetValue(kind.ToString(), out analyzerGuids))
            {
                projectGuids[kind.ToString()] = analyzerGuids = new Dictionary <string, string>();
            }

            analyzerGuids[analyzer] = Utilities.CopyRenamedFile(source, target, projectName, analyzer, checks, categories, projectGuids);
            Utilities.CreateStubFiles(kind, target, analyzer, checks, categories);
        }
示例#2
0
        private static void AddCompileItemsToProjectFile(string projFile, ProjectKind kind, CheckData check)
        {
            XDocument xmlFile = XDocument.Load(projFile);

            Debug.Assert(xmlFile.Root.Name.LocalName == "Project");

            var first = xmlFile.Root.Descendants().Where(c => c.Name.LocalName == "Compile").First();

            var      parent = first.Parent;
            XElement elem   = null;

            switch (kind)
            {
            case ProjectKind.Core:
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerFileName(check));
                parent.Add(elem);
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixFileName(check));
                parent.Add(elem);
                break;

            case ProjectKind.CSharp:
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpAnalyzerFileName(check));
                parent.Add(elem);
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpCodeFixFileName(check));
                parent.Add(elem);
                break;

            case ProjectKind.VisualBasic:
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicAnalyzerFileName(check));
                parent.Add(elem);
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicCodeFixFileName(check));
                parent.Add(elem);
                break;

            case ProjectKind.UnitTests:
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerTestsFileName(check));
                parent.Add(elem);
                elem = new XElement(first);
                elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixTestsFileName(check));
                parent.Add(elem);
                break;

            default:
                throw new ArgumentException(kind.ToString());
            }
            xmlFile.Save(projFile);
            return;
        }
示例#3
0
        public static void BuildProject(
            string outputDirectory,
            string sourceDirectory,
            string analyzer, 
            ProjectKind kind, 
            IEnumerable<string> copyFiles, 
            IEnumerable<string> renamedFiles, 
            string projectName,
            Dictionary<string, IEnumerable<string>> categories,
            Dictionary<string, Dictionary<string, string>> projectGuids,
            IList<CheckData> checks)
        {
            string target = Path.Combine(outputDirectory, "src", analyzer + ".Analyzers", kind.ToString());
            Directory.CreateDirectory(target);

            // Identically named supporting Files
            string source = Path.Combine(sourceDirectory, "src", "REPLACE.ME", kind.ToString());

            foreach (string copiedFile in copyFiles)
            {
                Utilities.CopyFile(source, target, copiedFile);
            }

            // Everybody gets an assemblyInfo, except vb and nuget
            if (kind != ProjectKind.VisualBasic && kind != ProjectKind.NuGet)
            {
                Directory.CreateDirectory(Path.Combine(target, "Properties"));
                Utilities.CopyFile(source, target, @"Properties\AssemblyInfo.cs");
            }

            foreach (string renamedFile in renamedFiles)
            {
                if (renamedFile == "REPLACEMEAnalyzersResources.resx")
                {
                    Debug.Assert(kind == ProjectKind.Core);
                    Debug.Assert(checks != null);
                }
                Utilities.CopyRenamedFile(source, target, renamedFile, analyzer, checks, categories, projectGuids);
            }

            Dictionary<string, string> analyzerGuids;

            if (!projectGuids.TryGetValue(kind.ToString(), out analyzerGuids))
            {
                projectGuids[kind.ToString()] = analyzerGuids = new Dictionary<string, string>();
            }

            analyzerGuids[analyzer] = Utilities.CopyRenamedFile(source, target, projectName, analyzer, checks, categories, projectGuids);
            Utilities.CreateStubFiles(kind, target, analyzer, checks, categories);
        }
        private static void AddCompileItemsToProjectFile(string projFile, ProjectKind kind, CheckData check)
        {
            XDocument xmlFile = XDocument.Load(projFile);
            Debug.Assert(xmlFile.Root.Name.LocalName == "Project");

            var first = xmlFile.Root.Descendants().Where(c => c.Name.LocalName == "Compile").First();

            var parent = first.Parent;
            XElement elem = null;
            switch (kind)
            {
                case ProjectKind.Core:
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerFileName(check));
                    parent.Add(elem);
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixFileName(check));
                    parent.Add(elem);
                    break;
                case ProjectKind.CSharp:
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpAnalyzerFileName(check));
                    parent.Add(elem);
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateCSharpCodeFixFileName(check));
                    parent.Add(elem);
                    break;
                case ProjectKind.VisualBasic:
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicAnalyzerFileName(check));
                    parent.Add(elem);
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateBasicCodeFixFileName(check));
                    parent.Add(elem);
                    break;
                case ProjectKind.UnitTests:
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateAnalyzerTestsFileName(check));
                    parent.Add(elem);
                    elem = new XElement(first);
                    elem.SetAttributeValue("Include", CodeTemplates.GenerateCodeFixTestsFileName(check));
                    parent.Add(elem);
                    break;
                default:
                    throw new ArgumentException(kind.ToString());
            }
            xmlFile.Save(projFile);
            return;
        }