using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using HeuristicLab.Common; namespace Types { class Program { private static string path = @"D:\hl\branches\PersistenceOverhaul"; static void Main(string[] args) { InsertStorableTypeGuids(); // foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) // { // Console.WriteLine(asm); // foreach (var type in asm.GetTypes().Where(t => typeof(IEqualityComparer).IsAssignableFrom(t))) // { // Console.WriteLine("RegisterType(new Guid(\"{0}\"), allTypes[\"{2}\"]); ", Guid.NewGuid().ToString().ToUpper(), type.GetPrettyName(), type.FullName); // } // foreach (var type in asm.GetTypes().Where(t => typeof(IEqualityComparer<>).IsAssignableFrom(t))) { // Console.WriteLine("RegisterType(new Guid(\"{0}\"), allTypes[\"{2}\"]); ", Guid.NewGuid().ToString().ToUpper(), type.GetPrettyName(), type.FullName); // } // } } private static void InsertStorableTypeGuids() { var regex = new Regex(@"(public\s+interface|private\s+interface|protected\s+interface|internal\s+interface|public\s+enum|private\s+enum|protected\s+enum|internal\s+enum)"); foreach (var file in Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories)) { if (file.Contains("HeuristicLab.ExtLibs")) continue; if (file.Contains(".Views")) continue; if (file.Contains("HeuristicLab.MainForm")) continue; if (file.Contains("HeuristicLab.DataPreprocessing")) continue; //Console.WriteLine(file); Encoding encoding = Encoding.ASCII; using (StreamReader reader = new StreamReader(file, encoding, true)) { reader.Peek(); // you need this! encoding = reader.CurrentEncoding; } var lines = File.ReadAllLines(file, encoding).ToList(); using (var stream = new FileStream(file, FileMode.Create)) { using (var writer = new StreamWriter(stream, encoding)) { for (int i = 0; i < lines.Count; i++) { var match = regex.Match(lines[i]); var idx = match.Index; if (match.Success) { writer.WriteLine(string.Join("", Enumerable.Repeat(" ", idx)) + "[HeuristicLab.Persistence.Default.CompositeSerializers.Storable.StorableType(\"{0}\")]", Guid.NewGuid().ToString().ToUpper()); } else if (lines[i].IndexOf("interface") >= 0 || lines[i].IndexOf("enum") >= 0) // write lines which contain 'interface' or 'enum' but are not matched by the regex { Console.WriteLine(lines[i]); } writer.WriteLine(lines[i]); } writer.Flush(); stream.Flush(); } } } } } }