Skip to content

Commit

Permalink
VSMEF001 analysis should include generated code (#345)
Browse files Browse the repository at this point in the history
  • Loading branch information
Youssef1313 authored Nov 7, 2022
1 parent 1be9969 commit f2baa1e
Showing 1 changed file with 10 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,25 +40,25 @@ public class VSMEF001PropertyMustHaveSetter : DiagnosticAnalyzer
public override void Initialize(AnalysisContext context)
{
context.EnableConcurrentExecution();
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.ReportDiagnostics);
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics);

context.RegisterCompilationStartAction(compilationContext =>
context.RegisterCompilationStartAction(context =>
{
// Only scan further if the compilation references the assemblies that define the attributes we'll be looking for.
if (compilationContext.Compilation.ReferencedAssemblyNames.Any(i => string.Equals(i.Name, "System.ComponentModel.Composition", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "System.Composition.AttributedModel", StringComparison.OrdinalIgnoreCase)))
if (context.Compilation.ReferencedAssemblyNames.Any(i => string.Equals(i.Name, "System.ComponentModel.Composition", StringComparison.OrdinalIgnoreCase) || string.Equals(i.Name, "System.Composition.AttributedModel", StringComparison.OrdinalIgnoreCase)))
{
INamedTypeSymbol? mefV1ImportAttribute = compilationContext.Compilation.GetTypeByMetadataName("System.ComponentModel.Composition.ImportAttribute");
INamedTypeSymbol? mefV2ImportAttribute = compilationContext.Compilation.GetTypeByMetadataName("System.Composition.ImportAttribute");
compilationContext.RegisterSymbolAction(
symbolContext => this.AnalyzePropertyDeclaration(symbolContext, mefV1ImportAttribute, mefV2ImportAttribute),
INamedTypeSymbol? mefV1ImportAttribute = context.Compilation.GetTypeByMetadataName("System.ComponentModel.Composition.ImportAttribute");
INamedTypeSymbol? mefV2ImportAttribute = context.Compilation.GetTypeByMetadataName("System.Composition.ImportAttribute");
context.RegisterSymbolAction(
context => AnalyzePropertyDeclaration(context, mefV1ImportAttribute, mefV2ImportAttribute),
SymbolKind.Property);
}
});
}

private void AnalyzePropertyDeclaration(SymbolAnalysisContext symbolContext, INamedTypeSymbol mefV1ImportAttribute, INamedTypeSymbol mefV2ImportAttribute)
private static void AnalyzePropertyDeclaration(SymbolAnalysisContext context, INamedTypeSymbol mefV1ImportAttribute, INamedTypeSymbol mefV2ImportAttribute)
{
var property = (IPropertySymbol)symbolContext.Symbol;
var property = (IPropertySymbol)context.Symbol;

// If this property defines a setter, they aren't a candidate for a diagnostic.
if (property.SetMethod is object)
Expand All @@ -79,7 +79,7 @@ private void AnalyzePropertyDeclaration(SymbolAnalysisContext symbolContext, INa
if (Equals(attributeData.AttributeClass, mefV1ImportAttribute) ||
Equals(attributeData.AttributeClass, mefV2ImportAttribute))
{
symbolContext.ReportDiagnostic(Diagnostic.Create(Descriptor, location));
context.ReportDiagnostic(Diagnostic.Create(Descriptor, location));
}
}
}
Expand Down

0 comments on commit f2baa1e

Please sign in to comment.