public override void Initialize(AnalysisContext analysisContext) { analysisContext.RegisterCompilationStartAction(compilationContext => { var gcSuppressFinalizeMethodSymbol = compilationContext.Compilation .GetTypeByMetadataName("System.GC") .GetMembers("SuppressFinalize") .OfType <IMethodSymbol>() .SingleOrDefault(); if (gcSuppressFinalizeMethodSymbol == null) { return; } compilationContext.RegisterOperationBlockStartAction(operationBlockContext => { if (operationBlockContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)operationBlockContext.OwningSymbol; if (methodSymbol.IsExtern || methodSymbol.IsAbstract) { return; } var analyzer = new SuppressFinalizeAnalyzer(methodSymbol, gcSuppressFinalizeMethodSymbol, compilationContext.Compilation); operationBlockContext.RegisterOperationAction(analyzer.Analyze, OperationKind.InvocationExpression); operationBlockContext.RegisterOperationBlockEndAction(analyzer.OperationBlockEndAction); }); }); }
public override void Initialize(AnalysisContext analysisContext) { // TODO: Make analyzer thread safe. //analysisContext.EnableConcurrentExecution(); analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); analysisContext.RegisterCompilationStartAction(compilationContext => { var gcSuppressFinalizeMethodSymbol = compilationContext.Compilation .GetTypeByMetadataName("System.GC") ?.GetMembers("SuppressFinalize") .OfType <IMethodSymbol>() .SingleOrDefault(); if (gcSuppressFinalizeMethodSymbol == null) { return; } compilationContext.RegisterOperationBlockStartActionInternal(operationBlockContext => { if (operationBlockContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)operationBlockContext.OwningSymbol; if (methodSymbol.IsExtern || methodSymbol.IsAbstract) { return; } var analyzer = new SuppressFinalizeAnalyzer(methodSymbol, gcSuppressFinalizeMethodSymbol, compilationContext.Compilation); operationBlockContext.RegisterOperationActionInternal(analyzer.Analyze, OperationKind.InvocationExpression); operationBlockContext.RegisterOperationBlockEndAction(analyzer.OperationBlockEndAction); }); }); }
public override void Initialize(AnalysisContext context) { context.EnableConcurrentExecution(); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.RegisterCompilationStartAction(compilationContext => { var gcSuppressFinalizeMethodSymbol = compilationContext.Compilation .GetOrCreateTypeByMetadataName(WellKnownTypeNames.SystemGC) ?.GetMembers("SuppressFinalize") .OfType <IMethodSymbol>() .FirstOrDefault(); if (gcSuppressFinalizeMethodSymbol == null) { return; } compilationContext.RegisterOperationBlockStartAction(operationBlockContext => { if (operationBlockContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)operationBlockContext.OwningSymbol; if (methodSymbol.IsExtern || methodSymbol.IsAbstract) { return; } var analyzer = new SuppressFinalizeAnalyzer(methodSymbol, gcSuppressFinalizeMethodSymbol, compilationContext.Compilation); operationBlockContext.RegisterOperationAction(analyzer.Analyze, OperationKind.Invocation); operationBlockContext.RegisterOperationBlockEndAction(analyzer.OperationBlockEndAction); }); }); }
public override void Initialize(AnalysisContext analysisContext) { // TODO: Make analyzer thread safe. //analysisContext.EnableConcurrentExecution(); analysisContext.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); analysisContext.RegisterCompilationStartAction(compilationContext => { var gcSuppressFinalizeMethodSymbol = compilationContext.Compilation .GetTypeByMetadataName("System.GC") ?.GetMembers("SuppressFinalize") .OfType<IMethodSymbol>() .SingleOrDefault(); if (gcSuppressFinalizeMethodSymbol == null) { return; } compilationContext.RegisterOperationBlockStartAction(operationBlockContext => { if (operationBlockContext.OwningSymbol.Kind != SymbolKind.Method) { return; } var methodSymbol = (IMethodSymbol)operationBlockContext.OwningSymbol; if (methodSymbol.IsExtern || methodSymbol.IsAbstract) { return; } var analyzer = new SuppressFinalizeAnalyzer(methodSymbol, gcSuppressFinalizeMethodSymbol, compilationContext.Compilation); operationBlockContext.RegisterOperationAction(analyzer.Analyze, OperationKind.InvocationExpression); operationBlockContext.RegisterOperationBlockEndAction(analyzer.OperationBlockEndAction); }); }); }