public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.RegisterCompilationStartAction(ctx => { var massTransitCtx = new MassTransitContext(ctx.Compilation); if (ContextDefined(massTransitCtx)) { AnalyzeCompilation(ctx, massTransitCtx); } }); }
protected virtual bool ContextDefined(MassTransitContext massTransitCtx) => massTransitCtx.Version != null;
protected abstract void AnalyzeCompilation(CompilationStartAnalysisContext ctx, MassTransitContext massTransitCtx);
protected override void AnalyzeCompilation(CompilationStartAnalysisContext ctx, MassTransitContext massTransitCtx) { ctx.RegisterSyntaxNodeAction(context => { var none = (InvocationExpressionSyntax)context.Node; var symbol = context.SemanticModel.GetSymbolInfo(none); if (symbol.Symbol?.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)symbol.Symbol; if (onMethods.Contains($"{methodSymbol.ContainingNamespace}.{methodSymbol.ContainingType.Name}.{methodSymbol.Name}")) { Analyze(context, none, methodSymbol); } }, SyntaxKind.InvocationExpression); }