diff --git a/src/SourceGenerator.Foundations/Templates/AssemblyResolver.cs b/src/SourceGenerator.Foundations/Templates/AssemblyResolver.cs index 427dfe7..4c570a9 100644 --- a/src/SourceGenerator.Foundations/Templates/AssemblyResolver.cs +++ b/src/SourceGenerator.Foundations/Templates/AssemblyResolver.cs @@ -21,9 +21,22 @@ namespace {{@namespace}} /// internal class AssemblyNameComparer : IEqualityComparer { - public bool Equals(AssemblyName x, AssemblyName y) + public bool Equals(AssemblyName? x, AssemblyName? y) { - return string.Equals(GetName(x), GetName(y)); + bool isLhsNull = ReferenceEquals(x, null); + bool isRhsNull = ReferenceEquals(y, null); + + if(isLhsNull && isRhsNull) + { + return true; + } + + if(isLhsNull != isRhsNull) + { + return false; + } + + return string.Equals(GetName(x!), GetName(y!)); } public int GetHashCode(AssemblyName obj) diff --git a/src/SourceGenerator.Foundations/Templates/SourceGeneratorHoistBase.cs b/src/SourceGenerator.Foundations/Templates/SourceGeneratorHoistBase.cs index cd985fa..dbfad9d 100644 --- a/src/SourceGenerator.Foundations/Templates/SourceGeneratorHoistBase.cs +++ b/src/SourceGenerator.Foundations/Templates/SourceGeneratorHoistBase.cs @@ -81,7 +81,7 @@ internal static void Initialize() /// /// THe thing that raised the event /// The parameters - private static void OnAssemblyLoaded(object sender, AssemblyLoadEventArgs args) + private static void OnAssemblyLoaded(object? sender, AssemblyLoadEventArgs args) { AddAssembly(args.LoadedAssembly); } @@ -121,11 +121,11 @@ private static void AddAssembly(Assembly assembly) /// Attempts to resolve any assembly by looking for dependencies that are embedded directly /// in this dll. /// - private static Assembly? ResolveMissingAssembly(object sender, ResolveEventArgs args) + private static Assembly? ResolveMissingAssembly(object? sender, ResolveEventArgs args) { AssemblyName assemblyName = new(args.Name); - if (s_loadedAssemblies.TryGetValue(assemblyName, out Assembly assembly)) + if (s_loadedAssemblies.TryGetValue(assemblyName, out Assembly? assembly)) { return assembly; } @@ -160,8 +160,8 @@ private static bool TryExtractingAssembly(Assembly assembly, string resourceName { #pragma warning disable RS1035 // Do not use APIs banned for analyzers loadedAssembly = TryGetResourceBytes(assembly, Path.ChangeExtension(resourceName, ".pdb"), out byte[]? symbolBytes) - ? Assembly.Load(assemblyBytes, symbolBytes) - : Assembly.Load(assemblyBytes); + ? Assembly.Load(assemblyBytes!, symbolBytes!) + : Assembly.Load(assemblyBytes!); #pragma warning restore RS1035 // Do not use APIs banned for analyzers return true; } @@ -181,14 +181,19 @@ private static bool TryExtractingAssembly(Assembly assembly, string resourceName private static bool TryGetResourceBytes(Assembly assembly, string resourceName, out byte[]? bytes) { bytes = null; - ManifestResourceInfo resourceInfo = assembly.GetManifestResourceInfo(resourceName); + ManifestResourceInfo? resourceInfo = assembly.GetManifestResourceInfo(resourceName); if (resourceInfo == null) { return false; } - using (Stream stream = assembly.GetManifestResourceStream(resourceName)) + using (Stream? stream = assembly.GetManifestResourceStream(resourceName)) { + if(stream == null) + { + return false; + } + bytes = new byte[stream.Length]; _ = stream.Read(bytes, 0, bytes.Length); }