| File: ApiLifecycle\ModelLoader.cs | Web Access |
| Project: src\src\Analyzers\Microsoft.Analyzers.Local\Microsoft.Analyzers.Local.csproj (Microsoft.Analyzers.Local) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.IO; using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.Extensions.LocalAnalyzers.ApiLifecycle.Model; using Microsoft.Extensions.LocalAnalyzers.Json; namespace Microsoft.Extensions.LocalAnalyzers.ApiLifecycle; internal static class ModelLoader { #pragma warning disable RS1012 // Start action has no registered actions internal static bool TryLoadAssemblyModel(CompilationStartAnalysisContext context, out Assembly? assembly) #pragma warning restore RS1012 // Start action has no registered actions { assembly = null; var files = context.Options.AdditionalFiles; var compilation = context.Compilation; var assemblyName = compilation.AssemblyName!; var assemblyBaselineFile = files.FirstOrDefault(file => { var filePath = file.Path; var fileName = Path.GetFileNameWithoutExtension(filePath); var fileExtension = Path.GetExtension(filePath); if (assemblyName.EndsWith(fileName, StringComparison.OrdinalIgnoreCase) && string.Equals(fileExtension, ".json", StringComparison.OrdinalIgnoreCase)) { return true; } return false; }); if (assemblyBaselineFile == null) { return false; } var publicInterface = string.Empty; try { publicInterface = assemblyBaselineFile.GetText()?.ToString(); } catch (FileNotFoundException) { return false; } if (string.IsNullOrWhiteSpace(publicInterface)) { return false; } #pragma warning disable CA1031 // Do not catch general exception types try { using var reader = new StringReader(publicInterface); var value = JsonReader.Parse(reader); assembly = new Assembly(value.AsJsonObject!); if (!assembly.Name.Contains(assemblyName)) { return false; } } catch (Exception) { // failed to deserialize. return false; } #pragma warning restore CA1031 // Do not catch general exception types return true; } }