Unofficial CardLife revival project, pronounced like "celery"
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

118 lignes
4.1KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. namespace CLre_server.Fixes
  7. {
  8. [AttributeUsage(AttributeTargets.Class)]
  9. public class BugfixAttribute : Attribute
  10. {
  11. public string name { get; set; }
  12. public string description { get; set; }
  13. public Type target { get; set; }
  14. public string more { get; set; }
  15. public uint id { get; set; }
  16. public BugfixType component { get; set; }
  17. }
  18. public enum BugfixType : byte
  19. {
  20. Miscellaneous = 0x00,
  21. HarmonyPatch,
  22. Initialiser,
  23. Workaround,
  24. API,
  25. Debug
  26. }
  27. internal static class BugfixAttributeUtility
  28. {
  29. public static void LogBugfixes()
  30. {
  31. List<uint> keys = new List<uint>();
  32. Dictionary<uint, BugfixStruct> fixes = new Dictionary<uint, BugfixStruct>();
  33. foreach (Type t in Assembly.GetExecutingAssembly().GetTypes())
  34. {
  35. BugfixAttribute b = t.GetCustomAttribute<BugfixAttribute>(true);
  36. if (b != null)
  37. {
  38. if (!fixes.ContainsKey(b.id))
  39. {
  40. BugfixStruct bugfixStruct = new BugfixStruct{id = b.id};
  41. bugfixStruct.Merge(b);
  42. fixes[b.id] = bugfixStruct;
  43. keys.Add(b.id);
  44. }
  45. else
  46. {
  47. BugfixStruct bugfixStruct = fixes[b.id];
  48. bugfixStruct.Merge(b);
  49. fixes[b.id] = bugfixStruct;
  50. }
  51. }
  52. }
  53. keys.Sort();
  54. //keys.Sort((u, u1) => u.CompareTo(u1));
  55. StringBuilder sb = new StringBuilder();
  56. sb.AppendFormat("Applying {0} CLre fixes\n", keys.Count);
  57. sb.AppendFormat("-----------------------------\n");
  58. foreach (uint i in keys)
  59. {
  60. sb.Append(fixes[i].ToString());
  61. sb.Append("\n");
  62. }
  63. sb.AppendFormat("-----------------------------\n");
  64. API.Utility.Logging.Log(sb.ToString());
  65. }
  66. private struct BugfixStruct
  67. {
  68. public string name;
  69. public string description;
  70. public Type target;
  71. public string more;
  72. public uint id;
  73. private uint total;
  74. private uint[] bugfixTypeCount;
  75. public void Merge(BugfixAttribute b)
  76. {
  77. if (name == null && b.name != null) name = b.name;
  78. if (description == null && b.description != null) description = b.description;
  79. if (target == null && b.target != null) target = b.target;
  80. if (more == null && b.more != null) more = b.more;
  81. total++;
  82. if (bugfixTypeCount == null) bugfixTypeCount = new uint[Enum.GetNames(typeof(BugfixType)).Length];
  83. bugfixTypeCount[(byte) b.component]++;
  84. }
  85. public override string ToString()
  86. {
  87. StringBuilder sb = new StringBuilder();
  88. sb.AppendFormat(" {0}: ", name);
  89. if (more != null)
  90. {
  91. sb.AppendFormat("[MORE: {0}] ", more);
  92. }
  93. else if (description != null)
  94. {
  95. sb.Append(description);
  96. sb.Append(" ");
  97. }
  98. if (target != null)
  99. {
  100. sb.AppendFormat("[TARGET: {0}] ", target.FullName);
  101. }
  102. sb.AppendFormat("[ID: {0}] ", id);
  103. sb.AppendFormat("({0}M/{1}P/{2}I/{3}W/{4}A/{5}D/{6}T)",
  104. bugfixTypeCount[(byte) BugfixType.Miscellaneous], bugfixTypeCount[(byte) BugfixType.HarmonyPatch],
  105. bugfixTypeCount[(byte) BugfixType.Initialiser], bugfixTypeCount[(byte) BugfixType.Workaround],
  106. bugfixTypeCount[(byte) BugfixType.API], bugfixTypeCount[(byte) BugfixType.Debug], total);
  107. return sb.ToString();
  108. }
  109. }
  110. }
  111. }