From f9ef1082875a58683091521a3e6bd7c321cfb53a Mon Sep 17 00:00:00 2001 From: Pira Date: Mon, 20 Sep 2021 13:14:15 -0400 Subject: [PATCH 1/4] Update .gitignore with JetBrains stuff --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index acd779de..65124f08 100644 --- a/.gitignore +++ b/.gitignore @@ -36,3 +36,6 @@ Makefile.in /configure /install-sh /missing + +#Jetbrains stuff +.idea/ \ No newline at end of file From 11585be4b5d8a83dfbb966c1a6b7d9ecc781f866 Mon Sep 17 00:00:00 2001 From: Pira Date: Mon, 20 Sep 2021 13:14:37 -0400 Subject: [PATCH 2/4] Update Mono.Addins Target NET Framework to V3 --- Mono.Addins/Mono.Addins.csproj | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Mono.Addins/Mono.Addins.csproj b/Mono.Addins/Mono.Addins.csproj index 025be72e..d2052da9 100644 --- a/Mono.Addins/Mono.Addins.csproj +++ b/Mono.Addins/Mono.Addins.csproj @@ -16,6 +16,7 @@ 8.0.30703 2.0 true + v3.0 True @@ -46,6 +47,7 @@ + From 1a7284570653df4f85156159304a96be1d4813c9 Mon Sep 17 00:00:00 2001 From: Pira Date: Mon, 20 Sep 2021 13:15:56 -0400 Subject: [PATCH 3/4] Update Mono.Addins Project for .NET 3 Compatibility - This includes updating HashSets to Lists, removing unused methods, etc --- .../Mono.Addins.Database/AddinDatabase.cs | 29 ++++++++------- .../AddinFileSystemExtension.cs | 4 +-- .../AddinFolderVisitor.cs | 4 +-- .../Mono.Addins.Database/AddinScanResult.cs | 5 +-- .../Mono.Addins.Database/AddinScanner.cs | 12 +++---- Mono.Addins/Mono.Addins.Database/Util.cs | 13 +++++-- .../AddinDescription.cs | 12 +++++-- Mono.Addins/Mono.Addins/AddinEngine.cs | 2 +- Mono.Addins/Mono.Addins/AddinManager.cs | 2 +- Mono.Addins/Mono.Addins/AddinRegistry.cs | 2 +- Mono.Addins/Mono.Addins/RuntimeAddin.cs | 36 +------------------ 11 files changed, 50 insertions(+), 71 deletions(-) diff --git a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs index 714f2431..d7e6e0ba 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs @@ -551,15 +551,15 @@ public void DisableAddin (string domain, string id, bool exactVersionMatch = fal public void UpdateEnabledStatus () { // Ensure that all enabled addins that have dependencies also have their dependencies enabled. - HashSet updatedAddins = new HashSet (); + List updatedAddins = new List (); var allAddins = GetInstalledAddins (registry.CurrentDomain, AddinSearchFlagsInternal.IncludeAddins | AddinSearchFlagsInternal.LatestVersionsOnly).ToList (); foreach (Addin addin in allAddins) UpdateEnabledStatus (registry.CurrentDomain, addin, allAddins, updatedAddins); } - void UpdateEnabledStatus (string domain, Addin addin, List allAddins, HashSet updatedAddins) + void UpdateEnabledStatus (string domain, Addin addin, List allAddins, List updatedAddins) { - if (!updatedAddins.Add (addin)) + if (updatedAddins.Contains (addin)) return; if (!addin.Enabled) @@ -1027,21 +1027,21 @@ internal void ResetCachedData () addinEngine.ResetCachedData (); } - Dictionary> dependsOnCache = new Dictionary> (); + Dictionary> dependsOnCache = new Dictionary> (); public bool AddinDependsOn (string domain, string id1, string id2) { var depTree = GetOrCreateAddInDependencyTree (domain, id1); return depTree.Contains (id2); } - HashSet GetOrCreateAddInDependencyTree (string domain, string addin) + List GetOrCreateAddInDependencyTree (string domain, string addin) { - HashSet cache; + List cache; if (dependsOnCache.TryGetValue (addin, out cache)) { return cache; - } + } - dependsOnCache [addin] = cache = new HashSet (); + dependsOnCache [addin] = cache = new List (); Addin addin1 = GetInstalledAddin (domain, addin, false); @@ -1058,7 +1058,7 @@ HashSet GetOrCreateAddInDependencyTree (string domain, string addin) cache.Add (depid); var recursiveDependencies = GetOrCreateAddInDependencyTree (domain, depid); - cache.UnionWith (recursiveDependencies); + return cache.Union(recursiveDependencies).Distinct().ToList(); } return cache; } @@ -1165,8 +1165,7 @@ void RunPendingUninstalls (IProgressStatus monitor) bool changesDone = false; foreach (var adn in Configuration.GetPendingUninstalls ()) { - HashSet files = new HashSet (adn.Files); - if (AddinManager.CheckAssembliesLoaded (files)) + if (AddinManager.CheckAssembliesLoaded (adn.Files)) continue; if (monitor.LogLevel > 1) @@ -1381,7 +1380,7 @@ void InternalScanFolders2 (IProgressStatus monitor, AddinScanResult scanResult) // Check if any of the previously scanned folders has been deleted - foreach (string file in Directory.EnumerateFiles (AddinFolderCachePath, "*.data")) { + foreach (string file in Directory.GetFiles (AddinFolderCachePath, "*.data")) { AddinScanFolderInfo folderInfo; bool res = ReadFolderInfo (monitor, file, out folderInfo); bool validForDomain = scanResult.Domain == null || folderInfo.Domain == GlobalDomain || folderInfo.Domain == scanResult.Domain; @@ -1946,7 +1945,7 @@ public string FindCondition (AddinDescription desc, ModuleDescription mod, strin public List GetSortedAddins () { - var inserted = new HashSet (); + var inserted = new List (); var lists = new Dictionary> (); foreach (List dlist in addins.Values) { @@ -1970,10 +1969,10 @@ public List GetSortedAddins () return sortedAddins; } - void InsertSortedAddin (HashSet inserted, Dictionary> lists, AddinDescription desc) + void InsertSortedAddin (List inserted, Dictionary> lists, AddinDescription desc) { string sid = desc.AddinId + " " + desc.Domain; - if (!inserted.Add (sid)) + if (inserted.Contains (sid)) return; foreach (ModuleDescription mod in desc.AllModules) { diff --git a/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs b/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs index 6c812c4a..1dc6acad 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinFileSystemExtension.cs @@ -94,7 +94,7 @@ public virtual bool FileExists (string path) /// public virtual System.Collections.Generic.IEnumerable GetFiles (string path) { - return Directory.EnumerateFiles (path); + return Directory.GetFiles (path); } /// @@ -108,7 +108,7 @@ public virtual System.Collections.Generic.IEnumerable GetFiles (string p /// public virtual System.Collections.Generic.IEnumerable GetDirectories (string path) { - return Directory.EnumerateDirectories (path); + return Directory.GetDirectories (path); } /// diff --git a/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs b/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs index 05fb3970..838ad635 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs @@ -35,7 +35,7 @@ namespace Mono.Addins.Database class AddinFolderVisitor { AddinDatabase database; - HashSet visitedFolders = new HashSet (); + List visitedFolders = new List (); public ScanContext ScanContext { get; set; } = new ScanContext(); @@ -56,7 +56,7 @@ public void VisitFolder (IProgressStatus monitor, string path, string domain, bo void VisitFolderInternal (IProgressStatus monitor, string path, string domain, bool recursive) { // Avoid folders including each other - if (!visitedFolders.Add (path) || ScanContext.IgnorePath (path)) + if (visitedFolders.Contains (path) || ScanContext.IgnorePath (path)) return; OnVisitFolder (monitor, path, domain, recursive); diff --git a/Mono.Addins/Mono.Addins.Database/AddinScanResult.cs b/Mono.Addins/Mono.Addins.Database/AddinScanResult.cs index 85b02e22..6a1b15a5 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinScanResult.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinScanResult.cs @@ -124,13 +124,14 @@ class FileToScan class ScanContext { - HashSet filesToIgnore; + List filesToIgnore; public void AddPathToIgnore (string path) { if (filesToIgnore == null) - filesToIgnore = new HashSet (); + filesToIgnore = new List (); filesToIgnore.Add (path); + filesToIgnore = filesToIgnore.Distinct().ToList(); } public bool IgnorePath (string file) diff --git a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs index 360850d7..effedb0e 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinScanner.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinScanner.cs @@ -512,14 +512,14 @@ bool ScanDescription (IProgressStatus monitor, IAssemblyReflector reflector, Add if (!config.IsRoot) { foreach (ModuleDescription mod in config.OptionalModules) { try { - var asmList = new List> (); + var asmList = new List (); for (int n=0; n (asmFile,asm)); + asmList.Add(new[] {asmFile, asm}); scanContext.AddPathToIgnore (Path.GetFullPath (asmFile)); ScanAssemblyImports (reflector, mod, asm); } @@ -535,7 +535,7 @@ bool ScanDescription (IProgressStatus monitor, IAssemblyReflector reflector, Add } foreach (var asm in asmList) - ScanSubmodule (monitor, mod, reflector, config, asm.Item1, asm.Item2); + ScanSubmodule (monitor, mod, reflector, config, (string)asm[0], asm[1]); } catch (Exception ex) { ReportReflectionException (monitor, ex, config); @@ -781,7 +781,7 @@ void ScanAssemblyContents (IAssemblyReflector reflector, AddinDescription config //condition attributes apply independently but identically to all extension attributes on this node //depending on ordering is too messy due to inheritance etc - var conditionAtts = new Lazy> (() => reflector.GetRawCustomAttributes (t, typeof (CustomConditionAttribute), false)); + var conditionAtts = reflector.GetRawCustomAttributes (t, typeof (CustomConditionAttribute), false); // Look for extensions @@ -807,7 +807,7 @@ void ScanAssemblyContents (IAssemblyReflector reflector, AddinDescription config path = eatt.Path; } - ExtensionNodeDescription elem = AddConditionedExtensionNode (module, path, nodeName, conditionAtts.Value); + ExtensionNodeDescription elem = AddConditionedExtensionNode (module, path, nodeName, conditionAtts); nodes [path] = elem; uniqueNode = elem; @@ -873,7 +873,7 @@ void ScanAssemblyContents (IAssemblyReflector reflector, AddinDescription config else { // Look for custom extension attribtues foreach (CustomAttribute att in reflector.GetRawCustomAttributes (t, typeof(CustomExtensionAttribute), false)) { - ExtensionNodeDescription elem = AddCustomAttributeExtension (module, att, "Type", conditionAtts.Value); + ExtensionNodeDescription elem = AddCustomAttributeExtension (module, att, "Type", conditionAtts); elem.SetAttribute ("type", typeQualifiedName); if (string.IsNullOrEmpty (elem.GetAttribute ("id"))) elem.SetAttribute ("id", typeQualifiedName); diff --git a/Mono.Addins/Mono.Addins.Database/Util.cs b/Mono.Addins/Mono.Addins.Database/Util.cs index 04890cc0..3fbe2d3d 100644 --- a/Mono.Addins/Mono.Addins.Database/Util.cs +++ b/Mono.Addins/Mono.Addins.Database/Util.cs @@ -220,15 +220,22 @@ public static string GetGacPath (string fullName) foreach (var dir in Directory.GetDirectories (asmDir, "v*_" + versionDirName)) { var dirName = Path.GetFileName (dir); i = dirName.IndexOf ('_'); - Version av; - if (Version.TryParse (dirName.Substring (1, i - 1), out av)) { + + try + { + Version av = new Version(dirName.Substring(1, i - 1)); if (av == currentVersion) return dir; - else if (av < currentVersion && av > bestVersion) { + + if (av < currentVersion && av > bestVersion) { bestDir = dir; bestVersion = av; } } + catch + { + + } } if (bestDir != null) return bestDir; diff --git a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs index c5275741..fcbeb83c 100644 --- a/Mono.Addins/Mono.Addins.Description/AddinDescription.cs +++ b/Mono.Addins/Mono.Addins.Description/AddinDescription.cs @@ -1272,10 +1272,16 @@ internal StringCollection Verify (AddinFileSystemExtension fs) // Ensure that there are no duplicated properties if (properties != null) { - HashSet props = new HashSet (); - foreach (var prop in properties) { - if (!props.Add (prop.Name + " " + prop.Locale)) + List props = new List (); + foreach (var prop in properties) + { + var stringToCheck = prop.Name + " " + prop.Locale; + if (props.Contains(stringToCheck)) + { errors.Add (string.Format ("Property {0} specified more than once", prop.Name + (prop.Locale != null ? " (" + prop.Locale + ")" : ""))); + props.Add(stringToCheck); + } + } } diff --git a/Mono.Addins/Mono.Addins/AddinEngine.cs b/Mono.Addins/Mono.Addins/AddinEngine.cs index d73a4648..fa0edaf1 100755 --- a/Mono.Addins/Mono.Addins/AddinEngine.cs +++ b/Mono.Addins/Mono.Addins/AddinEngine.cs @@ -805,7 +805,7 @@ internal void ActivateRoots () void CheckHostAssembly (Assembly asm) { - if (AddinDatabase.RunningSetupProcess || asm is System.Reflection.Emit.AssemblyBuilder || asm.IsDynamic) + if (AddinDatabase.RunningSetupProcess || asm is System.Reflection.Emit.AssemblyBuilder || asm.ManifestModule is System.Reflection.Emit.ModuleBuilder) return; string codeBase; try { diff --git a/Mono.Addins/Mono.Addins/AddinManager.cs b/Mono.Addins/Mono.Addins/AddinManager.cs index b5bef3fa..da69153c 100644 --- a/Mono.Addins/Mono.Addins/AddinManager.cs +++ b/Mono.Addins/Mono.Addins/AddinManager.cs @@ -828,7 +828,7 @@ public static event AddinEventHandler AddinAssembliesLoaded { remove { AddinEngine.AddinAssembliesLoaded -= value; } } - internal static bool CheckAssembliesLoaded (HashSet files) + internal static bool CheckAssembliesLoaded (List files) { foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies ()) { if (asm is System.Reflection.Emit.AssemblyBuilder) diff --git a/Mono.Addins/Mono.Addins/AddinRegistry.cs b/Mono.Addins/Mono.Addins/AddinRegistry.cs index 0e1ef2a3..f51b4db9 100644 --- a/Mono.Addins/Mono.Addins/AddinRegistry.cs +++ b/Mono.Addins/Mono.Addins/AddinRegistry.cs @@ -760,7 +760,7 @@ internal bool CreateHostAddinsFile (string hostFile) if (!Directory.Exists (database.HostsPath)) Directory.CreateDirectory (database.HostsPath); - foreach (string s in Directory.EnumerateFiles (database.HostsPath, baseName + "*.addins")) { + foreach (string s in Directory.GetFiles (database.HostsPath, baseName + "*.addins")) { try { using (StreamReader sr = new StreamReader (s)) { XmlTextReader tr = new XmlTextReader (sr); diff --git a/Mono.Addins/Mono.Addins/RuntimeAddin.cs b/Mono.Addins/Mono.Addins/RuntimeAddin.cs index 920e55fe..8a68697e 100644 --- a/Mono.Addins/Mono.Addins/RuntimeAddin.cs +++ b/Mono.Addins/Mono.Addins/RuntimeAddin.cs @@ -558,40 +558,6 @@ public Stream GetResource (string resourceName, bool throwIfNotFound) return null; } - /// - /// Returns information about how the given resource has been persisted - /// - /// - /// Name of the resource - /// - /// - /// Resource information, or null if the resource doesn't exist - /// - public ManifestResourceInfo GetResourceInfo (string resourceName) - { - EnsureAssembliesLoaded (); - - // Look in the addin assemblies - - foreach (Assembly asm in GetAllAssemblies ()) { - var res = asm.GetManifestResourceInfo (resourceName); - if (res != null) { - // Mono doesn't set the referenced assembly - if (res.ReferencedAssembly == null) - return new ManifestResourceInfo (asm, res.FileName, res.ResourceLocation); - return res; - } - } - - // Look in the dependent add-ins - foreach (RuntimeAddin addin in GetAllDependencies ()) { - var res = addin.GetResourceInfo (resourceName); - if (res != null) - return res; - } - - return null; - } /// /// Localizer which can be used to localize strings defined in this add-in @@ -696,7 +662,7 @@ void LoadModule (ModuleDescription module) // Sorry, you can't load addins from // dynamic assemblies as get_Location // throws a NotSupportedException - if (a is System.Reflection.Emit.AssemblyBuilder || a.IsDynamic) { + if (a is System.Reflection.Emit.AssemblyBuilder || a.ManifestModule is System.Reflection.Emit.ModuleBuilder) { continue; } From 8d9c864719db0088e5729a29d07f9a00b2dabb36 Mon Sep 17 00:00:00 2001 From: Pira Date: Mon, 20 Sep 2021 14:30:57 -0400 Subject: [PATCH 4/4] Fixed Logic for Some HashSet to List Conversions --- Mono.Addins/Mono.Addins.Database/AddinDatabase.cs | 6 +++++- Mono.Addins/Mono.Addins.Database/AddinFolderVisitor.cs | 7 ++++++- Mono.Addins/Mono.Addins.Description/AddinDescription.cs | 5 ++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs index d7e6e0ba..71545e44 100644 --- a/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs +++ b/Mono.Addins/Mono.Addins.Database/AddinDatabase.cs @@ -559,8 +559,10 @@ public void UpdateEnabledStatus () void UpdateEnabledStatus (string domain, Addin addin, List allAddins, List updatedAddins) { - if (updatedAddins.Contains (addin)) + if (updatedAddins.Contains(addin)) return; + + updatedAddins.Add(addin); if (!addin.Enabled) return; @@ -1975,6 +1977,8 @@ void InsertSortedAddin (List inserted, Dictionary