using System; using System.Collections.Generic; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace LLVM.ClangTidy { public class ClangTidyProperties : DynamicPropertyComponent { private static ClangTidyProperties RootProperties_ = null; private CheckTree CheckTree_; private bool HasUnsavedChanges_ = false; public struct CheckMapping { public string CheckName; public string Property; } public ClangTidyProperties() : base(null) { AddClangCheckProperties(); CheckTree_ = CheckTree.Build(this); } public ClangTidyProperties(DynamicPropertyComponent Parent) : base(Parent) { AddClangCheckProperties(); CheckTree_ = CheckTree.Build(this); } static ClangTidyProperties() { RootProperties_ = new ClangTidyProperties(null); } public static ClangTidyProperties RootProperties { get { return RootProperties_; } } private void AddClangCheckProperties() { // Add each check in the check database HashSet Categories = new HashSet(); foreach (var Check in CheckDatabase.Checks) { string Name = Check.Name.Replace('-', '_'); List Attrs = new List(); Attrs.Add(new CategoryAttribute(Check.Category)); Attrs.Add(new DisplayNameAttribute(Check.Label)); Attrs.Add(new DefaultValueAttribute(true)); Attrs.Add(new DescriptionAttribute(Check.Desc)); Attrs.Add(new ClangTidyCheckAttribute(Check.Name)); Categories.Add(Check.Category); AddDynamicProperty(Check.Name, Attrs.ToArray()); } // Add a category verb for each unique category. foreach (string Cat in Categories) { List Attrs = new List(); Attrs.Add(new CategoryAttribute(Cat)); Attrs.Add(new DisplayNameAttribute("(Category Verbs)")); Attrs.Add(new TypeConverterAttribute(typeof(CategoryVerbConverter))); Attrs.Add(new DefaultValueAttribute(CategoryVerb.None)); AddDynamicProperty(Cat + "Verb", Attrs.ToArray()); } } public CheckTree GetCheckTree() { return CheckTree_; } public bool GetHasUnsavedChanges() { return HasUnsavedChanges_; } public void SetHasUnsavedChanges(bool Value) { HasUnsavedChanges_ = Value; } } }