Microsoft.NetCore.Analyzers\Performance\PreferConvertToHexStringOverBitConverter.Fixer.cs (5)
70if (GetInvocation(root, semanticModel, diagnostic.AdditionalLocations[0].SourceSpan, cancellationToken) is not IInvocationOperation bitConverterInvocation ||
71GetInvocation(root, semanticModel, diagnostic.Location.SourceSpan, cancellationToken) is not IInvocationOperation outerInvocation)
76var toLowerInvocation = diagnostic.AdditionalLocations.Count == 2
138private static IInvocationOperation? GetInvocation(SyntaxNode root, SemanticModel semanticModel, TextSpan span, CancellationToken cancellationToken)
142return node is null ? null : semanticModel.GetOperation(node, cancellationToken) as IInvocationOperation;
Microsoft.NetCore.Analyzers\Performance\PreferHashDataOverComputeHash.cs (35)
126var invocationOperation = (IInvocationOperation)context.Operation;
187static void CaptureHashCreateInvocationOperation(DataCollector dataCollector, IInvocationOperation hashCreateInvocation)
212static void CaptureOrReportComputeHashInvocationOperation(OperationAnalysisContext context, MethodHelper methodHelper, DataCollector dataCollector, IInvocationOperation computeHashInvocation, ComputeType computeType)
219case IInvocationOperation chainedInvocationOperation when methodHelper.IsHashCreateMethod(chainedInvocationOperation):
256private static Diagnostic CreateDiagnostics(IInvocationOperation computeHashMethod,
269private static Diagnostic CreateDiagnostics(IInvocationOperation computeHashMethod,
294ImmutableArray<IInvocationOperation> disposeArray,
302foreach (var disposeInvocation in disposeArray)
311private static ImmutableArray<IInvocationOperation> GetValueOrEmpty(PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>? dictionary, ILocalSymbol key)
318return ImmutableArray<IInvocationOperation>.Empty;
395public bool IsHashCreateMethod(IInvocationOperation invocationOperation)
403public bool IsComputeHashMethod(IInvocationOperation invocationOperation, out ComputeType computeType)
427public bool IsComputeHashMethod(IInvocationOperation invocationOperation) => invocationOperation.TargetMethod.Equals(_computeHashMethodSymbol, SymbolEqualityComparer.Default);
429public bool IsComputeHashSectionMethod(IInvocationOperation invocationOperation) => invocationOperation.TargetMethod.Equals(_computeHashSectionMethodSymbol, SymbolEqualityComparer.Default);
431public bool IsTryComputeHashMethod(IInvocationOperation invocationOperation) => invocationOperation.TargetMethod.Equals(_tryComputeHashMethodSymbol, SymbolEqualityComparer.Default);
433public bool IsDisposeMethod(IInvocationOperation invocationOperation) => invocationOperation.TargetMethod.Equals(_disposeMethodSymbol, SymbolEqualityComparer.Default);
578private readonly PooledConcurrentSet<IInvocationOperation> _disposeHashSet = PooledConcurrentSet<IInvocationOperation>.GetInstance();
581private readonly PooledConcurrentDictionary<IInvocationOperation, ComputeType> _computeHashMap = PooledConcurrentDictionary<IInvocationOperation, ComputeType>.GetInstance();
587public void CollectComputeHashInvocation(IInvocationOperation computeHashInvocation, ComputeType computeType) => _computeHashMap.TryAdd(computeHashInvocation, computeType);
589public void CollectDisposeInvocation(IInvocationOperation disposeInvocation) => _disposeHashSet.Add(disposeInvocation);
609private PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>? CompileDisposeMap(CancellationToken cancellationToken)
616var map = PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>.GetInstance(SymbolEqualityComparer.Default);
617var workingMap = PooledDictionary<ILocalSymbol, ArrayBuilder<IInvocationOperation>>.GetInstance(SymbolEqualityComparer.Default);
619foreach (var dispose in _disposeHashSet)
624arrayBuilder = ArrayBuilder<IInvocationOperation>.GetInstance();
645private PooledDictionary<ILocalSymbol, int>? GetComputeHashOnlySymbols(PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>? disposeMap, CancellationToken cancellationToken)
706private readonly PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>? _disposeMap;
709PooledDictionary<ILocalSymbol, ImmutableArray<IInvocationOperation>>? disposeMap,
711PooledConcurrentDictionary<IInvocationOperation, ComputeType> computeHashMap)
719public PooledConcurrentDictionary<IInvocationOperation, ComputeType> ComputeHashMap { get; }
725public ImmutableArray<IInvocationOperation> GetDisposeInvocationArray(ILocalSymbol localSymbol) => GetValueOrEmpty(_disposeMap, localSymbol);
Microsoft.NetCore.Analyzers\Runtime\AvoidRedundantRegexIsMatchBeforeMatch.cs (27)
69if (UnwrapInvocationFromCondition(conditional.Condition) is not IInvocationOperation isMatchInvocation ||
82IInvocationOperation? matchInvocation = FindMatchingMatchCall(
103private static IInvocationOperation? UnwrapInvocationFromCondition(IOperation operation)
108return operation as IInvocationOperation;
115private static IInvocationOperation? FindMatchingMatchCall(
117IInvocationOperation isMatchInvocation,
166private static IInvocationOperation? TryFindMatchInOperation(
168IInvocationOperation isMatchInvocation,
179var found = FindMatchInExpression(declInitValue, isMatchInvocation, regexType);
191var found = FindMatchInExpression(initValue, isMatchInvocation, regexType);
223private static IInvocationOperation? FindMatchInExpression(
225IInvocationOperation isMatchInvocation,
231if (expression is IInvocationOperation invocation)
242var found = FindMatchInExpression(invocation.Instance, isMatchInvocation, regexType);
251var found = FindMatchInExpression(arg.Value, isMatchInvocation, regexType);
266var found = FindMatchInExpression(propRef.Instance, isMatchInvocation, regexType);
277var found = FindMatchInExpression(arg.Value, isMatchInvocation, regexType);
291var found = FindMatchInExpression(arrayRef.ArrayReference, isMatchInvocation, regexType);
327var found = FindMatchInExpression(arg.Value, isMatchInvocation, regexType);
336var found = FindMatchInExpression(objCreation.Initializer, isMatchInvocation, regexType);
352var found = FindMatchInExpression(inner, isMatchInvocation, regexType);
366var found = FindMatchInExpression(element, isMatchInvocation, regexType);
388var found = FindMatchInExpression(element, isMatchInvocation, regexType);
405var found = FindMatchInExpression(interpolation.Expression, isMatchInvocation, regexType);
443IInvocationOperation matchInvocation,
444IInvocationOperation isMatchInvocation,
612IInvocationOperation invocation,