Ejemplo n.º 1
0
        private static ImmutableArray <AnalyzerReference> CreateAnalyzerReferencesFromPackages(
            ImmutableArray <HostDiagnosticAnalyzerPackage> analyzerPackages,
            HostAnalyzerReferenceDiagnosticReporter reporter,
            IAnalyzerAssemblyLoader?hostAnalyzerAssemblyLoader)
        {
            if (analyzerPackages.IsEmpty)
            {
                return(ImmutableArray <AnalyzerReference> .Empty);
            }

            Contract.ThrowIfNull(hostAnalyzerAssemblyLoader);

            var analyzerAssemblies = analyzerPackages.SelectMany(p => p.Assemblies);

            var builder = ImmutableArray.CreateBuilder <AnalyzerReference>();

            foreach (var analyzerAssembly in analyzerAssemblies.Distinct(StringComparer.OrdinalIgnoreCase))
            {
                var reference = new AnalyzerFileReference(analyzerAssembly, hostAnalyzerAssemblyLoader);
                reference.AnalyzerLoadFailed += reporter.OnAnalyzerLoadFailed;

                builder.Add(reference);
            }

            var references = builder.ToImmutable();

            DiagnosticAnalyzerLogger.LogWorkspaceAnalyzers(references);

            return(references);
        }
Ejemplo n.º 2
0
 protected DiagnosticAnalyzerService(
     Lazy <ImmutableArray <HostDiagnosticAnalyzerPackage> > workspaceAnalyzerPackages,
     IAnalyzerAssemblyLoader?hostAnalyzerAssemblyLoader,
     AbstractHostDiagnosticUpdateSource?hostDiagnosticUpdateSource,
     PrimaryWorkspace primaryWorkspace,
     IDiagnosticUpdateSourceRegistrationService registrationService,
     IAsynchronousOperationListener?listener = null)
     : this(new DiagnosticAnalyzerInfoCache(workspaceAnalyzerPackages, hostAnalyzerAssemblyLoader, hostDiagnosticUpdateSource, primaryWorkspace),
            hostDiagnosticUpdateSource,
            registrationService,
            listener)
 {
 }
Ejemplo n.º 3
0
 public DiagnosticAnalyzerInfoCache(Lazy <ImmutableArray <HostDiagnosticAnalyzerPackage> > hostAnalyzerPackages, IAnalyzerAssemblyLoader?hostAnalyzerAssemblyLoader, AbstractHostDiagnosticUpdateSource?hostDiagnosticUpdateSource, PrimaryWorkspace primaryWorkspace)
     : this(new Lazy <ImmutableArray <AnalyzerReference> >(() => CreateAnalyzerReferencesFromPackages(hostAnalyzerPackages.Value, new HostAnalyzerReferenceDiagnosticReporter(hostDiagnosticUpdateSource, primaryWorkspace), hostAnalyzerAssemblyLoader), isThreadSafe : true),
            hostAnalyzerPackages, hostDiagnosticUpdateSource)
 {
 }