src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (48)
26public static bool IsObjectEqualsOverride(this IMethodSymbol method)
40public static bool IsObjectEquals(this IMethodSymbol method)
54public static bool IsStaticObjectEqualsOrReferenceEquals(this IMethodSymbol method)
69private static bool IsObjectMethodOverride(IMethodSymbol method)
71IMethodSymbol overriddenMethod = method.OverriddenMethod;
89public static bool IsImplementationOfInterfaceMethod(this IMethodSymbol method, ITypeSymbol? typeArgument, [NotNullWhen(returnValue: true)] INamedTypeSymbol? interfaceType, string interfaceMethodName)
93return constructedInterface?.GetMembers(interfaceMethodName).FirstOrDefault() is IMethodSymbol interfaceMethod &&
100public static bool IsDisposeImplementation(this IMethodSymbol method, Compilation compilation)
109public static bool IsAsyncDisposeImplementation(this IMethodSymbol method, Compilation compilation)
119public static bool IsDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iDisposable)
141public static bool IsAsyncDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iAsyncDisposable, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTaskType)
163private static bool HasDisposeMethodSignature(this IMethodSymbol method)
171public static bool HasDisposeSignatureByConvention(this IMethodSymbol method)
181public static bool HasDisposeBoolMethodSignature(this IMethodSymbol method)
192private static bool HasDisposeCloseMethodSignature(this IMethodSymbol method)
200private static bool HasDisposeCloseAsyncMethodSignature(this IMethodSymbol method, INamedTypeSymbol? taskType)
207private static bool HasDisposeAsyncMethodSignature(this IMethodSymbol method,
223private static bool HasOverriddenDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? task)
236private static bool HasVirtualOrOverrideDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTask)
248public static DisposeMethodKind GetDisposeMethodKind(this IMethodSymbol method, Compilation compilation)
263this IMethodSymbol method,
311public static bool IsSerializationConstructor([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
317public static bool IsGetObjectData([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
324public static bool HasOptionalParameters(this IMethodSymbol methodSymbol)
329public static IEnumerable<IMethodSymbol> GetOverloads(this IMethodSymbol? method)
331var methods = method?.ContainingType?.GetMembers(method.Name).OfType<IMethodSymbol>();
334foreach (var member in methods)
364public static bool IsCollectionAddMethod(this IMethodSymbol method, ImmutableHashSet<INamedTypeSymbol> iCollectionTypes)
385public static bool IsTaskFromResultMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskType)
394public static bool IsTaskConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? genericTaskType)
406public static bool IsAsyncDisposableConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? asyncDisposableType, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskAsyncEnumerableExtensions)
420private static readonly BoundedCache<Compilation, ConcurrentDictionary<IMethodSymbol, IBlockOperation?>> s_methodToTopmostOperationBlockCache
426public static IBlockOperation? GetTopmostOperationBlock(this IMethodSymbol method, Compilation compilation, CancellationToken cancellationToken = default)
432IBlockOperation? ComputeTopmostOperationBlock(IMethodSymbol unused)
465public static bool IsLambdaOrLocalFunctionOrDelegate(this IMethodSymbol method)
474public static bool IsLambdaOrLocalFunction(this IMethodSymbol method)
483public static bool IsLockMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? systemThreadingMonitor)
493public static bool IsInterlockedExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
505public static bool IsInterlockedCompareExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
519public static bool HasParameterWithDelegateType(this IMethodSymbol methodSymbol)
527public static bool IsArgumentNullCheckMethod(this IMethodSymbol method)
536public static bool IsBenchmarkOrXUnitTestMethod(this IMethodSymbol method, ConcurrentDictionary<INamedTypeSymbol, bool> knownTestAttributes, INamedTypeSymbol? benchmarkAttribute, INamedTypeSymbol? xunitFactAttribute)
547public static ImmutableArray<IMethodSymbol> GetOriginalDefinitions(this IMethodSymbol methodSymbol)
549ImmutableArray<IMethodSymbol>.Builder originalDefinitionsBuilder = ImmutableArray.CreateBuilder<IMethodSymbol>();
566.OfType<IMethodSymbol>()
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (7)
53public TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
82public SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, CodeGenerationContextInfo info, CancellationToken cancellationToken)
125protected abstract TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, TCodeGenerationContextInfo info, IList<bool>? availableIndices, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
147public abstract SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, TCodeGenerationContextInfo info, CancellationToken cancellationToken);
348IMethodSymbol method => CreateMethodDeclaration(method, codeGenerationDestination, info, cancellationToken),
366IMethodSymbol method => AddMethod(currentDestination, method, info, availableIndices, cancellationToken),
446public Task<Document> AddMethodAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IMethodSymbol method, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (28)
33IMethodSymbol? addMethod = null,
34IMethodSymbol? removeMethod = null,
35IMethodSymbol? raiseMethod = null)
52IMethodSymbol? getMethod,
53IMethodSymbol? setMethod,
80ImmutableArray<IParameterSymbol> parameters, IMethodSymbol? getMethod, IMethodSymbol? setMethod,
119public static IMethodSymbol CreateConstructorSymbol(
138public static IMethodSymbol CreateDestructorSymbol(
147internal static IMethodSymbol CreateMethodSymbol(
154ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
172public static IMethodSymbol CreateMethodSymbol(
176ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
191public static IMethodSymbol CreateOperatorSymbol(
219public static IMethodSymbol CreateConversionSymbol(
244public static IMethodSymbol CreateConversionSymbol(
356internal static IMethodSymbol CreateAccessorSymbol(
357IMethodSymbol accessor,
360ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
382public static IMethodSymbol CreateAccessorSymbol(
470var invokeMethod = CreateMethodSymbol(
510internal static IMethodSymbol CreateMethodSymbol(
511IMethodSymbol method,
515ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
549IMethodSymbol? getMethod = null,
550IMethodSymbol? setMethod = null,
575IMethodSymbol? addMethod = null,
576IMethodSymbol? removeMethod = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (13)
106protected static IMethodSymbol? FindDisposeMethod(Compilation compilation, ITypeSymbol? type, bool isAsync)
118if (impl is IMethodSymbol implMethod)
136.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnType: var returnType, Parameters.Length: 0 } &&
137SymbolEqualityComparer.Default.Equals(returnType, valueTaskType)) is IMethodSymbol disposeMethodFromPattern)
152.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnsVoid: true, Parameters.Length: 0 }) is IMethodSymbol disposeMethodFromPattern)
165(INamedTypeSymbol?, IMethodSymbol?) GetIDisposableInterfaceAndDisposeMethod(string typeName, string methodName)
168return (disposableType, disposableType?.GetMembers().OfType<IMethodSymbol>().FirstOrDefault(m => m.Parameters.Length == 0 && m.Name == methodName));
216public IMethodSymbol? GetGetAwaiterMethod(SemanticModel semanticModel, SyntaxNode node)
219public ImmutableArray<IMethodSymbol> GetDeconstructionAssignmentMethods(SemanticModel semanticModel, SyntaxNode node)
222public ImmutableArray<IMethodSymbol> GetDeconstructionForEachMethods(SemanticModel semanticModel, SyntaxNode node)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
261public bool TryGetPrimaryConstructor(INamedTypeSymbol typeSymbol, [NotNullWhen(true)] out IMethodSymbol? primaryConstructor)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (48)
26public static bool IsObjectEqualsOverride(this IMethodSymbol method)
40public static bool IsObjectEquals(this IMethodSymbol method)
54public static bool IsStaticObjectEqualsOrReferenceEquals(this IMethodSymbol method)
69private static bool IsObjectMethodOverride(IMethodSymbol method)
71IMethodSymbol overriddenMethod = method.OverriddenMethod;
89public static bool IsImplementationOfInterfaceMethod(this IMethodSymbol method, ITypeSymbol? typeArgument, [NotNullWhen(returnValue: true)] INamedTypeSymbol? interfaceType, string interfaceMethodName)
93return constructedInterface?.GetMembers(interfaceMethodName).FirstOrDefault() is IMethodSymbol interfaceMethod &&
100public static bool IsDisposeImplementation(this IMethodSymbol method, Compilation compilation)
109public static bool IsAsyncDisposeImplementation(this IMethodSymbol method, Compilation compilation)
119public static bool IsDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iDisposable)
141public static bool IsAsyncDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iAsyncDisposable, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTaskType)
163private static bool HasDisposeMethodSignature(this IMethodSymbol method)
171public static bool HasDisposeSignatureByConvention(this IMethodSymbol method)
181public static bool HasDisposeBoolMethodSignature(this IMethodSymbol method)
192private static bool HasDisposeCloseMethodSignature(this IMethodSymbol method)
200private static bool HasDisposeCloseAsyncMethodSignature(this IMethodSymbol method, INamedTypeSymbol? taskType)
207private static bool HasDisposeAsyncMethodSignature(this IMethodSymbol method,
223private static bool HasOverriddenDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? task)
236private static bool HasVirtualOrOverrideDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTask)
248public static DisposeMethodKind GetDisposeMethodKind(this IMethodSymbol method, Compilation compilation)
263this IMethodSymbol method,
311public static bool IsSerializationConstructor([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
317public static bool IsGetObjectData([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
324public static bool HasOptionalParameters(this IMethodSymbol methodSymbol)
329public static IEnumerable<IMethodSymbol> GetOverloads(this IMethodSymbol? method)
331var methods = method?.ContainingType?.GetMembers(method.Name).OfType<IMethodSymbol>();
334foreach (var member in methods)
364public static bool IsCollectionAddMethod(this IMethodSymbol method, ImmutableHashSet<INamedTypeSymbol> iCollectionTypes)
385public static bool IsTaskFromResultMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskType)
394public static bool IsTaskConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? genericTaskType)
406public static bool IsAsyncDisposableConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? asyncDisposableType, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskAsyncEnumerableExtensions)
420private static readonly BoundedCache<Compilation, ConcurrentDictionary<IMethodSymbol, IBlockOperation?>> s_methodToTopmostOperationBlockCache
426public static IBlockOperation? GetTopmostOperationBlock(this IMethodSymbol method, Compilation compilation, CancellationToken cancellationToken = default)
432IBlockOperation? ComputeTopmostOperationBlock(IMethodSymbol unused)
465public static bool IsLambdaOrLocalFunctionOrDelegate(this IMethodSymbol method)
474public static bool IsLambdaOrLocalFunction(this IMethodSymbol method)
483public static bool IsLockMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? systemThreadingMonitor)
493public static bool IsInterlockedExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
505public static bool IsInterlockedCompareExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
519public static bool HasParameterWithDelegateType(this IMethodSymbol methodSymbol)
527public static bool IsArgumentNullCheckMethod(this IMethodSymbol method)
536public static bool IsBenchmarkOrXUnitTestMethod(this IMethodSymbol method, ConcurrentDictionary<INamedTypeSymbol, bool> knownTestAttributes, INamedTypeSymbol? benchmarkAttribute, INamedTypeSymbol? xunitFactAttribute)
547public static ImmutableArray<IMethodSymbol> GetOriginalDefinitions(this IMethodSymbol methodSymbol)
549ImmutableArray<IMethodSymbol>.Builder originalDefinitionsBuilder = ImmutableArray.CreateBuilder<IMethodSymbol>();
566.OfType<IMethodSymbol>()
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (7)
53public TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
82public SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, CodeGenerationContextInfo info, CancellationToken cancellationToken)
125protected abstract TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, TCodeGenerationContextInfo info, IList<bool>? availableIndices, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
147public abstract SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, TCodeGenerationContextInfo info, CancellationToken cancellationToken);
348IMethodSymbol method => CreateMethodDeclaration(method, codeGenerationDestination, info, cancellationToken),
366IMethodSymbol method => AddMethod(currentDestination, method, info, availableIndices, cancellationToken),
446public Task<Document> AddMethodAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IMethodSymbol method, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (28)
33IMethodSymbol? addMethod = null,
34IMethodSymbol? removeMethod = null,
35IMethodSymbol? raiseMethod = null)
52IMethodSymbol? getMethod,
53IMethodSymbol? setMethod,
80ImmutableArray<IParameterSymbol> parameters, IMethodSymbol? getMethod, IMethodSymbol? setMethod,
119public static IMethodSymbol CreateConstructorSymbol(
138public static IMethodSymbol CreateDestructorSymbol(
147internal static IMethodSymbol CreateMethodSymbol(
154ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
172public static IMethodSymbol CreateMethodSymbol(
176ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
191public static IMethodSymbol CreateOperatorSymbol(
219public static IMethodSymbol CreateConversionSymbol(
244public static IMethodSymbol CreateConversionSymbol(
356internal static IMethodSymbol CreateAccessorSymbol(
357IMethodSymbol accessor,
360ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
382public static IMethodSymbol CreateAccessorSymbol(
470var invokeMethod = CreateMethodSymbol(
510internal static IMethodSymbol CreateMethodSymbol(
511IMethodSymbol method,
515ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
549IMethodSymbol? getMethod = null,
550IMethodSymbol? setMethod = null,
575IMethodSymbol? addMethod = null,
576IMethodSymbol? removeMethod = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (13)
106protected static IMethodSymbol? FindDisposeMethod(Compilation compilation, ITypeSymbol? type, bool isAsync)
118if (impl is IMethodSymbol implMethod)
136.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnType: var returnType, Parameters.Length: 0 } &&
137SymbolEqualityComparer.Default.Equals(returnType, valueTaskType)) is IMethodSymbol disposeMethodFromPattern)
152.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnsVoid: true, Parameters.Length: 0 }) is IMethodSymbol disposeMethodFromPattern)
165(INamedTypeSymbol?, IMethodSymbol?) GetIDisposableInterfaceAndDisposeMethod(string typeName, string methodName)
168return (disposableType, disposableType?.GetMembers().OfType<IMethodSymbol>().FirstOrDefault(m => m.Parameters.Length == 0 && m.Name == methodName));
216public IMethodSymbol? GetGetAwaiterMethod(SemanticModel semanticModel, SyntaxNode node)
219public ImmutableArray<IMethodSymbol> GetDeconstructionAssignmentMethods(SemanticModel semanticModel, SyntaxNode node)
222public ImmutableArray<IMethodSymbol> GetDeconstructionForEachMethods(SemanticModel semanticModel, SyntaxNode node)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
261public bool TryGetPrimaryConstructor(INamedTypeSymbol typeSymbol, [NotNullWhen(true)] out IMethodSymbol? primaryConstructor)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (48)
26public static bool IsObjectEqualsOverride(this IMethodSymbol method)
40public static bool IsObjectEquals(this IMethodSymbol method)
54public static bool IsStaticObjectEqualsOrReferenceEquals(this IMethodSymbol method)
69private static bool IsObjectMethodOverride(IMethodSymbol method)
71IMethodSymbol overriddenMethod = method.OverriddenMethod;
89public static bool IsImplementationOfInterfaceMethod(this IMethodSymbol method, ITypeSymbol? typeArgument, [NotNullWhen(returnValue: true)] INamedTypeSymbol? interfaceType, string interfaceMethodName)
93return constructedInterface?.GetMembers(interfaceMethodName).FirstOrDefault() is IMethodSymbol interfaceMethod &&
100public static bool IsDisposeImplementation(this IMethodSymbol method, Compilation compilation)
109public static bool IsAsyncDisposeImplementation(this IMethodSymbol method, Compilation compilation)
119public static bool IsDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iDisposable)
141public static bool IsAsyncDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iAsyncDisposable, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTaskType)
163private static bool HasDisposeMethodSignature(this IMethodSymbol method)
171public static bool HasDisposeSignatureByConvention(this IMethodSymbol method)
181public static bool HasDisposeBoolMethodSignature(this IMethodSymbol method)
192private static bool HasDisposeCloseMethodSignature(this IMethodSymbol method)
200private static bool HasDisposeCloseAsyncMethodSignature(this IMethodSymbol method, INamedTypeSymbol? taskType)
207private static bool HasDisposeAsyncMethodSignature(this IMethodSymbol method,
223private static bool HasOverriddenDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? task)
236private static bool HasVirtualOrOverrideDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTask)
248public static DisposeMethodKind GetDisposeMethodKind(this IMethodSymbol method, Compilation compilation)
263this IMethodSymbol method,
311public static bool IsSerializationConstructor([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
317public static bool IsGetObjectData([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
324public static bool HasOptionalParameters(this IMethodSymbol methodSymbol)
329public static IEnumerable<IMethodSymbol> GetOverloads(this IMethodSymbol? method)
331var methods = method?.ContainingType?.GetMembers(method.Name).OfType<IMethodSymbol>();
334foreach (var member in methods)
364public static bool IsCollectionAddMethod(this IMethodSymbol method, ImmutableHashSet<INamedTypeSymbol> iCollectionTypes)
385public static bool IsTaskFromResultMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskType)
394public static bool IsTaskConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? genericTaskType)
406public static bool IsAsyncDisposableConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? asyncDisposableType, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskAsyncEnumerableExtensions)
420private static readonly BoundedCache<Compilation, ConcurrentDictionary<IMethodSymbol, IBlockOperation?>> s_methodToTopmostOperationBlockCache
426public static IBlockOperation? GetTopmostOperationBlock(this IMethodSymbol method, Compilation compilation, CancellationToken cancellationToken = default)
432IBlockOperation? ComputeTopmostOperationBlock(IMethodSymbol unused)
465public static bool IsLambdaOrLocalFunctionOrDelegate(this IMethodSymbol method)
474public static bool IsLambdaOrLocalFunction(this IMethodSymbol method)
483public static bool IsLockMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? systemThreadingMonitor)
493public static bool IsInterlockedExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
505public static bool IsInterlockedCompareExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
519public static bool HasParameterWithDelegateType(this IMethodSymbol methodSymbol)
527public static bool IsArgumentNullCheckMethod(this IMethodSymbol method)
536public static bool IsBenchmarkOrXUnitTestMethod(this IMethodSymbol method, ConcurrentDictionary<INamedTypeSymbol, bool> knownTestAttributes, INamedTypeSymbol? benchmarkAttribute, INamedTypeSymbol? xunitFactAttribute)
547public static ImmutableArray<IMethodSymbol> GetOriginalDefinitions(this IMethodSymbol methodSymbol)
549ImmutableArray<IMethodSymbol>.Builder originalDefinitionsBuilder = ImmutableArray.CreateBuilder<IMethodSymbol>();
566.OfType<IMethodSymbol>()
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.CopyDataFlowOperationVisitor.cs (1)
573IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisContext.cs (1)
92IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysisContext.cs (1)
75IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateDataFlowOperationVisitor.cs (1)
146IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateValueSetFlowOperationVisitor.cs (1)
109IMethodSymbol method,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysisContext.cs (1)
69IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.cs (8)
150/// <returns>Dictionary of <see cref="Location"/> and <see cref="IMethodSymbol"/> pairs mapping to the kind of hazardous usage (Flagged or MaybeFlagged). The method in the key is null for return/initialization statements.</returns>
152public static PooledDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>? BatchGetOrComputeHazardousUsages(
186/// <returns>Dictionary of <see cref="Location"/> and <see cref="IMethodSymbol"/> pairs mapping to the kind of hazardous usage (Flagged or MaybeFlagged). The method in the key is null for return/initialization statements.</returns>
188public static PooledDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>? BatchGetOrComputeHazardousUsages(
199PooledDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>? allResults = null;
219foreach (IMethodSymbol localFunctionSymbol in enclosingControlFlowGraph.LocalFunctions)
264allResults ??= PooledDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>.GetInstance();
266foreach (KeyValuePair<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult> kvp
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.PropertySetDataFlowOperationVisitor.cs (14)
38private readonly ImmutableDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>.Builder _hazardousUsageBuilder;
40private readonly ImmutableHashSet<IMethodSymbol>.Builder _visitedLocalFunctions;
62this._hazardousUsageBuilder = ImmutableDictionary.CreateBuilder<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult>();
64this._visitedLocalFunctions = ImmutableHashSet.CreateBuilder<IMethodSymbol>();
86public ImmutableDictionary<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult> HazardousUsages => this._hazardousUsageBuilder.ToImmutable();
88public ImmutableHashSet<IMethodSymbol> VisitedLocalFunctions => this._visitedLocalFunctions.ToImmutable();
456public override PropertySetAbstractValue VisitInvocation_NonLambdaOrDelegateOrLocalFunction(IMethodSymbol method, IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments, bool invokedAsDelegate, IOperation originalOperation, PropertySetAbstractValue defaultValue)
513IMethodSymbol method,
596IMethodSymbol? methodSymbol,
618IMethodSymbol? methodSymbol,
623(Location, IMethodSymbol?) key = (operationSyntax.GetLocation(), methodSymbol);
635public override PropertySetAbstractValue VisitInvocation_LocalFunction(IMethodSymbol localFunction, ImmutableArray<IArgumentOperation> visitedArguments, IOperation originalOperation, PropertySetAbstractValue defaultValue)
675foreach (KeyValuePair<(Location Location, IMethodSymbol? Method), HazardousUsageEvaluationResult> kvp in subResult.HazardousUsages)
687foreach (IMethodSymbol localFunctionSymbol in subResult.VisitedLocalFunctions)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysisContext.cs (1)
108IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysisContext.cs (1)
103IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.ValueContentDataFlowOperationVisitor.cs (1)
271IMethodSymbol method,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysisContext.cs (1)
75IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityDataFlowOperationVisitor.cs (1)
465IMethodSymbol invokedMethod,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (48)
55private ImmutableHashSet<IMethodSymbol>? _lazyContractCheckMethods;
65private readonly ImmutableHashSet<IMethodSymbol>.Builder _escapedLocalFunctions;
70private readonly ImmutableHashSet<IMethodSymbol>.Builder _analyzedLocalFunctions;
123private readonly ImmutableDictionary<IMethodSymbol, IDataFlowAnalysisResult<TAbstractAnalysisValue>>.Builder _standaloneLocalFunctionAnalysisResultsBuilder;
128private readonly Dictionary<IMethodSymbol, ControlFlowGraph?>? _interproceduralMethodToCfgMap;
153public ImmutableDictionary<IMethodSymbol, IDataFlowAnalysisResult<TAbstractAnalysisValue>> StandaloneLocalFunctionAnalysisResultsMap => _standaloneLocalFunctionAnalysisResultsBuilder.ToImmutable();
272.OfType<IMethodSymbol>().FirstOrDefault(HasDebugAssertSignature);
281_returnValueOperations = OwningSymbol is IMethodSymbol method && !method.ReturnsVoid ? new HashSet<IOperation>() : null;
283_standaloneLocalFunctionAnalysisResultsBuilder = ImmutableDictionary.CreateBuilder<IMethodSymbol, IDataFlowAnalysisResult<TAbstractAnalysisValue>>();
284_escapedLocalFunctions = ImmutableHashSet.CreateBuilder<IMethodSymbol>();
285_analyzedLocalFunctions = ImmutableHashSet.CreateBuilder<IMethodSymbol>();
345static bool HasDebugAssertSignature(IMethodSymbol method)
365if (OwningSymbol is IMethodSymbol method &&
554OwningSymbol is IMethodSymbol method &&
614foreach (var localFunction in DataFlowAnalysisContext.ControlFlowGraph.LocalFunctions)
632private bool IsStandaloneAnalysisRequiredForLocalFunction(IMethodSymbol localFunction)
837if (OwningSymbol is IMethodSymbol method &&
982private bool IsContractCheckMethod(IMethodSymbol method)
993var validationMethods = requiresMethods.Concat(assumeMethods).Concat(assertMethods).OfType<IMethodSymbol>().Where(m => m.IsStatic && m.ReturnsVoid && !m.Parameters.IsEmpty && (m.Parameters[0].Type.SpecialType == SpecialType.System_Boolean));
1008private bool IsAnyDebugAssertMethod(IMethodSymbol method) =>
1014protected bool IsAnyAssertMethod(IMethodSymbol method)
1766bool IsOverrideOrImplementationOfEquatableEquals(IMethodSymbol methodSymbol)
1777var equalsMember = interfaceType.GetMembers("Equals").OfType<IMethodSymbol>().FirstOrDefault();
2127IMethodSymbol invokedMethod,
2203IMethodSymbol invokedMethod,
2241int currentMethodCallCount = currentMethodsBeingAnalyzed.Count(m => !(m.OwningSymbol is IMethodSymbol ms && ms.IsLambdaOrLocalFunctionOrDelegate()));
2552if (argumentOperation.Parameter!.ContainingSymbol is IMethodSymbol method &&
2596IMethodSymbol invokedMethod,
2633private void PerformStandaloneLocalFunctionInterproceduralAnalysis(IMethodSymbol localFunction)
2734IMethodSymbol invokedMethod)
3162var method = operation.Constructor!;
3181foreach ((IMethodSymbol method, _) in resolvedMethodTargetsOpt)
3227void PostVisitInvocation(IMethodSymbol targetMethod, ImmutableArray<IArgumentOperation> arguments)
3252void ProcessInterlockedOperation(IMethodSymbol targetMethod, ImmutableArray<IArgumentOperation> arguments, INamedTypeSymbol interlockedType)
3287using var _1 = PooledHashSet<(IMethodSymbol method, IOperation? instance)>.GetInstance(out var methodTargetsOptBuilder);
3312PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder,
3318PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder,
3325PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder,
3336var targetMethod = invocation.TargetMethod;
3379void AddMethodTarget(IMethodSymbol method, IOperation? instance)
3438out ImmutableHashSet<(IMethodSymbol method, IOperation? instance)>? resolvedMethodTargets)
3442using var _1 = PooledHashSet<(IMethodSymbol method, IOperation? instance)>.GetInstance(out var methodTargetsOptBuilder);
3534IMethodSymbol method,
3547private ControlFlowGraph? GetInterproceduralControlFlowGraph(IMethodSymbol method)
3577IMethodSymbol localFunction,
4196private IMethodSymbol? DebugAssertMethod { get; }
4225private protected DisposeMethodKind GetDisposeMethodKind(IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (5)
87protected abstract TExpression? GetGetterExpression(IMethodSymbol getMethod, CancellationToken cancellationToken);
88protected abstract TExpression? GetSetterExpression(SemanticModel semanticModel, IMethodSymbol setMethod, CancellationToken cancellationToken);
91SemanticModel semanticModel, IMethodSymbol accessor, HashSet<string> fieldNames, HashSet<IFieldSymbol> result, CancellationToken cancellationToken);
257IMethodSymbol getMethod,
275SemanticModel semanticModel, IMethodSymbol setMethod, HashSet<string> fieldNames, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateConversionService.cs (2)
24protected abstract bool TryInitializeImplicitConversionState(SemanticDocument document, SyntaxNode expression, ISet<TypeKind> classInterfaceModuleStructTypes, CancellationToken cancellationToken, out SyntaxToken identifierToken, [NotNullWhen(true)] out IMethodSymbol? methodSymbol, [NotNullWhen(true)] out INamedTypeSymbol? typeToGenerateIn);
25protected abstract bool TryInitializeExplicitConversionState(SemanticDocument document, SyntaxNode expression, ISet<TypeKind> classInterfaceModuleStructTypes, CancellationToken cancellationToken, out SyntaxToken identifierToken, [NotNullWhen(true)] out IMethodSymbol? methodSymbol, [NotNullWhen(true)] out INamedTypeSymbol? typeToGenerateIn);
src\roslyn\src\Analyzers\Core\CodeFixes\ImplementAbstractClass\ImplementAbstractClassData.cs (7)
162IMethodSymbol method => GenerateMethod(compilation, method, throughMember, modifiers, accessibility),
170Compilation compilation, IMethodSymbol method, ISymbol? throughMember,
205var getMethod = ShouldGenerateAccessor(property.GetMethod)
214var setMethod = ShouldGenerateAccessor(property.SetMethod)
241private IMethodSymbol? GetEventAddOrRemoveMethod(
242IEventSymbol @event, IMethodSymbol? accessor, ISymbol? throughMember,
260private bool ShouldGenerateAccessor([NotNullWhen(true)] IMethodSymbol? method)
src\roslyn\src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator.cs (8)
260if (member is not IMethodSymbol method)
299IMethodSymbol method => [GenerateMethod(compilation, method, conflictingMember as IMethodSymbol, accessibility, modifiers, generateAbstractly, useExplicitInterfaceSymbol, memberName)],
308var accessor = CodeGenerationSymbolFactory.CreateAccessorSymbol(
323private IMethodSymbol? GetAddOrRemoveMethod(
324IEventSymbol @event, bool generateInvisibly, IMethodSymbol accessor, string memberName,
360if (member is IMethodSymbol method1 && baseMember is IMethodSymbol method2)
src\roslyn\src\Analyzers\Core\CodeFixes\MakeMethodAsynchronous\AbstractMakeMethodAsynchronousCodeFixProvider.cs (9)
31IMethodSymbol methodSymbol,
62var methodSymbol = GetMethodSymbol(semanticModel, node, cancellationToken);
91private static IMethodSymbol? GetMethodSymbol(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
95return symbol as IMethodSymbol;
120var methodSymbol = GetMethodSymbol(semanticModel, node, cancellationToken);
162IMethodSymbol methodSymbol,
181var newMethod = (IMethodSymbol)semanticModel.GetRequiredDeclaredSymbol(newNode, cancellationToken);
191IMethodSymbol methodSymbol,
src\roslyn\src\Analyzers\Core\CodeFixes\MakeMethodSynchronous\AbstractMakeMethodSynchronousCodeFixProvider.cs (8)
25protected abstract SyntaxNode RemoveAsyncTokenAndFixReturnType(IMethodSymbol methodSymbol, SyntaxNode node, KnownTaskTypes knownTypes);
56var methodSymbol = (IMethodSymbol?)(semanticModel.GetDeclaredSymbol(node, cancellationToken) ?? semanticModel.GetSymbolInfo(node, cancellationToken).GetAnySymbol());
71private async Task<Solution> RenameThenRemoveAsyncTokenAsync(Document document, SyntaxNode node, IMethodSymbol methodSymbol, CancellationToken cancellationToken)
87var newMethod = (IMethodSymbol)semanticModel.GetRequiredDeclaredSymbol(newNode, cancellationToken);
95Document document, IMethodSymbol methodSymbol, SyntaxNode node, CancellationToken cancellationToken)
126if (semanticModel.GetDeclaredSymbol(methodDeclaration, cancellationToken) is IMethodSymbol methodSymbol)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (7)
53public TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
82public SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, CodeGenerationContextInfo info, CancellationToken cancellationToken)
125protected abstract TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, TCodeGenerationContextInfo info, IList<bool>? availableIndices, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
147public abstract SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, TCodeGenerationContextInfo info, CancellationToken cancellationToken);
348IMethodSymbol method => CreateMethodDeclaration(method, codeGenerationDestination, info, cancellationToken),
366IMethodSymbol method => AddMethod(currentDestination, method, info, availableIndices, cancellationToken),
446public Task<Document> AddMethodAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IMethodSymbol method, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (28)
33IMethodSymbol? addMethod = null,
34IMethodSymbol? removeMethod = null,
35IMethodSymbol? raiseMethod = null)
52IMethodSymbol? getMethod,
53IMethodSymbol? setMethod,
80ImmutableArray<IParameterSymbol> parameters, IMethodSymbol? getMethod, IMethodSymbol? setMethod,
119public static IMethodSymbol CreateConstructorSymbol(
138public static IMethodSymbol CreateDestructorSymbol(
147internal static IMethodSymbol CreateMethodSymbol(
154ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
172public static IMethodSymbol CreateMethodSymbol(
176ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
191public static IMethodSymbol CreateOperatorSymbol(
219public static IMethodSymbol CreateConversionSymbol(
244public static IMethodSymbol CreateConversionSymbol(
356internal static IMethodSymbol CreateAccessorSymbol(
357IMethodSymbol accessor,
360ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
382public static IMethodSymbol CreateAccessorSymbol(
470var invokeMethod = CreateMethodSymbol(
510internal static IMethodSymbol CreateMethodSymbol(
511IMethodSymbol method,
515ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
549IMethodSymbol? getMethod = null,
550IMethodSymbol? setMethod = null,
575IMethodSymbol? addMethod = null,
576IMethodSymbol? removeMethod = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (13)
106protected static IMethodSymbol? FindDisposeMethod(Compilation compilation, ITypeSymbol? type, bool isAsync)
118if (impl is IMethodSymbol implMethod)
136.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnType: var returnType, Parameters.Length: 0 } &&
137SymbolEqualityComparer.Default.Equals(returnType, valueTaskType)) is IMethodSymbol disposeMethodFromPattern)
152.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnsVoid: true, Parameters.Length: 0 }) is IMethodSymbol disposeMethodFromPattern)
165(INamedTypeSymbol?, IMethodSymbol?) GetIDisposableInterfaceAndDisposeMethod(string typeName, string methodName)
168return (disposableType, disposableType?.GetMembers().OfType<IMethodSymbol>().FirstOrDefault(m => m.Parameters.Length == 0 && m.Name == methodName));
216public IMethodSymbol? GetGetAwaiterMethod(SemanticModel semanticModel, SyntaxNode node)
219public ImmutableArray<IMethodSymbol> GetDeconstructionAssignmentMethods(SemanticModel semanticModel, SyntaxNode node)
222public ImmutableArray<IMethodSymbol> GetDeconstructionForEachMethods(SemanticModel semanticModel, SyntaxNode node)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
261public bool TryGetPrimaryConstructor(INamedTypeSymbol typeSymbol, [NotNullWhen(true)] out IMethodSymbol? primaryConstructor)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\CodeGeneration\MethodGenerator.cs (12)
32IMethodSymbol method,
45IMethodSymbol method,
60IMethodSymbol method,
75IMethodSymbol method, CodeGenerationDestination destination,
93IMethodSymbol method,
112IMethodSymbol method, CodeGenerationDestination destination,
165IMethodSymbol method, CodeGenerationDestination destination,
220IMethodSymbol method, bool isExplicit, CSharpCodeGenerationContextInfo info)
231IMethodSymbol method)
238private static SyntaxList<TypeParameterConstraintClauseSyntax> GenerateDefaultConstraints(IMethodSymbol method)
312IMethodSymbol method, CSharpCodeGenerationContextInfo info)
318IMethodSymbol method,
SignatureHelp\InvocationExpressionSignatureHelpProviderBase_DelegateAndFunctionPointerInvoke.cs (5)
18private static IMethodSymbol? GetDelegateInvokeMethod(
22var invokeMethod = delegateType.DelegateInvokeMethod;
39private static IList<SignatureHelpItem> GetDelegateOrFunctionPointerInvokeItems(InvocationExpressionSyntax invocationExpression, IMethodSymbol invokeMethod, SemanticModel semanticModel, IStructuralTypeDisplayService structuralTypeDisplayService, IDocumentationCommentFormattingService documentationCommentFormattingService, out int? selectedItem, CancellationToken cancellationToken)
58private static IList<SymbolDisplayPart> GetDelegateOrFunctionPointerInvokePreambleParts(IMethodSymbol invokeMethod, SemanticModel semanticModel, int position)
80IMethodSymbol invokeMethod, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formattingService, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\CodeGeneration\MethodGenerator.cs (12)
32IMethodSymbol method,
45IMethodSymbol method,
60IMethodSymbol method,
75IMethodSymbol method, CodeGenerationDestination destination,
93IMethodSymbol method,
112IMethodSymbol method, CodeGenerationDestination destination,
165IMethodSymbol method, CodeGenerationDestination destination,
220IMethodSymbol method, bool isExplicit, CSharpCodeGenerationContextInfo info)
231IMethodSymbol method)
238private static SyntaxList<TypeParameterConstraintClauseSyntax> GenerateDefaultConstraints(IMethodSymbol method)
312IMethodSymbol method, CSharpCodeGenerationContextInfo info)
318IMethodSymbol method,
AddConstructorParametersFromMembers\AddConstructorParametersFromMembersCodeRefactoringProvider.ConstructorCandidate.cs (1)
12IMethodSymbol Constructor,
EditAndContinue\AbstractEditAndContinueAnalyzer.cs (86)
255protected abstract bool AreHandledEventsEqual(IMethodSymbol oldMethod, IMethodSymbol newMethod);
313SymbolKind.Method => GetDisplayName((IMethodSymbol)symbol),
343internal virtual string GetDisplayName(IMethodSymbol symbol)
445internal abstract IMethodSymbol GetLambdaExpressionSymbol(SemanticModel model, SyntaxNode lambdaExpression, CancellationToken cancellationToken);
2560protected static bool ReturnTypesEquivalent(IMethodSymbol oldMethod, IMethodSymbol newMethod, bool exact)
2649var oldMethod = (IMethodSymbol)oldMember;
2650var newMethod = (IMethodSymbol)newMember;
2656var newInvokeMethod = ((INamedTypeSymbol)newMember).DelegateInvokeMethod;
3033var oldPrimaryConstructor = (IMethodSymbol)oldSymbol;
3357if (oldSymbol is IMethodSymbol)
3754Debug.Assert(member is IPropertySymbol or IMethodSymbol);
3763var primaryConstructor = (IMethodSymbol)member;
3799IMethodSymbol? constructor,
3800IMethodSymbol? otherConstructor,
3810void AddEdits(IMethodSymbol? constructor, Compilation otherCompilation, bool isDelete)
3856if (symbol is IMethodSymbol
3888case IMethodSymbol or IFieldSymbol:
3925case IMethodSymbol or IFieldSymbol:
3977if (oldSymbol.Name != newSymbol.Name || oldSymbol is IMethodSymbol or IFieldSymbol)
4127if (oldMember is IMethodSymbol oldMethod)
4341else if (oldSymbol is IMethodSymbol oldMethod && newSymbol is IMethodSymbol newMethod)
4423if (oldSymbol is not IMethodSymbol { AssociatedSymbol: not null })
4457else if (oldSymbol is IMethodSymbol oldMethod && newSymbol is IMethodSymbol newMethod)
4614if (oldSymbol is not IMethodSymbol { AssociatedSymbol: not null })
4707oldMember is not IMethodSymbol { AssociatedSymbol.Kind: SymbolKind.Property or SymbolKind.Event })
4731=> parameter is { Ordinal: 0, ContainingSymbol: IMethodSymbol { IsExtensionMethod: true } };
4802var oldPrimaryConstructor = (IMethodSymbol)oldContainingMember;
4803var newPrimaryConstructor = (IMethodSymbol)newContainingMember;
4809var oldSynthesizedDeconstructor = oldPrimaryConstructor.GetMatchingDeconstructor();
4810var newSynthesizedDeconstructor = newPrimaryConstructor.GetMatchingDeconstructor();
4847if (oldSymbol is IMethodSymbol oldMethod &&
4848newSymbol is IMethodSymbol newMethod)
5053if (newSymbol is IMethodSymbol or IEventSymbol or IPropertySymbol)
5119.FirstOrDefault(static (m, compilation) => m is IMethodSymbol { IsImplicitlyDeclared: true } method && HasPrintMembersSignature(method, compilation), compilation);
5126.FirstOrDefault(static m => m is IMethodSymbol { IsImplicitlyDeclared: true } method && HasIEquatableEqualsSignature(method));
5133.FirstOrDefault(static m => m is IMethodSymbol { IsImplicitlyDeclared: true } method && HasGetHashCodeSignature(method));
5600foreach (var newCtor in isStatic ? newType.StaticConstructors : newType.InstanceConstructors)
5619IMethodSymbol? oldCtor;
5642oldCtor = (IMethodSymbol)GetRequiredDeclaredSymbol(oldModel.RequiredModel, oldDeclaration, cancellationToken);
5659oldCtor = (IMethodSymbol?)resolution.Symbol;
5792private static IMethodSymbol? TryGetParameterlessConstructor(INamedTypeSymbol type, bool isStatic)
5870var oldLambdaSymbol = isNestedFunction ? GetLambdaExpressionSymbol(oldModel.RequiredModel, oldLambda, cancellationToken) : null;
5871var newLambdaSymbol = isNestedFunction ? GetLambdaExpressionSymbol(newModel.RequiredModel, newLambda, cancellationToken) : null;
5974var oldPrimaryConstructor = oldDeclaration != null && IsPrimaryConstructorDeclaration(oldDeclaration)
5975? (IMethodSymbol)oldMember
5978var newPrimaryConstructor = newDeclaration != null && IsPrimaryConstructorDeclaration(newDeclaration)
5979? (IMethodSymbol)newMember
5988var oldLiftingPrimaryConstructor = oldMember != oldPrimaryConstructor && oldDeclaration != null && !IsDeclarationWithInitializer(oldDeclaration) ? oldPrimaryConstructor : null;
5989var newLiftingPrimaryConstructor = newMember != newPrimaryConstructor && newDeclaration != null && !IsDeclarationWithInitializer(newDeclaration) ? newPrimaryConstructor : null;
6223public static VariableCaptureKey Create(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6227private static VariableCaptureKind GetCaptureKind(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6234IMethodSymbol? liftingPrimaryConstructor,
6311IMethodSymbol? oldLiftingPrimaryConstructor,
6313IMethodSymbol? newLiftingPrimaryConstructor,
6365IMethodSymbol? liftingPrimaryConstructor)
6401IMethodSymbol method => method.AssociatedSymbol,
6453var lambda = parameter.ContainingSymbol is IMethodSymbol { MethodKind: MethodKind.LambdaMethod or MethodKind.LocalFunction } containingLambda ?
6458if (parameter is { IsImplicitlyDeclared: true, ContainingSymbol: IMethodSymbol { AssociatedSymbol: { } associatedSymbol } })
6511IMethodSymbol? oldPrimaryConstructor,
6514IMethodSymbol? newPrimaryConstructor,
6689var oldLambdaSymbol = (IMethodSymbol)diagnosticContext.RequiredOldSymbol;
6690var newLambdaSymbol = (IMethodSymbol)diagnosticContext.RequiredNewSymbol;
6997=> symbol is IMethodSymbol { Name: WellKnownMemberNames.TopLevelStatementsEntryPointMethodName };
7005if (current is IMethodSymbol { Arity: > 0 })
7046public IMethodSymbol? GetPrimaryConstructor(INamedTypeSymbol typeSymbol, CancellationToken cancellationToken)
7051=> symbol is IMethodSymbol { IsStatic: false, MethodKind: MethodKind.Constructor, DeclaringSyntaxReferences: [_] } && IsPrimaryConstructorDeclaration(GetSymbolDeclarationSyntax(symbol, cancellationToken));
7067public IMethodSymbol? GetEncompassingPrimaryConstructor(SyntaxNode declaration, ISymbol symbol, CancellationToken cancellationToken)
7068=> IsPrimaryConstructorDeclaration(declaration) ? (IMethodSymbol)symbol :
7104if (newSymbol is IMethodSymbol { IsStatic: false, ContainingType.IsRecord: true, ReturnsVoid: true, Name: WellKnownMemberNames.DeconstructMethodName } method &&
7145if (newSymbol is IMethodSymbol { AssociatedSymbol: IPropertySymbol { } newProperty })
7147var oldProperty = ((IMethodSymbol)oldSymbol).AssociatedSymbol;
7157private static bool HasPrintMembersSignature(IMethodSymbol method, Compilation compilation)
7160private static bool HasIEquatableEqualsSignature(IMethodSymbol method)
7163private static bool HasGetHashCodeSignature(IMethodSymbol method)
GenerateEqualsAndGetHashCodeFromMembers\IGenerateEqualsAndGetHashCodeService.cs (4)
29Task<IMethodSymbol> GenerateEqualsMethodAsync(Document document, INamedTypeSymbol namedType, ImmutableArray<ISymbol> members, string? localNameOpt, CancellationToken cancellationToken);
35Task<IMethodSymbol> GenerateEqualsMethodThroughIEquatableEqualsAsync(Document document, INamedTypeSymbol namedType, CancellationToken cancellationToken);
41Task<IMethodSymbol> GenerateIEquatableEqualsMethodAsync(Document document, INamedTypeSymbol namedType, ImmutableArray<ISymbol> members, INamedTypeSymbol constructedEquatableType, CancellationToken cancellationToken);
50Task<IMethodSymbol> GenerateGetHashCodeMethodAsync(Document document, INamedTypeSymbol namedType, ImmutableArray<ISymbol> members, CancellationToken cancellationToken);
InitializeParameter\AbstractAddParameterCheckCodeRefactoringProvider.cs (27)
71IMethodSymbol methodSymbol,
104IMethodSymbol methodSymbol,
211document = await AddStringCheckAsync(document, parameter, functionDeclaration, (IMethodSymbol)parameter.ContainingSymbol, blockStatement, NullOrEmptySuffix, lazySimplifierOptions, cancellationToken).ConfigureAwait(false);
217(IMethodSymbol)parameter.ContainingSymbol, blockStatement, lazySimplifierOptions, cancellationToken).ConfigureAwait(false);
420private static (IMethodSymbol? GenericOverload, IMethodSymbol? NonGenericOverload) GetEnumIsDefinedMethods(Compilation compilation)
424var enumIsDefinedGenericMethod = (IMethodSymbol?)enumIsDefinedMembers.FirstOrDefault(m => m is IMethodSymbol { IsStatic: true, Arity: 1, Parameters.Length: 1 });
425var enumIsDefinedNonGenericMethod = (IMethodSymbol?)enumIsDefinedMembers.FirstOrDefault(m => m is IMethodSymbol { IsStatic: true, Arity: 0, Parameters.Length: 2 });
463private static bool IsEnumIsDefinedCheck(IOperation statement, IParameterSymbol parameter, IMethodSymbol? enumIsDefinedGenericMethod, IMethodSymbol? enumIsDefinedNonGenericMethod)
473var method = invocation.TargetMethod;
530var targetMethod = invocation.TargetMethod;
545IMethodSymbol method,
568IMethodSymbol method,
584IMethodSymbol method,
600IMethodSymbol method,
634IMethodSymbol method,
643var enumIsDefinedGenericMethod = enumType.GetMembers(nameof(Enum.IsDefined)).FirstOrDefault(m => m is IMethodSymbol { IsStatic: true, Arity: 1, Parameters.Length: 1 });
698.FirstOrDefault(s => s is IMethodSymbol { Parameters: [{ Type.SpecialType: SpecialType.System_Object }, ..] });
723.FirstOrDefault(s => s is IMethodSymbol { IsStatic: true, Arity: 1, Parameters.Length: 2 });
765.FirstOrDefault(s => s is IMethodSymbol { Parameters: [{ Type.SpecialType: SpecialType.System_String }, ..] });
800var methodSymbol = (IMethodSymbol)parameter.ContainingSymbol;
IntroduceParameter\AbstractIntroduceParameterCodeRefactoringProvider.cs (5)
46protected abstract bool IsDestructor(IMethodSymbol methodSymbol);
74if (containingSymbol is not IMethodSymbol methodSymbol)
155TExpressionSyntax expression, IMethodSymbol methodSymbol, SyntaxNode containingMethod,
252IMethodSymbol methodSymbol, SyntaxNode containingMethod, Dictionary<Document, List<TExpressionSyntax>> methodCallSites, bool allOccurrences, IntroduceParameterCodeActionKind selectedCodeAction,
285Document document, IMethodSymbol methodSymbol, CancellationToken cancellationToken)
ReplaceMethodWithProperty\ReplaceMethodWithPropertyCodeRefactoringProvider.cs (27)
54if (semanticModel.GetDeclaredSymbol(methodDeclaration) is not IMethodSymbol methodSymbol ||
79var setMethod = FindSetMethod(methodSymbol);
96private static IMethodSymbol? FindSetMethod(IMethodSymbol getMethod)
100var setMethod = containingType.GetMembers()
101.OfType<IMethodSymbol>()
109private static bool IsValidGetMethod(IMethodSymbol getMethod)
121private static bool OverridesMethodFromSystemObject(IMethodSymbol method)
123for (var current = method; current != null; current = current.OverriddenMethod)
134private static bool IsValidSetMethod(IMethodSymbol setMethod, IMethodSymbol getMethod)
142private static bool IsValidSetMethod(IMethodSymbol setMethod)
155IMethodSymbol getMethod,
156IMethodSymbol? setMethod,
344MultiDictionary<DocumentId, IMethodSymbol>.ValueSet originalGetDefinitions,
345MultiDictionary<DocumentId, IMethodSymbol>.ValueSet originalSetDefinitions,
380foreach (var originalSetMethod in originalSetDefinitions)
384var setMethod = GetSymbolInCurrentCompilation(compilation, originalSetMethod, cancellationToken);
401MultiDictionary<DocumentId, IMethodSymbol>.ValueSet originalDefinitions,
406foreach (var originalDefinition in originalDefinitions)
410var getMethod = GetSymbolInCurrentCompilation(compilation, originalDefinition, cancellationToken);
413var setMethod = updateSetMethod ? FindSetMethod(getMethod) : null;
433private static async Task<SyntaxNode?> GetMethodDeclarationAsync(IMethodSymbol? method, CancellationToken cancellationToken)
445private static async Task<MultiDictionary<DocumentId, IMethodSymbol>> GetDefinitionsByDocumentIdAsync(
450var result = new MultiDictionary<DocumentId, IMethodSymbol>();
455var definition = referencedSymbol.Definition as IMethodSymbol;
src\roslyn\src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (5)
87protected abstract TExpression? GetGetterExpression(IMethodSymbol getMethod, CancellationToken cancellationToken);
88protected abstract TExpression? GetSetterExpression(SemanticModel semanticModel, IMethodSymbol setMethod, CancellationToken cancellationToken);
91SemanticModel semanticModel, IMethodSymbol accessor, HashSet<string> fieldNames, HashSet<IFieldSymbol> result, CancellationToken cancellationToken);
257IMethodSymbol getMethod,
275SemanticModel semanticModel, IMethodSymbol setMethod, HashSet<string> fieldNames, CancellationToken cancellationToken)
src\roslyn\src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateConversionService.cs (2)
24protected abstract bool TryInitializeImplicitConversionState(SemanticDocument document, SyntaxNode expression, ISet<TypeKind> classInterfaceModuleStructTypes, CancellationToken cancellationToken, out SyntaxToken identifierToken, [NotNullWhen(true)] out IMethodSymbol? methodSymbol, [NotNullWhen(true)] out INamedTypeSymbol? typeToGenerateIn);
25protected abstract bool TryInitializeExplicitConversionState(SemanticDocument document, SyntaxNode expression, ISet<TypeKind> classInterfaceModuleStructTypes, CancellationToken cancellationToken, out SyntaxToken identifierToken, [NotNullWhen(true)] out IMethodSymbol? methodSymbol, [NotNullWhen(true)] out INamedTypeSymbol? typeToGenerateIn);
src\roslyn\src\Analyzers\Core\CodeFixes\ImplementAbstractClass\ImplementAbstractClassData.cs (7)
162IMethodSymbol method => GenerateMethod(compilation, method, throughMember, modifiers, accessibility),
170Compilation compilation, IMethodSymbol method, ISymbol? throughMember,
205var getMethod = ShouldGenerateAccessor(property.GetMethod)
214var setMethod = ShouldGenerateAccessor(property.SetMethod)
241private IMethodSymbol? GetEventAddOrRemoveMethod(
242IEventSymbol @event, IMethodSymbol? accessor, ISymbol? throughMember,
260private bool ShouldGenerateAccessor([NotNullWhen(true)] IMethodSymbol? method)
src\roslyn\src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator.cs (8)
260if (member is not IMethodSymbol method)
299IMethodSymbol method => [GenerateMethod(compilation, method, conflictingMember as IMethodSymbol, accessibility, modifiers, generateAbstractly, useExplicitInterfaceSymbol, memberName)],
308var accessor = CodeGenerationSymbolFactory.CreateAccessorSymbol(
323private IMethodSymbol? GetAddOrRemoveMethod(
324IEventSymbol @event, bool generateInvisibly, IMethodSymbol accessor, string memberName,
360if (member is IMethodSymbol method1 && baseMember is IMethodSymbol method2)
src\roslyn\src\Analyzers\Core\CodeFixes\MakeMethodAsynchronous\AbstractMakeMethodAsynchronousCodeFixProvider.cs (9)
31IMethodSymbol methodSymbol,
62var methodSymbol = GetMethodSymbol(semanticModel, node, cancellationToken);
91private static IMethodSymbol? GetMethodSymbol(SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
95return symbol as IMethodSymbol;
120var methodSymbol = GetMethodSymbol(semanticModel, node, cancellationToken);
162IMethodSymbol methodSymbol,
181var newMethod = (IMethodSymbol)semanticModel.GetRequiredDeclaredSymbol(newNode, cancellationToken);
191IMethodSymbol methodSymbol,
src\roslyn\src\Analyzers\Core\CodeFixes\MakeMethodSynchronous\AbstractMakeMethodSynchronousCodeFixProvider.cs (8)
25protected abstract SyntaxNode RemoveAsyncTokenAndFixReturnType(IMethodSymbol methodSymbol, SyntaxNode node, KnownTaskTypes knownTypes);
56var methodSymbol = (IMethodSymbol?)(semanticModel.GetDeclaredSymbol(node, cancellationToken) ?? semanticModel.GetSymbolInfo(node, cancellationToken).GetAnySymbol());
71private async Task<Solution> RenameThenRemoveAsyncTokenAsync(Document document, SyntaxNode node, IMethodSymbol methodSymbol, CancellationToken cancellationToken)
87var newMethod = (IMethodSymbol)semanticModel.GetRequiredDeclaredSymbol(newNode, cancellationToken);
95Document document, IMethodSymbol methodSymbol, SyntaxNode node, CancellationToken cancellationToken)
126if (semanticModel.GetDeclaredSymbol(methodDeclaration, cancellationToken) is IMethodSymbol methodSymbol)
StackTraceExplorer\StackTraceExplorerUtilities.cs (5)
64var method = await TryGetBestMatchAsync(project, fullyQualifiedTypeName, methodNode, methodArguments, methodTypeArguments, cancellationToken).ConfigureAwait(false);
80var method = await TryGetBestMatchAsync(project, fullyQualifiedTypeName, methodNode, methodArguments, methodTypeArguments, cancellationToken).ConfigureAwait(false);
91Task<DefinitionItem> GetDefinitionAsync(IMethodSymbol method)
107private static async Task<IMethodSymbol?> TryGetBestMatchAsync(Project project, string fullyQualifiedTypeName, StackFrameSimpleNameNode methodNode, StackFrameParameterList methodArguments, StackFrameTypeArgumentList? methodTypeArguments, CancellationToken cancellationToken)
120var matchingMethod = await resolver.TryGetBestMatchAsync(project, type, methodNode, methodArguments, methodTypeArguments, cancellationToken).ConfigureAwait(false);
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (48)
26public static bool IsObjectEqualsOverride(this IMethodSymbol method)
40public static bool IsObjectEquals(this IMethodSymbol method)
54public static bool IsStaticObjectEqualsOrReferenceEquals(this IMethodSymbol method)
69private static bool IsObjectMethodOverride(IMethodSymbol method)
71IMethodSymbol overriddenMethod = method.OverriddenMethod;
89public static bool IsImplementationOfInterfaceMethod(this IMethodSymbol method, ITypeSymbol? typeArgument, [NotNullWhen(returnValue: true)] INamedTypeSymbol? interfaceType, string interfaceMethodName)
93return constructedInterface?.GetMembers(interfaceMethodName).FirstOrDefault() is IMethodSymbol interfaceMethod &&
100public static bool IsDisposeImplementation(this IMethodSymbol method, Compilation compilation)
109public static bool IsAsyncDisposeImplementation(this IMethodSymbol method, Compilation compilation)
119public static bool IsDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iDisposable)
141public static bool IsAsyncDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iAsyncDisposable, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTaskType)
163private static bool HasDisposeMethodSignature(this IMethodSymbol method)
171public static bool HasDisposeSignatureByConvention(this IMethodSymbol method)
181public static bool HasDisposeBoolMethodSignature(this IMethodSymbol method)
192private static bool HasDisposeCloseMethodSignature(this IMethodSymbol method)
200private static bool HasDisposeCloseAsyncMethodSignature(this IMethodSymbol method, INamedTypeSymbol? taskType)
207private static bool HasDisposeAsyncMethodSignature(this IMethodSymbol method,
223private static bool HasOverriddenDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? task)
236private static bool HasVirtualOrOverrideDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTask)
248public static DisposeMethodKind GetDisposeMethodKind(this IMethodSymbol method, Compilation compilation)
263this IMethodSymbol method,
311public static bool IsSerializationConstructor([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
317public static bool IsGetObjectData([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
324public static bool HasOptionalParameters(this IMethodSymbol methodSymbol)
329public static IEnumerable<IMethodSymbol> GetOverloads(this IMethodSymbol? method)
331var methods = method?.ContainingType?.GetMembers(method.Name).OfType<IMethodSymbol>();
334foreach (var member in methods)
364public static bool IsCollectionAddMethod(this IMethodSymbol method, ImmutableHashSet<INamedTypeSymbol> iCollectionTypes)
385public static bool IsTaskFromResultMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskType)
394public static bool IsTaskConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? genericTaskType)
406public static bool IsAsyncDisposableConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? asyncDisposableType, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskAsyncEnumerableExtensions)
420private static readonly BoundedCache<Compilation, ConcurrentDictionary<IMethodSymbol, IBlockOperation?>> s_methodToTopmostOperationBlockCache
426public static IBlockOperation? GetTopmostOperationBlock(this IMethodSymbol method, Compilation compilation, CancellationToken cancellationToken = default)
432IBlockOperation? ComputeTopmostOperationBlock(IMethodSymbol unused)
465public static bool IsLambdaOrLocalFunctionOrDelegate(this IMethodSymbol method)
474public static bool IsLambdaOrLocalFunction(this IMethodSymbol method)
483public static bool IsLockMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? systemThreadingMonitor)
493public static bool IsInterlockedExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
505public static bool IsInterlockedCompareExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
519public static bool HasParameterWithDelegateType(this IMethodSymbol methodSymbol)
527public static bool IsArgumentNullCheckMethod(this IMethodSymbol method)
536public static bool IsBenchmarkOrXUnitTestMethod(this IMethodSymbol method, ConcurrentDictionary<INamedTypeSymbol, bool> knownTestAttributes, INamedTypeSymbol? benchmarkAttribute, INamedTypeSymbol? xunitFactAttribute)
547public static ImmutableArray<IMethodSymbol> GetOriginalDefinitions(this IMethodSymbol methodSymbol)
549ImmutableArray<IMethodSymbol>.Builder originalDefinitionsBuilder = ImmutableArray.CreateBuilder<IMethodSymbol>();
566.OfType<IMethodSymbol>()
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Analyzers\VisualBasic\CodeFixes\GenerateParameterizedMember\VisualBasicGenerateConversionService.vb (6)
55Protected Overrides Function TryInitializeExplicitConversionState(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef identifierToken As SyntaxToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
69Protected Overrides Function TryInitializeImplicitConversionState(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef identifierToken As SyntaxToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
83Private Shared Function TryGetConversionMethodAndTypeToGenerateIn(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
113Private Shared Function TryGetExplicitConversionMethodAndTypeToGenerateIn(document As SemanticDocument, castExpression As CastExpressionSyntax, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
129Private Shared Function TryGetImplicitConversionMethodAndTypeToGenerateIn(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
145Private Shared Function GenerateMethodSymbol(typeToGenerateIn As INamedTypeSymbol, parameterSymbol As INamedTypeSymbol) As IMethodSymbol
src\roslyn\src\Analyzers\VisualBasic\CodeFixes\GenerateParameterizedMember\VisualBasicGenerateConversionService.vb (6)
55Protected Overrides Function TryInitializeExplicitConversionState(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef identifierToken As SyntaxToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
69Protected Overrides Function TryInitializeImplicitConversionState(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef identifierToken As SyntaxToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
83Private Shared Function TryGetConversionMethodAndTypeToGenerateIn(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
113Private Shared Function TryGetExplicitConversionMethodAndTypeToGenerateIn(document As SemanticDocument, castExpression As CastExpressionSyntax, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
129Private Shared Function TryGetImplicitConversionMethodAndTypeToGenerateIn(document As SemanticDocument, expression As SyntaxNode, classInterfaceModuleStructTypes As ISet(Of TypeKind), cancellationToken As CancellationToken, ByRef methodSymbol As IMethodSymbol, ByRef typeToGenerateIn As INamedTypeSymbol) As Boolean
145Private Shared Function GenerateMethodSymbol(typeToGenerateIn As INamedTypeSymbol, parameterSymbol As INamedTypeSymbol) As IMethodSymbol
FindSymbols\FindReferences\Finders\ConstructorSymbolReferenceFinder.cs (16)
17internal sealed class ConstructorSymbolReferenceFinder : AbstractReferenceFinder<IMethodSymbol>
25protected override bool CanFind(IMethodSymbol symbol)
28protected override async ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(IMethodSymbol symbol, Solution solution, FindReferencesSearchOptions options, CancellationToken cancellationToken)
36private static ImmutableArray<ISymbol> GetOtherPartsOfPartial(IMethodSymbol symbol)
47protected override Task<ImmutableArray<string>> DetermineGlobalAliasesAsync(IMethodSymbol symbol, Project project, CancellationToken cancellationToken)
54IMethodSymbol symbol,
94private bool IsCollectionConstructor(IMethodSymbol symbol)
98symbol.ContainingType.GetBaseTypesAndThis().Any(t => t.GetMembers(nameof(IList<>.Add)).Any(m => m is IMethodSymbol { IsStatic: false, Parameters.Length: 1 }));
123IMethodSymbol methodSymbol,
162IMethodSymbol methodSymbol, FindReferencesDocumentState state, Action<FinderLocation, TData> processResult, TData processResultData, string name, string alias, CancellationToken cancellationToken)
179IMethodSymbol symbol,
193IMethodSymbol symbol,
205IMethodSymbol symbol,
225IMethodSymbol symbol,
237IMethodSymbol symbol,
298IMethodSymbol symbol,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (7)
53public TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
82public SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, CodeGenerationContextInfo info, CancellationToken cancellationToken)
125protected abstract TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, TCodeGenerationContextInfo info, IList<bool>? availableIndices, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
147public abstract SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, TCodeGenerationContextInfo info, CancellationToken cancellationToken);
348IMethodSymbol method => CreateMethodDeclaration(method, codeGenerationDestination, info, cancellationToken),
366IMethodSymbol method => AddMethod(currentDestination, method, info, availableIndices, cancellationToken),
446public Task<Document> AddMethodAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IMethodSymbol method, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (28)
33IMethodSymbol? addMethod = null,
34IMethodSymbol? removeMethod = null,
35IMethodSymbol? raiseMethod = null)
52IMethodSymbol? getMethod,
53IMethodSymbol? setMethod,
80ImmutableArray<IParameterSymbol> parameters, IMethodSymbol? getMethod, IMethodSymbol? setMethod,
119public static IMethodSymbol CreateConstructorSymbol(
138public static IMethodSymbol CreateDestructorSymbol(
147internal static IMethodSymbol CreateMethodSymbol(
154ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
172public static IMethodSymbol CreateMethodSymbol(
176ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
191public static IMethodSymbol CreateOperatorSymbol(
219public static IMethodSymbol CreateConversionSymbol(
244public static IMethodSymbol CreateConversionSymbol(
356internal static IMethodSymbol CreateAccessorSymbol(
357IMethodSymbol accessor,
360ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
382public static IMethodSymbol CreateAccessorSymbol(
470var invokeMethod = CreateMethodSymbol(
510internal static IMethodSymbol CreateMethodSymbol(
511IMethodSymbol method,
515ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
549IMethodSymbol? getMethod = null,
550IMethodSymbol? setMethod = null,
575IMethodSymbol? addMethod = null,
576IMethodSymbol? removeMethod = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (13)
106protected static IMethodSymbol? FindDisposeMethod(Compilation compilation, ITypeSymbol? type, bool isAsync)
118if (impl is IMethodSymbol implMethod)
136.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnType: var returnType, Parameters.Length: 0 } &&
137SymbolEqualityComparer.Default.Equals(returnType, valueTaskType)) is IMethodSymbol disposeMethodFromPattern)
152.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnsVoid: true, Parameters.Length: 0 }) is IMethodSymbol disposeMethodFromPattern)
165(INamedTypeSymbol?, IMethodSymbol?) GetIDisposableInterfaceAndDisposeMethod(string typeName, string methodName)
168return (disposableType, disposableType?.GetMembers().OfType<IMethodSymbol>().FirstOrDefault(m => m.Parameters.Length == 0 && m.Name == methodName));
216public IMethodSymbol? GetGetAwaiterMethod(SemanticModel semanticModel, SyntaxNode node)
219public ImmutableArray<IMethodSymbol> GetDeconstructionAssignmentMethods(SemanticModel semanticModel, SyntaxNode node)
222public ImmutableArray<IMethodSymbol> GetDeconstructionForEachMethods(SemanticModel semanticModel, SyntaxNode node)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
261public bool TryGetPrimaryConstructor(INamedTypeSymbol typeSymbol, [NotNullWhen(true)] out IMethodSymbol? primaryConstructor)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (48)
26public static bool IsObjectEqualsOverride(this IMethodSymbol method)
40public static bool IsObjectEquals(this IMethodSymbol method)
54public static bool IsStaticObjectEqualsOrReferenceEquals(this IMethodSymbol method)
69private static bool IsObjectMethodOverride(IMethodSymbol method)
71IMethodSymbol overriddenMethod = method.OverriddenMethod;
89public static bool IsImplementationOfInterfaceMethod(this IMethodSymbol method, ITypeSymbol? typeArgument, [NotNullWhen(returnValue: true)] INamedTypeSymbol? interfaceType, string interfaceMethodName)
93return constructedInterface?.GetMembers(interfaceMethodName).FirstOrDefault() is IMethodSymbol interfaceMethod &&
100public static bool IsDisposeImplementation(this IMethodSymbol method, Compilation compilation)
109public static bool IsAsyncDisposeImplementation(this IMethodSymbol method, Compilation compilation)
119public static bool IsDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iDisposable)
141public static bool IsAsyncDisposeImplementation([NotNullWhen(returnValue: true)] this IMethodSymbol? method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? iAsyncDisposable, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTaskType)
163private static bool HasDisposeMethodSignature(this IMethodSymbol method)
171public static bool HasDisposeSignatureByConvention(this IMethodSymbol method)
181public static bool HasDisposeBoolMethodSignature(this IMethodSymbol method)
192private static bool HasDisposeCloseMethodSignature(this IMethodSymbol method)
200private static bool HasDisposeCloseAsyncMethodSignature(this IMethodSymbol method, INamedTypeSymbol? taskType)
207private static bool HasDisposeAsyncMethodSignature(this IMethodSymbol method,
223private static bool HasOverriddenDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? task)
236private static bool HasVirtualOrOverrideDisposeCoreAsyncMethodSignature(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? valueTask)
248public static DisposeMethodKind GetDisposeMethodKind(this IMethodSymbol method, Compilation compilation)
263this IMethodSymbol method,
311public static bool IsSerializationConstructor([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
317public static bool IsGetObjectData([NotNullWhen(returnValue: true)] this IMethodSymbol? method, INamedTypeSymbol? serializationInfoType, INamedTypeSymbol? streamingContextType)
324public static bool HasOptionalParameters(this IMethodSymbol methodSymbol)
329public static IEnumerable<IMethodSymbol> GetOverloads(this IMethodSymbol? method)
331var methods = method?.ContainingType?.GetMembers(method.Name).OfType<IMethodSymbol>();
334foreach (var member in methods)
364public static bool IsCollectionAddMethod(this IMethodSymbol method, ImmutableHashSet<INamedTypeSymbol> iCollectionTypes)
385public static bool IsTaskFromResultMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskType)
394public static bool IsTaskConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? genericTaskType)
406public static bool IsAsyncDisposableConfigureAwaitMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? asyncDisposableType, [NotNullWhen(returnValue: true)] INamedTypeSymbol? taskAsyncEnumerableExtensions)
420private static readonly BoundedCache<Compilation, ConcurrentDictionary<IMethodSymbol, IBlockOperation?>> s_methodToTopmostOperationBlockCache
426public static IBlockOperation? GetTopmostOperationBlock(this IMethodSymbol method, Compilation compilation, CancellationToken cancellationToken = default)
432IBlockOperation? ComputeTopmostOperationBlock(IMethodSymbol unused)
465public static bool IsLambdaOrLocalFunctionOrDelegate(this IMethodSymbol method)
474public static bool IsLambdaOrLocalFunction(this IMethodSymbol method)
483public static bool IsLockMethod(this IMethodSymbol method, [NotNullWhen(returnValue: true)] INamedTypeSymbol? systemThreadingMonitor)
493public static bool IsInterlockedExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
505public static bool IsInterlockedCompareExchangeMethod(this IMethodSymbol method, INamedTypeSymbol? systemThreadingInterlocked)
519public static bool HasParameterWithDelegateType(this IMethodSymbol methodSymbol)
527public static bool IsArgumentNullCheckMethod(this IMethodSymbol method)
536public static bool IsBenchmarkOrXUnitTestMethod(this IMethodSymbol method, ConcurrentDictionary<INamedTypeSymbol, bool> knownTestAttributes, INamedTypeSymbol? benchmarkAttribute, INamedTypeSymbol? xunitFactAttribute)
547public static ImmutableArray<IMethodSymbol> GetOriginalDefinitions(this IMethodSymbol methodSymbol)
549ImmutableArray<IMethodSymbol>.Builder originalDefinitionsBuilder = ImmutableArray.CreateBuilder<IMethodSymbol>();
566.OfType<IMethodSymbol>()
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (12)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap;
79PooledHashSet<IMethodSymbol> lambdaOrLocalFunctionsBeingAnalyzed,
80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap,
112protected override PooledHashSet<IMethodSymbol> LambdaOrLocalFunctionsBeingAnalyzed { get; }
119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
133lambdaOrLocalFunctionsBeingAnalyzed: PooledHashSet<IMethodSymbol>.GetInstance(),
136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(),
157IMethodSymbol lambdaOrLocalFunction,
336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
501protected override BasicBlockAnalysisData AnalyzeLocalFunctionInvocationCore(IMethodSymbol localFunction, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.MethodSymbolKey.cs (22)
11private sealed class ReducedExtensionMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
15public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
24SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
41using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
42foreach (var reducedFrom in reducedFromResolution.OfType<IMethodSymbol>())
55private sealed class ConstructedMethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
59public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
66SymbolKeyReader reader, IMethodSymbol? contextualMethod, out string? failureReason)
70using var typeArguments = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
101using var result = PooledArrayBuilder<IMethodSymbol>.GetInstance();
102foreach (var method in constructedFrom.OfType<IMethodSymbol>())
123private sealed class MethodSymbolKey : AbstractSymbolKey<IMethodSymbol>
127public sealed override void Create(IMethodSymbol symbol, SymbolKeyWriter visitor)
160SymbolKeyReader reader, IMethodSymbol? contextualSymbol, out string? failureReason)
179using var methods = GetMembersOfNamedType<IMethodSymbol>(containingType, metadataName: null);
180IMethodSymbol? method = null;
181foreach (var candidate in methods)
223_ = reader.ReadSymbolKeyArray<IMethodSymbol, ITypeSymbol>(
243private static IMethodSymbol? Resolve(
244SymbolKeyReader reader, bool isPartialImplementationPart, IMethodSymbol method)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Utilities\AbstractSpeculationAnalyzer.cs (14)
112SemanticModel model, TForEachStatementSyntax forEach, out IMethodSymbol getEnumeratorMethod, out ITypeSymbol elementType, out ImmutableArray<ILocalSymbol> localVariables);
379symbol = ((IMethodSymbol)symbol).GetConstructedReducedFrom()!;
384newSymbol = ((IMethodSymbol)newSymbol).GetConstructedReducedFrom()!;
404if (symbol is IMethodSymbol methodSymbol && newSymbol is IMethodSymbol newMethodSymbol)
478if (symbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } methodSymbol &&
479newSymbol is IMethodSymbol { MethodKind: MethodKind.LocalFunction } newMethodSymbol)
757return symbol is IMethodSymbol { ContainingType.SpecialType: SpecialType.System_Object }
778GetForEachSymbols(this.OriginalSemanticModel, forEachStatement, out var originalGetEnumerator, out var originalElementType, out var originalLocalVariables);
779GetForEachSymbols(this.SpeculativeSemanticModel, newForEachStatement, out var newGetEnumerator, out var newElementType, out var newLocalVariables);
806private bool ReplacementBreaksForEachGetEnumerator(IMethodSymbol getEnumerator, IMethodSymbol newGetEnumerator, TExpressionSyntax newForEachStatementExpression)
875=> symbol is IMethodSymbol { MethodKind: MethodKind.DelegateInvoke };
1048return receiverSymbol is IMethodSymbol or IPropertySymbol;
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.EquivalenceVisitor.cs (8)
124SymbolKind.Method => MethodsAreEquivalent((IMethodSymbol)x, (IMethodSymbol)y, equivalentTypesWithDifferingAssemblies),
170private bool MethodsAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies, bool considerReturnRefKinds = false)
186var rx = x.ReducedFrom;
187var ry = y.ReducedFrom;
486internal bool ReturnTypesAreEquivalent(IMethodSymbol x, IMethodSymbol y, Dictionary<INamedTypeSymbol, INamedTypeSymbol>? equivalentTypesWithDifferingAssemblies = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (7)
53public TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
82public SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, CodeGenerationContextInfo info, CancellationToken cancellationToken)
125protected abstract TDeclarationNode AddMethod<TDeclarationNode>(TDeclarationNode destination, IMethodSymbol method, TCodeGenerationContextInfo info, IList<bool>? availableIndices, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
147public abstract SyntaxNode? CreateMethodDeclaration(IMethodSymbol method, CodeGenerationDestination destination, TCodeGenerationContextInfo info, CancellationToken cancellationToken);
348IMethodSymbol method => CreateMethodDeclaration(method, codeGenerationDestination, info, cancellationToken),
366IMethodSymbol method => AddMethod(currentDestination, method, info, availableIndices, cancellationToken),
446public Task<Document> AddMethodAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IMethodSymbol method, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (28)
33IMethodSymbol? addMethod = null,
34IMethodSymbol? removeMethod = null,
35IMethodSymbol? raiseMethod = null)
52IMethodSymbol? getMethod,
53IMethodSymbol? setMethod,
80ImmutableArray<IParameterSymbol> parameters, IMethodSymbol? getMethod, IMethodSymbol? setMethod,
119public static IMethodSymbol CreateConstructorSymbol(
138public static IMethodSymbol CreateDestructorSymbol(
147internal static IMethodSymbol CreateMethodSymbol(
154ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
172public static IMethodSymbol CreateMethodSymbol(
176ImmutableArray<IMethodSymbol> explicitInterfaceImplementations,
191public static IMethodSymbol CreateOperatorSymbol(
219public static IMethodSymbol CreateConversionSymbol(
244public static IMethodSymbol CreateConversionSymbol(
356internal static IMethodSymbol CreateAccessorSymbol(
357IMethodSymbol accessor,
360ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
382public static IMethodSymbol CreateAccessorSymbol(
470var invokeMethod = CreateMethodSymbol(
510internal static IMethodSymbol CreateMethodSymbol(
511IMethodSymbol method,
515ImmutableArray<IMethodSymbol> explicitInterfaceImplementations = default,
549IMethodSymbol? getMethod = null,
550IMethodSymbol? setMethod = null,
575IMethodSymbol? addMethod = null,
576IMethodSymbol? removeMethod = null)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (13)
106protected static IMethodSymbol? FindDisposeMethod(Compilation compilation, ITypeSymbol? type, bool isAsync)
118if (impl is IMethodSymbol implMethod)
136.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnType: var returnType, Parameters.Length: 0 } &&
137SymbolEqualityComparer.Default.Equals(returnType, valueTaskType)) is IMethodSymbol disposeMethodFromPattern)
152.FirstOrDefault(m => m is IMethodSymbol { DeclaredAccessibility: Accessibility.Public, ReturnsVoid: true, Parameters.Length: 0 }) is IMethodSymbol disposeMethodFromPattern)
165(INamedTypeSymbol?, IMethodSymbol?) GetIDisposableInterfaceAndDisposeMethod(string typeName, string methodName)
168return (disposableType, disposableType?.GetMembers().OfType<IMethodSymbol>().FirstOrDefault(m => m.Parameters.Length == 0 && m.Name == methodName));
216public IMethodSymbol? GetGetAwaiterMethod(SemanticModel semanticModel, SyntaxNode node)
219public ImmutableArray<IMethodSymbol> GetDeconstructionAssignmentMethods(SemanticModel semanticModel, SyntaxNode node)
222public ImmutableArray<IMethodSymbol> GetDeconstructionForEachMethods(SemanticModel semanticModel, SyntaxNode node)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
261public bool TryGetPrimaryConstructor(INamedTypeSymbol typeSymbol, [NotNullWhen(true)] out IMethodSymbol? primaryConstructor)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\CodeGeneration\MethodGenerator.cs (12)
32IMethodSymbol method,
45IMethodSymbol method,
60IMethodSymbol method,
75IMethodSymbol method, CodeGenerationDestination destination,
93IMethodSymbol method,
112IMethodSymbol method, CodeGenerationDestination destination,
165IMethodSymbol method, CodeGenerationDestination destination,
220IMethodSymbol method, bool isExplicit, CSharpCodeGenerationContextInfo info)
231IMethodSymbol method)
238private static SyntaxList<TypeParameterConstraintClauseSyntax> GenerateDefaultConstraints(IMethodSymbol method)
312IMethodSymbol method, CSharpCodeGenerationContextInfo info)
318IMethodSymbol method,