src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.cs (1)
30ISymbol owningSymbol,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateDataFlowOperationVisitor.cs (1)
50ISymbol owningSymbol;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.ParameterValidationDataFlowOperationVisitor.cs (1)
70ISymbol GetBottomOfStackOwningSymbol()
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.TaintedDataOperationVisitor.cs (1)
531ISymbol sinkSymbol,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractLocation.cs (5)
24/// 3. Location created for certain symbols which do not have a declaration in executable code, i.e. no <see cref="IOperation"/> for declaration (such as parameter symbols, member symbols, etc. - <see cref="CreateSymbolLocation(ISymbol, ImmutableStack{IOperation})"/>/>).
35private AbstractLocation(IOperation? creation, ImmutableStack<IOperation>? creationCallStack, AnalysisEntity? analysisEntity, ISymbol? symbol, InterproceduralCaptureId? captureId, ITypeSymbol? locationType, bool isSpecialSingleton)
48private static AbstractLocation Create(IOperation? creation, ImmutableStack<IOperation>? creationCallStack, AnalysisEntity? analysisEntity, ISymbol? symbol, InterproceduralCaptureId? captureId, ITypeSymbol? locationType)
64public static AbstractLocation CreateSymbolLocation(ISymbol symbol, ImmutableStack<IOperation>? creationCallStack)
87public ISymbol? Symbol { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityFactory.cs (10)
34private readonly Dictionary<ISymbol, PointsToAbstractValue> _instanceLocationsForSymbols;
41private readonly Func<ISymbol, ImmutableStack<IOperation>?> _getInterproceduralCallStackForOwningSymbol;
53ImmutableDictionary<ISymbol, PointsToAbstractValue>? interproceduralCapturedVariablesMap,
55Func<ISymbol, ImmutableStack<IOperation>?> getInterproceduralCallStackForOwningSymbol)
133ISymbol? symbol = null;
271private static void GetSymbolAndIndicesForMemberReference(IMemberReferenceOperation memberReference, ref ISymbol? symbol, ref ImmutableArray<AbstractIndex> indices)
311public bool TryCreateForSymbolDeclaration(ISymbol symbol, [NotNullWhen(returnValue: true)] out AnalysisEntity? analysisEntity)
439private bool TryCreate(ISymbol? symbol, ImmutableArray<AbstractIndex> indices,
515private PointsToAbstractValue? EnsureLocation(PointsToAbstractValue? instanceLocation, ISymbol? symbol, AnalysisEntity? parent)
554private AnalysisEntity Create(ISymbol? symbol, ImmutableArray<AbstractIndex> indices, ITypeSymbol type, PointsToAbstractValue? instanceLocation, AnalysisEntity? parent, AnalysisEntity? entityForInstanceLocation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (26)
89protected virtual void HandleNamedTypeSymbolStart(SymbolStartAnalysisContext context, Action<ISymbol, ValueUsageInfo> onSymbolUsageFound)
99internal sealed class OriginalDefinitionSymbolEqualityComparer : IEqualityComparer<ISymbol>
107bool IEqualityComparer<ISymbol>.Equals(ISymbol? x, ISymbol? y)
110int IEqualityComparer<ISymbol>.GetHashCode(ISymbol obj)
118private static readonly ObjectPool<HashSet<ISymbol>> s_originalDefinitionSymbolHashSetPool = new(() => new(OriginalDefinitionSymbolEqualityComparer.Instance));
123private readonly Dictionary<ISymbol, ValueUsageInfo> _symbolValueUsageStateMap_doNotAccessDirectly = new(OriginalDefinitionSymbolEqualityComparer.Instance);
165private static Location GetDiagnosticLocation(ISymbol symbol)
230Action<ISymbol, ValueUsageInfo> onSymbolUsageFound = OnSymbolUsage;
283foreach (var member in namedType.GetMembers())
302var symbol = symbolContext.Symbol;
315private void AddSymbolUsage(ISymbol? symbol, ValueUsageInfo info)
326private void UpdateSymbolUsage(ISymbol? symbol, ValueUsageInfo info)
340private bool TryGetAndRemoveSymbolUsage(ISymbol memberSymbol, out ValueUsageInfo valueUsageInfo)
380private void OnSymbolUsage(ISymbol? memberSymbol, ValueUsageInfo usageInfo)
391var memberSymbol = memberReference.Member;
490foreach (var symbol in symbolInfo.GetAllSymbols())
526foreach (var member in namedType.GetMembers())
633ISymbol member,
675HashSet<ISymbol> builder,
695var symbol = lazyModel.GetSymbolInfo(node, cancellationToken).Symbol;
757foreach (var member in namedTypeSymbol.GetMembers())
772private void AddDebuggerDisplayAttributeArgumentsCore(ISymbol symbol, ArrayBuilder<string> builder)
798private bool IsCandidateSymbol([NotNullWhen(true)] ISymbol? memberSymbol)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (7)
32/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
45/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
51/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
253/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>.
301/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>.
366private bool ShouldAnalyze(IOperation operationBlock, ISymbol owningSymbol, ref bool hasUnknownOperationNoneDescendant)
589ISymbol symbol,
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (1)
17ISymbol containingSymbol,
src\Analyzers\Core\Analyzers\UseThrowExpression\AbstractUseThrowExpressionDiagnosticAnalyzer.cs (6)
106if (!TryDecomposeIfCondition(ifOperation, out var localOrParameter))
138private static bool ValueIsAccessed(SemanticModel semanticModel, IConditionalOperation ifOperation, IBlockOperation containingBlock, ISymbol localOrParameter, IExpressionStatementOperation expressionStatement, IAssignmentOperation assignmentExpression)
167IBlockOperation containingBlock, IConditionalOperation ifOperation, ISymbol localOrParameter,
189if (!TryGetLocalOrParameterSymbol(assignmentExpression.Value, out var assignmentValue))
209[NotNullWhen(true)] out ISymbol? localOrParameter)
241[NotNullWhen(true)] out ISymbol? localOrParameter)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Analyzers\Core\CodeFixes\ImplementAbstractClass\ImplementAbstractClassData.cs (19)
29ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers)
35private readonly ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> _unimplementedMembers = unimplementedMembers;
83ISymbol? throughMember, bool? canDelegateAllMembers, CancellationToken cancellationToken)
120private ImmutableArray<ISymbol> GenerateMembers(
121Compilation compilation, ISymbol? throughMember,
131private ISymbol? GenerateMember(
132Compilation compilation, ISymbol member, ISymbol? throughMember,
145private ISymbol? GenerateMember(
146Compilation compilation, ISymbol member, ISymbol? throughMember, bool addUnsafe,
169private ISymbol GenerateMethod(
170Compilation compilation, IMethodSymbol method, ISymbol? throughMember,
191ISymbol? throughMember,
232IEventSymbol @event, ISymbol? throughMember, Accessibility accessibility, DeclarationModifiers modifiers)
242IEventSymbol @event, IMethodSymbol? accessor, ISymbol? throughMember,
263public ImmutableArray<(ISymbol symbol, bool canDelegateAllMembers)> GetDelegatableMembers(CancellationToken cancellationToken)
271using var _ = ArrayBuilder<(ISymbol symbol, bool canDelegateAllMembers)>.GetInstance(out var result);
278foreach (var member in members)
src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator.cs (29)
40private ISymbol? ThroughMember => Configuration.ThroughMember;
70ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers,
71ImmutableArray<ISymbol> extraMembers,
100private ImmutableArray<ISymbol> GenerateMembers(
103ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers,
120using var _1 = ArrayBuilder<ISymbol>.GetInstance(out var implementedVisibleMembers);
121using var _2 = ArrayBuilder<ISymbol>.GetInstance(out var implementedMembers);
125foreach (var unimplementedInterfaceMember in unimplementedInterfaceMembers)
154private string DetermineMemberName(ISymbol member, ArrayBuilder<ISymbol> implementedVisibleMembers, out ISymbol? conflictingMember)
161var memberNames = State.ClassOrStructType.GetAccessibleMembersInThisAndBaseTypes<ISymbol>(State.ClassOrStructType).Select(m => m.Name);
173private IEnumerable<ISymbol?> GenerateMembers(
176ISymbol member,
177ArrayBuilder<ISymbol> implementedVisibleMembers,
194var memberName = DetermineMemberName(member, implementedVisibleMembers, out var conflictingMember);
223ParseOptions options, ISymbol member, string memberName, bool supportsImplementingLessAccessibleMember)
251private bool HasUnexpressibleConstraint(ParseOptions options, ISymbol member)
278public ImmutableArray<ISymbol> GenerateMembers(
280ISymbol member,
281ISymbol? conflictingMember,
306private ISymbol GenerateEvent(Compilation compilation, string memberName, bool generateInvisibly, SyntaxGenerator factory, DeclarationModifiers modifiers, bool useExplicitInterfaceSymbol, Accessibility accessibility, IEventSymbol @event)
344ISymbol member,
358private static bool HasNameConflict(ISymbol member, ISymbol baseMember)
381private bool HasMatchingMember(ArrayBuilder<ISymbol> implementedVisibleMembers, ISymbol member)
406private bool MembersMatch(ISymbol existingMember, ISymbol memberToAdd)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (1)
55ISymbol symbol,
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordHelpers.cs (26)
314var positionalParam = param.ContainingSymbol.ContainingType.GetMembers().FirstOrDefault(member
378var dictionaryBuilder = ImmutableDictionary<ISymbol, ExpressionSyntax>.Empty.ToBuilder();
403ImmutableDictionary<ISymbol, ExpressionSyntax> assignmentValues)
419private static ImmutableDictionary<ISymbol, T> GetAssignmentValuesForConstructor<T>(
424var dictionaryBuilder = ImmutableDictionary<ISymbol, T>.Empty.ToBuilder();
430return ImmutableDictionary<ISymbol, T>.Empty;
445ISymbol? symbol = assignee switch
461return ImmutableDictionary<ISymbol, T>.Empty;
506ISymbol? otherC = null;
532value, successRequirement: true, type, fields, out var _2))
569[NotNullWhen(true)] out ISymbol? assignedVariable)
609private static ISymbol? GetReferencedSymbolObject(IOperation reference)
657ISymbol otherObject)
726ISymbol currentObject,
727ISymbol otherObject,
785ISymbol currentObject,
787[NotNullWhen(true)] out ISymbol? boundVariable,
833bool TryGetBoundVariableForIsPattern(IPatternOperation isPattern, [NotNullWhen(true)] out ISymbol? boundVariable)
854DeclaredSymbol: ISymbol otherVar,
880ISymbol otherC,
918ISymbol currentObject,
919ISymbol otherObject,
922var leftObject = GetReferencedSymbolObject(memberReference1.Instance!);
923var rightObject = GetReferencedSymbolObject(memberReference2.Instance!);
960[NotNullWhen(true)] out ISymbol? otherC,
1124private static IFieldSymbol? UnwrapPropertyToField(ISymbol propertyOrField)
ChangeSignature\CSharpChangeSignatureService.cs (14)
115public override async Task<(ISymbol? symbol, int selectedIndex)> GetInvocationSymbolAsync(
165var typeSymbol = semanticModel.GetSymbolInfo(objectCreation.Type, cancellationToken).Symbol;
292ISymbol declarationSymbol,
533ISymbol declarationSymbol,
570ISymbol declarationSymbol,
712ISymbol declarationSymbol,
733ISymbol declarationSymbol,
749ISymbol declarationSymbol,
789ISymbol declarationSymbol,
808private ImmutableArray<SyntaxNode> VerifyAndPermuteParamNodes(IEnumerable<XmlElementSyntax> paramNodes, ISymbol declarationSymbol, SignatureChange updatedSignature)
868public override async Task<ImmutableArray<ISymbol>> DetermineCascadedSymbolsFromDelegateInvokeAsync(
886var convertedType = (ISymbol?)semanticModel.GetTypeInfo(node, cancellationToken).ConvertedType;
942protected override ImmutableArray<IParameterSymbol> GetParameters(ISymbol declarationSymbol)
Completion\CompletionProviders\CrefCompletionProvider.cs (11)
89protected override async Task<(SyntaxToken, SemanticModel?, ImmutableArray<ISymbol>)> GetSymbolsAsync(
164private static ImmutableArray<ISymbol> GetSymbols(
179private static ImmutableArray<ISymbol> GetUnqualifiedSymbols(
182using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
210private static ImmutableArray<ISymbol> GetQualifiedSymbols(
214var leftSymbol = semanticModel.GetSymbolInfo(parent.Container, cancellationToken).Symbol;
218using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
237SemanticModel semanticModel, ImmutableArray<ISymbol> symbols, SyntaxToken token, int position, ImmutableArray<KeyValuePair<string, string>> options)
259SemanticModel semanticModel, ISymbol symbol, SyntaxToken token, int position, StringBuilder builder,
277ISymbol symbol,
329ISymbol symbol, int position, StringBuilder builder, string sortText, ImmutableArray<KeyValuePair<string, string>> options)
EditAndContinue\CSharpEditAndContinueAnalyzer.cs (22)
173internal override MemberBody? TryGetDeclarationBody(SyntaxNode node, ISymbol? symbol)
176internal override bool IsDeclarationWithSharedBody(SyntaxNode declaration, ISymbol member)
935internal override bool IsConstructorWithMemberInitializers(ISymbol symbol, CancellationToken cancellationToken)
987protected override SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, Func<ImmutableArray<SyntaxReference>, SyntaxReference?> selector, CancellationToken cancellationToken)
1012protected override ISymbol? GetDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken)
1025protected override OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol)> GetEditedSymbols(
1045OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol)> AddFieldSymbolUpdates(SeparatedSyntaxList<VariableDeclaratorSyntax> oldVariables, SeparatedSyntaxList<VariableDeclaratorSyntax> newVariables)
1058var oldSymbol = (oldNode != null) ? GetSymbolForEdit(oldNode, oldModel.RequiredModel, cancellationToken) : null;
1059var newSymbol = (newNode != null) ? GetSymbolForEdit(newNode, newModel.RequiredModel, cancellationToken) : null;
1062? OneOrMany<(ISymbol?, ISymbol?)>.Empty
1067ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result,
1070ISymbol? oldSymbol,
1072ISymbol? newSymbol,
1083var oldContainingMemberOrType = GetParameterContainingMemberOrType(oldNode, newNode, oldModel, topMatch.ReverseMatches, cancellationToken);
1084var newContainingMemberOrType = GetParameterContainingMemberOrType(newNode, oldNode, newModel, topMatch.Matches, cancellationToken);
1378private ISymbol? GetSymbolForEdit(
1415private ISymbol? GetParameterContainingMemberOrType(SyntaxNode? node, SyntaxNode? otherNode, DocumentSemanticModel model, IReadOnlyDictionary<SyntaxNode, SyntaxNode> fromOtherMap, CancellationToken cancellationToken)
2508internal override void ReportInsertedMemberSymbolRudeEdits(RudeEditDiagnosticsBuilder diagnostics, ISymbol newSymbol, SyntaxNode newNode, bool insertingIntoExistingContainingType)
ImplementInterface\AbstractChangeImplementationCodeRefactoringProvider.cs (10)
29using MemberImplementationMap = OrderedMultiDictionary<ISymbol, ISymbol>;
44protected abstract bool CheckMemberCanBeConverted(ISymbol member);
45protected abstract SyntaxNode ChangeImplementation(SyntaxGenerator generator, SyntaxNode currentDecl, ISymbol implMember, ISymbol interfaceMember);
46protected abstract Task UpdateReferencesAsync(Project project, SolutionEditor solutionEditor, ISymbol implMember, INamedTypeSymbol containingType, CancellationToken cancellationToken);
195foreach (var interfaceMember in interfaceType.GetMembers())
197var impl = containingType.FindImplementationForInterfaceMember(interfaceMember);
231var documentToImplDeclarations = new OrderedMultiDictionary<Document, (SyntaxNode, ISymbol impl, SetWithInsertionOrder<ISymbol> interfaceMembers)>();
SignatureHelp\InvocationExpressionSignatureHelpProviderBase_MethodGroup.cs (1)
38ISymbol within,
src\Analyzers\CSharp\Analyzers\UsePrimaryConstructor\CSharpUsePrimaryConstructorDiagnosticAnalyzer.cs (13)
64private static readonly ObjectPool<ConcurrentSet<ISymbol>> s_concurrentSetPool = new(() => []);
86[NotNullWhen(true)] ISymbol? member,
144PooledDictionary<ISymbol, IParameterSymbol> candidateMembersToRemove,
153private readonly PooledDictionary<ISymbol, IParameterSymbol> _candidateMembersToRemove = candidateMembersToRemove;
160private readonly ConcurrentSet<ISymbol> _membersThatCannotBeRemoved = s_concurrentSetPool.Allocate();
323var candidateMembersToRemove = PooledDictionary<ISymbol, IParameterSymbol>.GetInstance();
387Dictionary<ISymbol, IParameterSymbol> candidateMembersToRemove)
409Dictionary<ISymbol, IParameterSymbol> candidateMembersToRemove)
415using var _1 = PooledHashSet<ISymbol>.GetInstance(out var assignedMembers);
422namedType, semanticModel, assignmentExpression, candidateMembersToRemove, orderedParameterAssignments, out var member))
466Dictionary<ISymbol, IParameterSymbol> candidateMembersToRemove,
468[NotNullWhen(true)] out ISymbol? member)
555var member = operation.Member.OriginalDefinition;
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordHelpers.cs (26)
314var positionalParam = param.ContainingSymbol.ContainingType.GetMembers().FirstOrDefault(member
378var dictionaryBuilder = ImmutableDictionary<ISymbol, ExpressionSyntax>.Empty.ToBuilder();
403ImmutableDictionary<ISymbol, ExpressionSyntax> assignmentValues)
419private static ImmutableDictionary<ISymbol, T> GetAssignmentValuesForConstructor<T>(
424var dictionaryBuilder = ImmutableDictionary<ISymbol, T>.Empty.ToBuilder();
430return ImmutableDictionary<ISymbol, T>.Empty;
445ISymbol? symbol = assignee switch
461return ImmutableDictionary<ISymbol, T>.Empty;
506ISymbol? otherC = null;
532value, successRequirement: true, type, fields, out var _2))
569[NotNullWhen(true)] out ISymbol? assignedVariable)
609private static ISymbol? GetReferencedSymbolObject(IOperation reference)
657ISymbol otherObject)
726ISymbol currentObject,
727ISymbol otherObject,
785ISymbol currentObject,
787[NotNullWhen(true)] out ISymbol? boundVariable,
833bool TryGetBoundVariableForIsPattern(IPatternOperation isPattern, [NotNullWhen(true)] out ISymbol? boundVariable)
854DeclaredSymbol: ISymbol otherVar,
880ISymbol otherC,
918ISymbol currentObject,
919ISymbol otherObject,
922var leftObject = GetReferencedSymbolObject(memberReference1.Instance!);
923var rightObject = GetReferencedSymbolObject(memberReference2.Instance!);
960[NotNullWhen(true)] out ISymbol? otherC,
1124private static IFieldSymbol? UnwrapPropertyToField(ISymbol propertyOrField)
ChangeSignature\AbstractChangeSignatureService.cs (16)
41public abstract Task<(ISymbol? symbol, int selectedIndex)> GetInvocationSymbolAsync(Document document, int position, bool restrictToDeclarations, CancellationToken cancellationToken);
49public abstract Task<ImmutableArray<ISymbol>> DetermineCascadedSymbolsFromDelegateInvokeAsync(
54ISymbol declarationSymbol,
89protected abstract ImmutableArray<IParameterSymbol> GetParameters(ISymbol declarationSymbol);
226ISymbol symbol,
252var declaredSymbol = context.Symbol;
255var definitionToUse = new Dictionary<SyntaxNode, ISymbol>();
287var symbolWithSyntacticParameters = symbol.Definition;
288var symbolWithSemanticParameters = symbol.Definition;
445private static void AddUpdatableNodeToDictionaries(Dictionary<DocumentId, List<SyntaxNode>> nodesToUpdate, DocumentId documentId, SyntaxNode nodeToUpdate, Dictionary<SyntaxNode, ISymbol> definitionToUse, ISymbol symbolWithSemanticParameters)
448if (definitionToUse.TryGetValue(nodeToUpdate, out var sym) && sym != symbolWithSemanticParameters)
471ISymbol declarationSymbol,
581private SignatureChange UpdateSignatureChangeToIncludeExtraParametersFromTheDeclarationSymbol(ISymbol declarationSymbol, SignatureChange updatedSignature)
766ISymbol declarationSymbol,
1043protected static bool IsParamsArrayExpandedHelper(ISymbol symbol, int argumentCount, bool lastArgumentIsNamed, SemanticModel semanticModel, SyntaxNode lastArgumentExpression, CancellationToken cancellationToken)
CodeFixes\Suppression\AbstractSuppressionCodeFixProvider.GlobalSuppressMessageFixAllCodeAction.cs (12)
28private readonly IEnumerable<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>> _diagnosticsBySymbol;
33IEnumerable<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>> diagnosticsBySymbol,
152private static async Task<IEnumerable<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>>> CreateDiagnosticsBySymbolAsync(AbstractSuppressionCodeFixProvider fixer, IEnumerable<KeyValuePair<Document, ImmutableArray<Diagnostic>>> diagnosticsByDocument, CancellationToken cancellationToken)
154var diagnosticsMapBuilder = ImmutableDictionary.CreateBuilder<ISymbol, List<Diagnostic>>();
163var targetSymbol = suppressionTargetInfo.TargetSymbol;
173private static async Task<IEnumerable<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>>> CreateDiagnosticsBySymbolAsync(Project project, ImmutableArray<Diagnostic> diagnostics, CancellationToken cancellationToken)
175var diagnosticsMapBuilder = ImmutableDictionary.CreateBuilder<ISymbol, List<Diagnostic>>();
190private static void AddDiagnosticForSymbolIfNeeded(ISymbol targetSymbol, Diagnostic diagnostic, ImmutableDictionary<ISymbol, List<Diagnostic>>.Builder diagnosticsMapBuilder)
206private static IEnumerable<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>> CreateDiagnosticsBySymbol(ImmutableDictionary<ISymbol, List<Diagnostic>>.Builder diagnosticsMapBuilder)
211var builder = new List<KeyValuePair<ISymbol, ImmutableArray<Diagnostic>>>();
Completion\CommonCompletionUtilities.cs (4)
86SolutionServices workspaceServices, SemanticModel semanticModel, int position, ISymbol symbol, int overloadCount, SymbolDescriptionOptions options, SupportedPlatformData? supportedPlatforms, CancellationToken cancellationToken)
151SolutionServices workspaceServices, SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SupportedPlatformData? supportedPlatforms, CancellationToken cancellationToken)
174List<TaggedText> textContentBuilder, ISymbol symbol, SemanticModel semanticModel, int position, IDocumentationCommentFormattingService formatter, CancellationToken cancellationToken)
208public static bool TryRemoveAttributeSuffix(ISymbol symbol, SyntaxContext context, [NotNullWhen(true)] out string? name)
Completion\Providers\AbstractSymbolCompletionProvider.cs (7)
29protected abstract (string displayText, string suffix, string insertionText) GetDisplayAndSuffixAndInsertionText(ISymbol symbol, TSyntaxContext context);
50ISymbol symbol,
151Dictionary<ISymbol, ArrayBuilder<ProjectId>>? invalidProjectMap,
250Dictionary<ISymbol, ArrayBuilder<ProjectId>>? invalidProjectMap,
292protected static string GetFilterTextDefault(ISymbol symbol, string displayText, TSyntaxContext context)
453private static Dictionary<ISymbol, ArrayBuilder<ProjectId>> FindSymbolsMissingInLinkedContexts(
457var missingSymbols = new Dictionary<ISymbol, ArrayBuilder<ProjectId>>(LinkedFilesSymbolEquivalenceComparer.Instance);
Completion\Providers\SymbolCompletionItem.cs (20)
25private static readonly Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> s_addSymbolEncoding = AddSymbolEncoding;
26private static readonly Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> s_addSymbolInfo = AddSymbolInfo;
32ImmutableArray<ISymbol> symbols,
35Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> symbolEncoder,
63var firstSymbol = symbols[0];
81private static void AddSymbolEncoding(ImmutableArray<ISymbol> symbols, ArrayBuilder<KeyValuePair<string, string>> properties)
84private static void AddSymbolInfo(ImmutableArray<ISymbol> symbols, ArrayBuilder<KeyValuePair<string, string>> properties)
86var symbol = symbols[0];
108public static string EncodeSymbols(ImmutableArray<ISymbol> symbols)
124public static string EncodeSymbol(ISymbol symbol)
132public static async Task<ImmutableArray<ISymbol>> GetSymbolsAsync(CompletionItem item, Document document, CancellationToken cancellationToken)
137using var _ = ArrayBuilder<ISymbol>.GetInstance(out var symbols);
163private static void DecodeSymbols(List<string> ids, Compilation compilation, ArrayBuilder<ISymbol> symbols)
168var symbol = DecodeSymbol(id, compilation);
181private static ISymbol? DecodeSymbol(string id, Compilation compilation)
192CompletionItem item, Document document, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, CancellationToken cancellationToken)
303ImmutableArray<ISymbol> symbols,
335ImmutableArray<ISymbol> symbols,
359ImmutableArray<ISymbol> symbols,
390CompletionItem item, ImmutableArray<ISymbol> symbols, Document document, SemanticModel semanticModel, SymbolDescriptionOptions options, CancellationToken cancellationToken)
DocumentationComments\AbstractDocumentationCommentFormattingService.cs (5)
83internal ISymbol TypeResolutionSymbol { get; set; }
289public ImmutableArray<TaggedText> Format(string rawXmlText, ISymbol symbol, SemanticModel semanticModel, int position, SymbolDisplayFormat format, CancellationToken cancellationToken)
453var symbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(crefAttribute.Value, semanticModel.Compilation);
502var symbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(crefValue, semanticModel.Compilation);
520string crefValue, ISymbol typeResolutionSymbol, int position, SemanticModel semanticModel, SymbolDisplayFormat format)
EditAndContinue\AbstractEditAndContinueAnalyzer.cs (158)
104internal abstract MemberBody? TryGetDeclarationBody(SyntaxNode node, ISymbol? symbol);
109internal abstract bool IsDeclarationWithSharedBody(SyntaxNode declaration, ISymbol member);
180/// Returns all symbols with declaring syntax (<see cref="GetSymbolDeclarationSyntax(ISymbol, CancellationToken)"/> must return a syntax node)
185ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result,
188ISymbol? oldSymbol,
190ISymbol? newSymbol,
201protected abstract OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol)> GetEditedSymbols(
209private OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)> GetSymbolEdits(
220var result = new TemporaryArray<(ISymbol?, ISymbol?, EditKind)>();
2490 => OneOrMany<(ISymbol?, ISymbol?, EditKind)>.Empty,
287internal string GetDisplayKindAndName(ISymbol symbol, string? displayKind = null, bool fullyQualify = false)
308internal string GetDisplayKind(ISymbol symbol)
425internal abstract void ReportInsertedMemberSymbolRudeEdits(RudeEditDiagnosticsBuilder diagnostics, ISymbol newSymbol, SyntaxNode newNode, bool insertingIntoExistingContainingType);
485/// <see cref="ISymbol.DeclaringSyntaxReferences"/> of a primary constructor returns the type declaration syntax.
494internal abstract bool IsConstructorWithMemberInitializers(ISymbol symbol, CancellationToken cancellationToken);
988ISymbol oldMember,
989ISymbol newMember,
2422protected static bool SymbolsEquivalent(ISymbol oldSymbol, ISymbol newSymbol)
2483protected static bool MemberOrDelegateSignaturesEquivalent(ISymbol? oldMember, ISymbol? newMember, bool exact = false)
2548PooledDictionary<ISymbol, SymbolKey> symbolKeyCache)
2550public SymbolKey GetKey(ISymbol symbol, CancellationToken cancellationToken)
2583using var _1 = PooledHashSet<ISymbol>.GetInstance(out var processedSymbols);
2585using var _3 = PooledDictionary<ISymbol, SymbolKey>.GetInstance(out var symbolKeyCache);
2618var oldSymbolInNewCompilation = symbolCache.GetKey(oldSymbol, cancellationToken).Resolve(newModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
2619var newSymbolInOldCompilation = symbolCache.GetKey(newSymbol, cancellationToken).Resolve(oldModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
2859var newMatchingSymbol = newContainingType.GetMembers(oldSymbol.Name).FirstOrDefault(m => m is IPropertySymbol or IFieldSymbol);
3460bool PreprocessSymbolEdit(ref ISymbol? oldSymbol, ref ISymbol? newSymbol)
3467static ISymbol? Resolve(ISymbol symbol, SymbolKey symbolKey, Compilation compilation, CancellationToken cancellationToken)
3470var result = symbolKey.Resolve(compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
3476var symbol = newSymbol ?? oldSymbol;
3532(SyntaxNode? oldDeclaration, SyntaxNode? newDeclaration) GetSymbolDeclarationNodes(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxNode? oldNode, SyntaxNode? newNode)
3537protected static bool IsMemberOrDelegateReplaced(ISymbol oldMember, ISymbol newMember)
3541protected static bool IsMember(ISymbol symbol)
3544protected static bool IsMemberOrDelegate(ISymbol symbol)
3547protected static ISymbol? GetSemanticallyMatchingNewSymbol(ISymbol? oldSymbol, ISymbol? newSymbol, Compilation newCompilation, SymbolInfoCache symbolCache, CancellationToken cancellationToken)
3556protected static void AddMemberUpdate(ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result, ISymbol? oldSymbol, ISymbol? newSymbol, ISymbol? newSemanticallyMatchingSymbol)
3583var member = parameterSymbol.ContainingSymbol;
3670private static bool AllowsDeletion(ISymbol symbol)
3714private static void AddUpdateEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol symbol, CancellationToken cancellationToken)
3739void AddUpdate(ISymbol? symbol)
3751private static void AddDeleteEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol oldSymbol, SymbolKey deletedSymbolContainer, CancellationToken cancellationToken)
3778void AddDelete(ISymbol? symbol)
3790private static void AddInsertEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol newSymbol, CancellationToken cancellationToken)
3802ISymbol oldSymbol,
3803ISymbol newSymbol,
3850void AddInsert(ISymbol? symbol)
3858void AddDelete(ISymbol? symbol)
3867private ImmutableArray<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)> GetNamespaceSymbolEdits(
3872using var _1 = ArrayBuilder<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)>.GetInstance(out var builder);
3894var newType = SymbolKey.Create(oldType, cancellationToken).Resolve(newModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
3925var oldType = SymbolKey.Create(newType, cancellationToken).Resolve(oldModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
3950private bool IsRestartRequired(ISymbol oldMember, SyntaxNode? oldDeclaration, Compilation oldCompilation, ISymbol newMember, SyntaxNode? newDeclaration, CancellationToken cancellationToken)
3969var memberWithInitializer = oldDeclarationHasInitializer ? oldMember : newMember;
3983private static bool HasRestartRequiredAttribute(ISymbol symbol)
4007private static bool HasCompilerServicesAttribute(ISymbol symbol, string attributeName)
4042ISymbol oldMember,
4046ISymbol newMember,
4103var oldSymbol = diagnosticContext.RequiredOldSymbol;
4104var newSymbol = diagnosticContext.RequiredNewSymbol;
4447private static RudeEditKind GetSignatureChangeRudeEdit(ISymbol oldMember, ISymbol newMember, EditAndContinueCapabilitiesGrantor capabilities)
4516var oldSymbol = diagnosticContext.RequiredOldSymbol;
4517var newSymbol = diagnosticContext.RequiredNewSymbol;
4544/// Semantic edits of members synthesized based on parameters that have no declaring syntax (<see cref="GetSymbolDeclarationSyntax(ISymbol, CancellationToken)"/> returns null)
4554var oldContainingMember = oldParameterSymbol.ContainingSymbol;
4555var newContainingMember = newParameterSymbol.ContainingSymbol;
4587var beginInvokeMethod = delegateType.GetMembers(methodName).FirstOrDefault();
4601var oldSymbol = diagnosticContext.RequiredOldSymbol;
4602var newSymbol = diagnosticContext.RequiredNewSymbol;
4649var oldSymbol = diagnosticContext.RequiredOldSymbol;
4808private static bool CanRenameOrChangeSignature(ISymbol oldSymbol, ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4812private static bool CanAddNewMemberToExistingType(ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4829private static EditAndContinueCapabilities GetRequiredAddMethodCapabilities(ISymbol symbol)
4833private static EditAndContinueCapabilities GetRequiredAddFieldCapabilities(ISymbol symbol)
4837private static bool CanUpdateMemberBody(ISymbol oldSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4859foreach (var member in GetRecordUpdatedSynthesizedMethods(compilation, recordType))
4869private static IEnumerable<ISymbol> GetRecordUpdatedSynthesizedMethods(Compilation compilation, INamedTypeSymbol record)
4916ISymbol? oldSymbol,
4917ISymbol? newSymbol,
4925public ISymbol? OldSymbol
4928public ISymbol RequiredOldSymbol
4937public ISymbol RequiredNewSymbol
4955var newDiagnosticSymbol = newSymbol;
4998private ISymbol? TryGetNewContainer(ISymbol oldSymbol, ref int distance, CancellationToken cancellationToken)
5000var oldContainer = oldSymbol.ContainingSymbol;
5117public DiagnosticContext WithSymbols(ISymbol oldSymbol, ISymbol newSymbol)
5123ISymbol? oldSymbol,
5124ISymbol? newSymbol,
5133internal void ReportTypeLayoutUpdateRudeEdits(in DiagnosticContext diagnosticContext, ISymbol newSymbol, CancellationToken cancellationToken)
5538foreach (var member in type.GetMembers())
5568private static bool IsPartialTypeEdit(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxTree oldSyntaxTree, SyntaxTree newSyntaxTree)
5575static bool IsPartialTypeEdit(ISymbol? symbol, SyntaxTree tree)
5589ISymbol oldMember,
5593ISymbol newMember,
5965private readonly struct VariableCapture(VariableCaptureKind kind, ISymbol symbol)
5968public readonly ISymbol Symbol = symbol;
5981private readonly record struct VariableCaptureKey(VariableCaptureKind Kind, ISymbol? CapturedVariable)
5983public static VariableCaptureKey Create(VariableCaptureKind kind, ISymbol symbol)
5986public static VariableCaptureKey Create(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
5990private static VariableCaptureKind GetCaptureKind(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6013ArrayBuilder<(VariableCaptureKind kind, ISymbol symbol, ArrayBuilder<LambdaBody> capturingLambdas)>? inLambdaCaptures = null;
6031inLambdaCaptures ??= ArrayBuilder<(VariableCaptureKind, ISymbol, ArrayBuilder<LambdaBody>)>.GetInstance();
6033foreach (var capture in captures)
6078ISymbol newMember,
6138void MarkVariables(ImmutableArray<ISymbol> variables)
6140foreach (var variable in variables)
6161internal static ISymbol? GetAssociatedMember(ISymbol symbol)
6172protected abstract SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, Func<ImmutableArray<SyntaxReference>, SyntaxReference?> selector, CancellationToken cancellationToken);
6174protected SyntaxNode GetSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6177protected SyntaxNode? GetSingleSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6180protected SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, SyntaxTree tree, CancellationToken cancellationToken)
6183protected abstract ISymbol? GetDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken);
6185protected ISymbol GetRequiredDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken)
6187var symbol = GetDeclaredSymbol(model, declaration, cancellationToken);
6192private TextSpan GetSymbolLocationSpan(ISymbol symbol, CancellationToken cancellationToken)
6350var local = newCapture.Symbol;
6371var oldSymbol = oldCapture.Symbol;
6372var newSymbol = newCapture.Symbol;
6431void AddRuntimeRudeEdit(ISymbol newSymbol, RudeEditDiagnostic diagnostic)
6490private static ITypeSymbol GetType(ISymbol localOrParameter)
6498private SyntaxNode GetCapturedVariableScope(ISymbol local, CancellationToken cancellationToken)
6755private static bool IsGlobalMain(ISymbol symbol)
6758private static bool InGenericContext(ISymbol symbol)
6760var current = symbol;
6809public bool IsPrimaryConstructor(ISymbol symbol, CancellationToken cancellationToken)
6816public bool IsPrimaryConstructorParameterMatchingSymbol(ISymbol symbol, CancellationToken cancellationToken)
6826public IMethodSymbol? GetEncompassingPrimaryConstructor(SyntaxNode declaration, ISymbol symbol, CancellationToken cancellationToken)
6838private static bool SymbolPresenceAffectsSynthesizedRecordMembers(ISymbol symbol)
6853private bool DeleteEditImpliesInsertEdit(ISymbol oldSymbol, ISymbol newSymbol, Compilation oldCompilation, CancellationToken cancellationToken)
6867var oldConstructor = SymbolKey.Create(newPrimaryConstructor, cancellationToken).Resolve(oldCompilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
6880var oldParameter = SymbolKey.Create(newPrimaryParameter, cancellationToken).Resolve(oldCompilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
6906var oldProperty = ((IMethodSymbol)oldSymbol).AssociatedSymbol;
EmbeddedLanguages\EmbeddedLanguageDetector.cs (11)
187var formatMethod = iformattable
194var impl = type.FindImplementationForInterfaceMember(formatMethod);
265var symbol = semanticModel.GetDeclaredSymbol(property, cancellationToken);
332ISymbol? symbol,
359ISymbol? symbol,
384ISymbol symbol,
438var fieldOrProperty = Info.SemanticFacts.FindFieldOrPropertyForAttributeArgument(semanticModel, argument, cancellationToken);
453var fieldOrProperty = Info.SemanticFacts.FindFieldOrPropertyForArgument(semanticModel, argument, cancellationToken);
467var symbol = semanticModel.GetSymbolInfo(left, cancellationToken).Symbol;
472ISymbol? symbol, [NotNullWhen(true)] out string? identifier)
480[NotNullWhen(true)] ISymbol? symbol,
ExtractMethod\MethodExtractor.Analyzer.cs (33)
50protected virtual bool IsReadOutside(ISymbol symbol, HashSet<ISymbol> readOutsideMap)
147GetSignatureInformation(Dictionary<ISymbol, VariableInfo> symbolMap, ExtractMethodFlowControlInformation flowControlInformation)
221MultiDictionary<ISymbol, SyntaxToken> symbolMap,
223IList<ISymbol> failedVariables,
283private MultiDictionary<ISymbol, SyntaxToken> GetSymbolMap()
285var symbolMap = new MultiDictionary<ISymbol, SyntaxToken>();
404MultiDictionary<ISymbol, SyntaxToken> symbolMap,
406out Dictionary<ISymbol, VariableInfo> variableInfoMap,
407out List<ISymbol> failedVariables)
427var candidates = new HashSet<ISymbol>(readInsideMap);
437foreach (var symbol in candidates)
523PooledDisposer<PooledHashSet<ISymbol>> GetPooledSymbolSet(ImmutableArray<ISymbol> symbols, out PooledHashSet<ISymbol> symbolSet)
525var disposer = PooledHashSet<ISymbol>.GetInstance(out symbolSet);
530ITypeSymbol? GetSymbolTypeWithUpdatedNullability(ISymbol symbol)
557ISymbol symbol,
574private ITypeSymbol? GetUnderlyingSymbolType(ISymbol symbol)
585private static void AddVariableToMap(IDictionary<ISymbol, VariableInfo> variableInfoMap, ISymbol localOrParameter, VariableInfo variableInfo)
590MultiDictionary<ISymbol, SyntaxToken> symbolMap,
591ISymbol symbol,
645MultiDictionary<ISymbol, SyntaxToken> symbolMap, ISymbol symbol, bool writtenInside)
698private static bool IsThisParameter(ISymbol localOrParameter)
708private static bool IsInteractiveSynthesizedParameter(ISymbol localOrParameter)
748IDictionary<ISymbol, VariableInfo> variableInfoMap,
751foreach (var symbol in variableInfoMap.Keys)
778private void AppendMethodTypeParameterUsedDirectly(MultiDictionary<ISymbol, SyntaxToken> symbolMap, IDictionary<int, ITypeParameterSymbol> sortedMap)
785IDictionary<ISymbol, VariableInfo> variableInfoMap,
786MultiDictionary<ISymbol, SyntaxToken> symbolMap,
870private OperationStatus CheckReadOnlyFields(MultiDictionary<ISymbol, SyntaxToken> symbolMap)
FindUsages\AbstractFindUsagesService_FindImplementations.cs (16)
42IFindUsagesContext context, ISymbol symbol, Project project, OptionsProvider<ClassificationOptions> classificationOptions, CancellationToken cancellationToken)
69ISymbol symbol, Project project, IFindUsagesContext context, OptionsProvider<ClassificationOptions> classificationOptions, CancellationToken cancellationToken)
85foreach (var implementation in implementations)
94private static async Task<ImmutableArray<ISymbol>> FindSourceImplementationsAsync(
95Solution solution, ISymbol symbol, CancellationToken cancellationToken)
97var builder = new HashSet<ISymbol>(SymbolEquivalenceComparer.Instance);
129static bool AddedAllLocations(ISymbol implementation, HashSet<(string filePath, TextSpan span)> seenLocations)
141private static async Task<ImmutableArray<ISymbol>> FindImplementationsWorkerAsync(
142Solution solution, ISymbol symbol, CancellationToken cancellationToken)
146using var _ = PooledHashSet<ISymbol>.GetInstance(out var result);
169private static async Task<ImmutableArray<ISymbol>> FindSourceAndMetadataImplementationsAsync(
170Solution solution, ISymbol symbol, CancellationToken cancellationToken)
180using var _ = PooledHashSet<ISymbol>.GetInstance(out var implementationsAndOverrides);
182foreach (var implementation in implementations)
200return ImmutableArray<ISymbol>.CastUp(await SymbolFinder.FindDerivedClassesArrayAsync(
211var implementationPart = symbol switch
FindUsages\DefinitionItemFactory.cs (9)
30this ISymbol definition,
36this ISymbol definition,
43ISymbol definition,
62this ISymbol definition,
94ISymbol definition,
148internal static ImmutableDictionary<string, string> WithMetadataSymbolProperties(this ImmutableDictionary<string, string> properties, ISymbol symbol, ProjectId originatingProjectId)
164internal static ImmutableArray<AssemblyLocation> GetMetadataLocations(ISymbol definition, Solution solution, out ProjectId? originatingProjectId)
224private static ImmutableArray<DocumentSpan> GetSourceLocations(ISymbol definition, ImmutableArray<Location> locations, Solution solution, bool includeHiddenLocations)
255private static ImmutableDictionary<string, string> GetProperties(ISymbol definition, bool isPrimary)
GenerateEqualsAndGetHashCodeFromMembers\GenerateEqualsAndGetHashCodeFromMembersCodeRefactoringProvider.cs (5)
102.SelectAccessibleMembers<ISymbol>(containingType)
201Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> selectedMembers,
241Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> members,
258Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> members,
295Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> members,
GenerateEqualsAndGetHashCodeFromMembers\IGenerateEqualsAndGetHashCodeService.cs (3)
29Task<IMethodSymbol> GenerateEqualsMethodAsync(Document document, INamedTypeSymbol namedType, ImmutableArray<ISymbol> members, string? localNameOpt, 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);
InheritanceMargin\AbstractInheritanceMarginService_Helpers.cs (32)
25using SymbolAndLineNumberArray = ImmutableArray<(ISymbol symbol, int lineNumber)>;
89using var _ = ArrayBuilder<(ISymbol symbol, int lineNumber)>.GetInstance(out var builder);
102var member = semanticModel.GetDeclaredSymbol(memberDeclarationNode, cancellationToken);
321baseSymbols: baseSymbols.CastArray<ISymbol>(),
322derivedTypesSymbols: derivedSymbols.CastArray<ISymbol>(),
333baseSymbols: baseSymbols.CastArray<ISymbol>(),
334derivedTypesSymbols: derivedSymbols.CastArray<ISymbol>(),
343ISymbol memberSymbol,
403ImmutableArray<ISymbol> baseSymbols,
404ImmutableArray<ISymbol> derivedTypesSymbols,
440ISymbol memberSymbol,
442ImmutableArray<ISymbol> implementingMembers,
468ImmutableArray<ISymbol> baseSymbols,
469ImmutableArray<ISymbol> derivedTypesSymbols,
507ISymbol memberSymbol,
509ImmutableArray<ISymbol> implementedMembers,
510ImmutableArray<ISymbol> overridingMembers,
511ImmutableArray<ISymbol> overriddenMembers,
558ISymbol targetSymbol,
562var symbolInSource = await SymbolFinder.FindSourceDefinitionAsync(targetSymbol, solution, cancellationToken).ConfigureAwait(false);
592private static ImmutableArray<ISymbol> GetImplementedSymbolsForTypeMember(
593ISymbol memberSymbol,
594ImmutableArray<ISymbol> overriddenSymbols)
598using var _ = ArrayBuilder<ISymbol>.GetInstance(out var builder);
610foreach (var symbol in overriddenSymbols)
624private static async Task<ImmutableArray<ISymbol>> GetImplementingSymbolsForTypeMemberAsync(
626ISymbol memberSymbol,
632using var _ = ArrayBuilder<ISymbol>.GetInstance(out var builder);
659private static ImmutableArray<ISymbol> GetOverriddenSymbols(ISymbol memberSymbol, bool allowLooseMatch)
664using var _ = ArrayBuilder<ISymbol>.GetInstance(out var builder);
714private static DefinitionItem? ToSlimDefinitionItem(ISymbol symbol, Solution solution)
InitializeParameter\AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs (19)
122var siblingFieldOrProperty = TryFindSiblingFieldOrProperty(parameter, blockStatement);
170var fields = parameters.SelectAsArray(p => (ISymbol)CreateField(p, accessibilityModifiersRequired, rules));
171var properties = parameters.SelectAsArray(p => (ISymbol)CreateProperty(p, accessibilityModifiersRequired, rules));
241ISymbol fieldOrProperty,
260private static ISymbol? TryFindSiblingFieldOrProperty(
265TryFindFieldOrPropertyAssignmentStatement(siblingParam, blockStatement, out var sibling);
361ImmutableArray<ISymbol> fieldsOrProperties,
382var fieldOrProperty = fieldsOrProperties[i];
425ISymbol fieldOrProperty,
449var finalFieldOrProperty = SymbolFinder.FindSimilarSymbols(currentFieldOrProperty, compilation, cancellationToken).FirstOrDefault();
469private static async Task<(Document documentWithMemberAdded, IParameterSymbol? currentParameter, ISymbol? currentFieldOrProperty)> AddMissingFieldOrPropertyAsync(
474ISymbol fieldOrProperty,
530var currentFieldOrProperty = currentParameter?.ContainingType
541where TSymbol : ISymbol
546sibling, blockStatement, out var fieldOrProperty);
574IParameterSymbol parameter, IBlockOperation? blockStatement, out ISymbol? fieldOrProperty)
614private async Task<(ISymbol?, bool isThrowNotImplementedProperty)> TryFindMatchingUninitializedFieldOrPropertySymbolAsync(
631foreach (var memberWithName in containingType.GetMembers(memberName))
668static bool ContainsMemberAssignment(IBlockOperation? blockStatement, ISymbol member)
InlineMethod\AbstractInlineMethodRefactoringProvider.InlineContext.cs (13)
251ImmutableDictionary<ISymbol, string> renameTable)
277ImmutableDictionary<ISymbol, string> renameTable,
289ImmutableDictionary<ISymbol, SyntaxNode> replacementTable,
322private ImmutableDictionary<ISymbol, SyntaxNode> ComputeReplacementTable(
327ImmutableDictionary<ISymbol, string> renameTable)
331(parameter, argument) => (parameter: (ISymbol)parameter,
334.Select(parameterAndExpressionPair => (parameter: (ISymbol)parameterAndExpressionPair.Key,
338.Select(parameterAndName => (parameter: (ISymbol)parameterAndName.parameter,
351private static ImmutableDictionary<ISymbol, string> ComputeRenameTable(
360var renameTable = new Dictionary<ISymbol, string>();
363foreach (var symbol in parametersNeedGenerateFreshVariableFor.Concat(localSymbolsInCallee))
382private readonly HashSet<ISymbol> _allSymbols = [];
389public static ImmutableHashSet<ISymbol> GetAllSymbols(
LanguageServices\SymbolDisplayService\AbstractSymbolDisplayService.AbstractSymbolDescriptionBuilder.cs (18)
85private readonly Func<ISymbol?, string?> _getNavigationHint;
111protected abstract Task<ImmutableArray<SymbolDisplayPart>> GetInitializerSourcePartsAsync(ISymbol symbol);
112protected abstract ImmutableArray<SymbolDisplayPart> ToMinimalDisplayParts(ISymbol symbol, SemanticModel semanticModel, int position, SymbolDisplayFormat format);
113protected abstract string? GetNavigationHint(ISymbol? symbol);
151protected virtual ImmutableArray<SymbolDisplayPart> WrapConstraints(ISymbol symbol, ImmutableArray<SymbolDisplayPart> displayParts)
154private async Task AddPartsAsync(ImmutableArray<ISymbol> symbols)
156var firstSymbol = symbols[0];
172private void AddDocumentationContent(ISymbol symbol, DocumentationComment documentationComment)
233protected abstract void AddCaptures(ISymbol symbol);
262foreach (var captured in captures)
283ImmutableArray<ISymbol> symbolGroup, SymbolDescriptionGroups groups)
292public async Task<IDictionary<SymbolDescriptionGroups, ImmutableArray<TaggedText>>> BuildDescriptionSectionsAsync(ImmutableArray<ISymbol> symbolGroup)
301private async Task AddDescriptionPartAsync(ISymbol symbol)
686private void AddDescriptionForArbitrarySymbol(ISymbol symbol)
704ImmutableArray<ISymbol> symbolGroup)
721private static int GetOverloadCount(ImmutableArray<ISymbol> symbolGroup)
805protected ImmutableArray<SymbolDisplayPart> ToMinimalDisplayParts(ISymbol symbol, SymbolDisplayFormat? format = null)
811private static IEnumerable<SymbolDisplayPart> Part(SymbolDisplayPartKind kind, ISymbol? symbol, string text)
LanguageServices\SymbolDisplayService\AbstractSymbolDisplayService.cs (4)
25public Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ISymbol symbol, SymbolDescriptionOptions options, SymbolDescriptionGroups groups, CancellationToken cancellationToken)
28public async Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups, CancellationToken cancellationToken)
34public async Task<ImmutableArray<SymbolDisplayPart>> ToDescriptionPartsAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups, CancellationToken cancellationToken)
46SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, CancellationToken cancellationToken)
LanguageServices\SymbolDisplayService\ISymbolDisplayService.cs (4)
15Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ISymbol symbol, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, CancellationToken cancellationToken = default);
16Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, CancellationToken cancellationToken = default);
17Task<ImmutableArray<SymbolDisplayPart>> ToDescriptionPartsAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, CancellationToken cancellationToken = default);
18Task<IDictionary<SymbolDescriptionGroups, ImmutableArray<TaggedText>>> ToDescriptionGroupsAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, CancellationToken cancellationToken = default);
NavigationBar\AbstractNavigationBarItemService.cs (3)
44Solution solution, ISymbol symbol, SyntaxTree tree, Func<SyntaxReference, TextSpan> computeFullSpan)
50Solution solution, ISymbol symbol, SyntaxTree tree,
91Solution solution, ISymbol symbol, SyntaxTree tree, ISymbolDeclarationService symbolDeclarationService)
QuickInfo\CommonSemanticQuickInfoProvider.cs (11)
134private static bool HasNoErrors(ImmutableArray<ISymbol> symbols)
189protected virtual (NullableAnnotation, NullableFlowState) GetNullabilityAnalysis(SemanticModel semanticModel, ISymbol symbol, SyntaxNode node, CancellationToken cancellationToken) => default;
200var symbolSet = new HashSet<ISymbol>(SymbolEquivalenceComparer.Instance);
201using var _ = ArrayBuilder<ISymbol>.GetInstance(out var filteredSymbols);
227void AddSymbols(ImmutableArray<ISymbol> symbols, bool checkAccessibility)
229foreach (var symbol in symbols)
243private ImmutableArray<ISymbol> GetSymbolsFromToken(SyntaxToken token, SolutionServices services, SemanticModel semanticModel, CancellationToken cancellationToken)
247var symbol = semanticModel.GetSymbolInfo(lambdaSyntax, cancellationToken).Symbol;
253var symbol = semanticModel.GetSymbolInfo(elementAccessExpression, cancellationToken).Symbol;
270private static bool IsOk([NotNullWhen(returnValue: true)] ISymbol? symbol)
284private static bool IsAccessible(ISymbol symbol, INamedTypeSymbol? within)
SignatureHelp\AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs (1)
14ISymbol symbol,
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (25)
89protected virtual void HandleNamedTypeSymbolStart(SymbolStartAnalysisContext context, Action<ISymbol, ValueUsageInfo> onSymbolUsageFound)
99internal sealed class OriginalDefinitionSymbolEqualityComparer : IEqualityComparer<ISymbol>
107bool IEqualityComparer<ISymbol>.Equals(ISymbol? x, ISymbol? y)
110int IEqualityComparer<ISymbol>.GetHashCode(ISymbol obj)
118private static readonly ObjectPool<HashSet<ISymbol>> s_originalDefinitionSymbolHashSetPool = new(() => new(OriginalDefinitionSymbolEqualityComparer.Instance));
123private readonly Dictionary<ISymbol, ValueUsageInfo> _symbolValueUsageStateMap_doNotAccessDirectly = new(OriginalDefinitionSymbolEqualityComparer.Instance);
165private static Location GetDiagnosticLocation(ISymbol symbol)
230Action<ISymbol, ValueUsageInfo> onSymbolUsageFound = OnSymbolUsage;
283foreach (var member in namedType.GetMembers())
302var symbol = symbolContext.Symbol;
315private void AddSymbolUsage(ISymbol? symbol, ValueUsageInfo info)
326private void UpdateSymbolUsage(ISymbol? symbol, ValueUsageInfo info)
340private bool TryGetAndRemoveSymbolUsage(ISymbol memberSymbol, out ValueUsageInfo valueUsageInfo)
380private void OnSymbolUsage(ISymbol? memberSymbol, ValueUsageInfo usageInfo)
391var memberSymbol = memberReference.Member;
526foreach (var member in namedType.GetMembers())
633ISymbol member,
675HashSet<ISymbol> builder,
695var symbol = lazyModel.GetSymbolInfo(node, cancellationToken).Symbol;
757foreach (var member in namedTypeSymbol.GetMembers())
772private void AddDebuggerDisplayAttributeArgumentsCore(ISymbol symbol, ArrayBuilder<string> builder)
798private bool IsCandidateSymbol([NotNullWhen(true)] ISymbol? memberSymbol)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (7)
32/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
45/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
51/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not.
253/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>.
301/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>.
366private bool ShouldAnalyze(IOperation operationBlock, ISymbol owningSymbol, ref bool hasUnknownOperationNoneDescendant)
589ISymbol symbol,
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (1)
17ISymbol containingSymbol,
src\Analyzers\Core\Analyzers\UseThrowExpression\AbstractUseThrowExpressionDiagnosticAnalyzer.cs (6)
106if (!TryDecomposeIfCondition(ifOperation, out var localOrParameter))
138private static bool ValueIsAccessed(SemanticModel semanticModel, IConditionalOperation ifOperation, IBlockOperation containingBlock, ISymbol localOrParameter, IExpressionStatementOperation expressionStatement, IAssignmentOperation assignmentExpression)
167IBlockOperation containingBlock, IConditionalOperation ifOperation, ISymbol localOrParameter,
189if (!TryGetLocalOrParameterSymbol(assignmentExpression.Value, out var assignmentValue))
209[NotNullWhen(true)] out ISymbol? localOrParameter)
241[NotNullWhen(true)] out ISymbol? localOrParameter)
src\Analyzers\Core\CodeFixes\ImplementAbstractClass\ImplementAbstractClassData.cs (19)
29ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers)
35private readonly ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> _unimplementedMembers = unimplementedMembers;
83ISymbol? throughMember, bool? canDelegateAllMembers, CancellationToken cancellationToken)
120private ImmutableArray<ISymbol> GenerateMembers(
121Compilation compilation, ISymbol? throughMember,
131private ISymbol? GenerateMember(
132Compilation compilation, ISymbol member, ISymbol? throughMember,
145private ISymbol? GenerateMember(
146Compilation compilation, ISymbol member, ISymbol? throughMember, bool addUnsafe,
169private ISymbol GenerateMethod(
170Compilation compilation, IMethodSymbol method, ISymbol? throughMember,
191ISymbol? throughMember,
232IEventSymbol @event, ISymbol? throughMember, Accessibility accessibility, DeclarationModifiers modifiers)
242IEventSymbol @event, IMethodSymbol? accessor, ISymbol? throughMember,
263public ImmutableArray<(ISymbol symbol, bool canDelegateAllMembers)> GetDelegatableMembers(CancellationToken cancellationToken)
271using var _ = ArrayBuilder<(ISymbol symbol, bool canDelegateAllMembers)>.GetInstance(out var result);
278foreach (var member in members)
src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator.cs (29)
40private ISymbol? ThroughMember => Configuration.ThroughMember;
70ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers,
71ImmutableArray<ISymbol> extraMembers,
100private ImmutableArray<ISymbol> GenerateMembers(
103ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> unimplementedMembers,
120using var _1 = ArrayBuilder<ISymbol>.GetInstance(out var implementedVisibleMembers);
121using var _2 = ArrayBuilder<ISymbol>.GetInstance(out var implementedMembers);
125foreach (var unimplementedInterfaceMember in unimplementedInterfaceMembers)
154private string DetermineMemberName(ISymbol member, ArrayBuilder<ISymbol> implementedVisibleMembers, out ISymbol? conflictingMember)
161var memberNames = State.ClassOrStructType.GetAccessibleMembersInThisAndBaseTypes<ISymbol>(State.ClassOrStructType).Select(m => m.Name);
173private IEnumerable<ISymbol?> GenerateMembers(
176ISymbol member,
177ArrayBuilder<ISymbol> implementedVisibleMembers,
194var memberName = DetermineMemberName(member, implementedVisibleMembers, out var conflictingMember);
223ParseOptions options, ISymbol member, string memberName, bool supportsImplementingLessAccessibleMember)
251private bool HasUnexpressibleConstraint(ParseOptions options, ISymbol member)
278public ImmutableArray<ISymbol> GenerateMembers(
280ISymbol member,
281ISymbol? conflictingMember,
306private ISymbol GenerateEvent(Compilation compilation, string memberName, bool generateInvisibly, SyntaxGenerator factory, DeclarationModifiers modifiers, bool useExplicitInterfaceSymbol, Accessibility accessibility, IEventSymbol @event)
344ISymbol member,
358private static bool HasNameConflict(ISymbol member, ISymbol baseMember)
381private bool HasMatchingMember(ArrayBuilder<ISymbol> implementedVisibleMembers, ISymbol member)
406private bool MembersMatch(ISymbol existingMember, ISymbol memberToAdd)
ValueTracking\ValueTracker.cs (7)
81var symbol = await GetSymbolAsync(previousTrackedItem, solution, cancellationToken).ConfigureAwait(false);
98var previousSymbol = await GetSymbolAsync(previousTrackedItem.Parent, solution, cancellationToken).ConfigureAwait(false);
164private static async Task TrackVariableReferencesAsync(ISymbol symbol, OperationCollector collector, CancellationToken cancellationToken)
179var containingSymbol = parameterSymbol.ContainingSymbol;
255private static async Task<(ISymbol?, SyntaxNode?)> GetSelectedSymbolAsync(TextSpan textSpan, Document document, CancellationToken cancellationToken)
284private static async Task TrackVariableDefinitionsAsync(ISymbol symbol, OperationCollector collector, CancellationToken cancellationToken)
321private static async Task<ISymbol?> GetSymbolAsync(ValueTrackedItem? item, Solution solution, CancellationToken cancellationToken)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
DeclarePublicApiAnalyzer.Impl.cs (21)
171private void OnSymbolActionCore(ISymbol symbol, Action<Diagnostic> reportDiagnostic, INamedTypeSymbol? obsoleteAttribute, CancellationToken cancellationToken, Location? explicitLocation = null)
193foreach (var member in namedType.GetMembers())
227private void OnSymbolActionCore(ISymbol symbol, Action<Diagnostic> reportDiagnostic, bool isImplicitlyDeclaredConstructor, INamedTypeSymbol? obsoleteAttribute, CancellationToken cancellationToken, Location? explicitLocation = null)
403void reportDeclareNewApi(ISymbol symbol, bool isImplicitlyDeclaredConstructor, string publicApiName)
424void reportAnnotateApi(ISymbol symbol, bool isImplicitlyDeclaredConstructor, ApiName publicApiName, bool isShipped, string filename)
443void reportObliviousApi(ISymbol symbol)
466private static string GetErrorMessageName(ISymbol symbol, bool isImplicitlyDeclaredConstructor)
484private string GetSiblingNamesToRemoveFromUnshippedText(ISymbol symbol, CancellationToken cancellationToken)
500private string GetSiblingNamesToRemoveFromUnshippedTextCore(ISymbol symbol, CancellationToken cancellationToken)
557foreach (var sibling in siblings)
585private static bool UsesOblivious(ISymbol symbol)
595private ApiName GetApiName(ISymbol symbol)
603static string? getExperimentName(ISymbol symbol)
605for (var current = symbol; current is not null; current = current.ContainingSymbol)
623static string getApiString(Compilation compilation, ISymbol symbol, string? experimentName, SymbolDisplayFormat format)
725private void VisitForwardedTypeRecursively(ISymbol symbol, Action<Diagnostic> reportDiagnostic, INamedTypeSymbol? obsoleteAttribute, Location typeForwardedAttributeLocation, CancellationToken cancellationToken)
737foreach (var member in namedTypeSymbol.GetMembers())
786private bool IsTrackedAPI(ISymbol symbol, CancellationToken cancellationToken)
817private bool IsNamespaceSkipped(ISymbol symbol)
866private bool IsTrackedApiCore(ISymbol symbol, CancellationToken cancellationToken)
880for (var current = symbol; current != null; current = current.ContainingType)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
Editing\SymbolEditor.cs (39)
96public async Task<ISymbol> GetCurrentSymbolAsync(ISymbol symbol, CancellationToken cancellationToken = default)
119var currentSymbol = await GetSymbolAsync(ChangedSolution, projectId, symbolId, cancellationToken).ConfigureAwait(false);
145private static async Task<ISymbol> GetSymbolAsync(Solution solution, ProjectId projectId, string symbolId, CancellationToken cancellationToken)
183public async Task<IReadOnlyList<SyntaxNode>> GetCurrentDeclarationsAsync(ISymbol symbol, CancellationToken cancellationToken = default)
185var currentSymbol = await this.GetCurrentSymbolAsync(symbol, cancellationToken).ConfigureAwait(false);
192private IEnumerable<SyntaxNode> GetDeclarations(ISymbol symbol)
203private bool TryGetBestDeclarationForSingleEdit(ISymbol symbol, out SyntaxNode declaration)
232public async Task<ISymbol> EditOneDeclarationAsync(
233ISymbol symbol,
237var currentSymbol = await this.GetCurrentSymbolAsync(symbol, cancellationToken).ConfigureAwait(false);
256public Task<ISymbol> EditOneDeclarationAsync(
257ISymbol symbol,
271private static void CheckSymbolArgument(ISymbol currentSymbol, ISymbol argSymbol)
279private async Task<ISymbol> EditDeclarationAsync(
280ISymbol currentSymbol,
299var newSymbol = model.GetDeclaredSymbol(newDeclaration, cancellationToken);
319public Task<ISymbol> EditOneDeclarationAsync(
320ISymbol symbol,
345public Task<ISymbol> EditOneDeclarationAsync(
346ISymbol symbol,
362private async Task<ISymbol> EditOneDeclarationAsync(
363ISymbol symbol,
369var currentSymbol = await this.GetCurrentSymbolAsync(symbol, cancellationToken).ConfigureAwait(false);
395public async Task<ISymbol> EditOneDeclarationAsync(
396ISymbol symbol,
397ISymbol member,
401var currentSymbol = await this.GetCurrentSymbolAsync(symbol, cancellationToken).ConfigureAwait(false);
404var currentMember = await this.GetCurrentSymbolAsync(member, cancellationToken).ConfigureAwait(false);
428public Task<ISymbol> EditOneDeclarationAsync(
429ISymbol symbol,
430ISymbol member,
453public async Task<ISymbol> EditAllDeclarationsAsync(
454ISymbol symbol,
458var currentSymbol = await this.GetCurrentSymbolAsync(symbol, cancellationToken).ConfigureAwait(false);
490var newSymbol = model.GetDeclaredSymbol(newDeclaration, cancellationToken);
511public Task<ISymbol> EditAllDeclarationsAsync(
512ISymbol symbol,
FindSymbols\FindReferences\Finders\AbstractReferenceFinder.cs (33)
29ISymbol symbol, Project project, CancellationToken cancellationToken);
31public abstract ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(
32ISymbol symbol, Solution solution, FindReferencesSearchOptions options, CancellationToken cancellationToken);
35ISymbol symbol, HashSet<string>? globalAliases, Project project, IImmutableSet<Document>? documents, Action<Document, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken);
38ISymbol symbol, FindReferencesDocumentState state, Action<FinderLocation, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken);
41ISymbol symbol, FindReferencesDocumentState state, SyntaxToken token, CancellationToken cancellationToken)
55ISymbol searchSymbol, FindReferencesDocumentState state, SyntaxNode node, CancellationToken cancellationToken)
62ISymbol searchSymbol, FindReferencesDocumentState state, SymbolInfo symbolInfo)
67foreach (var candidate in symbolInfo.CandidateSymbols)
166ISymbol symbol,
181ISymbol symbol,
245ISymbol symbol,
285ISymbol symbol,
394ISymbol symbol,
430ISymbol symbol,
473ISymbol symbol,
511ISymbol symbol,
542ISymbol symbol,
561var constructor = state.SemanticModel.GetSymbolInfo(node, cancellationToken).Symbol;
576protected static bool Matches(SymbolInfo info, ISymbol notNullOriginalUnreducedSymbol2)
581foreach (var symbol in info.CandidateSymbols)
590protected static bool Matches(ISymbol? symbol1, ISymbol notNullOriginalUnreducedSymbol2)
773var symbol = semanticModel.GetDeclaredSymbol(node);
780internal static ImmutableArray<(string key, string value)> GetAdditionalFindUsagesProperties(ISymbol definition)
790var containingSymbol = definition.ContainingSymbol;
799where TSymbol : ISymbol
820ISymbol symbol, Project project, CancellationToken cancellationToken)
828ISymbol symbol, HashSet<string>? globalAliases, Project project,
839ISymbol symbol, FindReferencesDocumentState state, Action<FinderLocation, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken)
845public sealed override ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(
846ISymbol symbol, Solution solution, FindReferencesSearchOptions options, CancellationToken cancellationToken)
858protected virtual ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(
FindSymbols\FindReferences\FindReferencesSearchEngine.cs (26)
21using Reference = (SymbolGroup group, ISymbol symbol, ReferenceLocation location);
35private static readonly ObjectPool<Dictionary<ISymbol, SymbolGroup>> s_symbolToGroupPool = new(() => new(MetadataUnifyingEquivalenceComparer.Instance));
59public Task FindReferencesAsync(ISymbol symbol, CancellationToken cancellationToken)
63ImmutableArray<ISymbol> symbols, CancellationToken cancellationToken)
82ImmutableArray<ISymbol> symbols, Action<Reference> onReferenceFound, CancellationToken cancellationToken)
125private async IAsyncEnumerable<(Project project, ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols)> GetProjectsAndSymbolsToSearchSeriallyAsync(
128Dictionary<ISymbol, SymbolGroup> symbolToGroup,
163private async Task<ImmutableArray<(ISymbol symbol, SymbolGroup group)>> ReportGroupsSeriallyAsync(
164ImmutableArray<ISymbol> symbols, Dictionary<ISymbol, SymbolGroup> symbolToGroup, CancellationToken cancellationToken)
166var result = new FixedSizeArrayBuilder<(ISymbol symbol, SymbolGroup group)>(symbols.Length);
169foreach (var symbol in symbols)
176ISymbol symbol, Dictionary<ISymbol, SymbolGroup> symbolToGroup, CancellationToken cancellationToken)
192foreach (var groupSymbol in group.Symbols)
206ImmutableArray<ISymbol> symbols, CancellationToken cancellationToken)
216Project project, ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols, Action<Reference> onReferenceFound, CancellationToken cancellationToken)
218using var _1 = PooledDictionary<ISymbol, PooledHashSet<string>>.GetInstance(out var symbolToGlobalAliases);
219using var _2 = PooledDictionary<Document, Dictionary<ISymbol, SymbolGroup>>.GetInstance(out var documentToSymbolsWithin);
274Dictionary<ISymbol, SymbolGroup> symbolsToSearchFor,
275Dictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases,
319ISymbol symbolToSearchFor, SymbolGroup symbolGroup, FindReferencesDocumentState state, Action<Reference> onReferenceFound)
343ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols,
344PooledDictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases,
362private static void FreeGlobalAliases(PooledDictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases)
368private static bool InvolvesInheritance(ISymbol symbol)
FindSymbols\FindReferences\FindReferencesSearchEngine.SymbolSet.cs (28)
43public abstract ImmutableArray<ISymbol> GetAllSymbols();
96foreach (var symbol in symbols)
102private static async ValueTask<ISymbol?> TryMapToAppropriateSymbolAsync(
103Solution solution, ISymbol symbol, CancellationToken cancellationToken)
108var searchSymbol = symbol;
135var sourceSymbol = await SymbolFinder.FindSourceDefinitionAsync(searchSymbol, solution, cancellationToken).ConfigureAwait(false);
150using var _ = ArrayBuilder<ISymbol>.GetInstance(out var workQueue);
153foreach (var symbol in symbols)
157while (workQueue.TryPop(out var currentSymbol))
170using var _ = ArrayBuilder<ISymbol>.GetInstance(out var workQueue);
175while (workQueue.TryPop(out var currentSymbol))
185FindReferencesSearchEngine engine, ImmutableArray<ISymbol> symbols, MetadataUnifyingSymbolHashSet seenSymbols, ArrayBuilder<ISymbol> workQueue, CancellationToken cancellationToken)
187foreach (var symbol in symbols)
192FindReferencesSearchEngine engine, ISymbol symbol, MetadataUnifyingSymbolHashSet seenSymbols, ArrayBuilder<ISymbol> workQueue, CancellationToken cancellationToken)
195var mapped = await TryMapAndAddLinkedSymbolsAsync(symbol).ConfigureAwait(false);
204foreach (var cascade in cascaded)
210async Task<ISymbol?> TryMapAndAddLinkedSymbolsAsync(ISymbol symbol)
212var mapped = await TryMapToAppropriateSymbolAsync(solution, symbol, cancellationToken).ConfigureAwait(false);
217foreach (var linked in await SymbolFinder.FindLinkedSymbolsAsync(symbol, solution, cancellationToken).ConfigureAwait(false))
237FindReferencesSearchEngine engine, ISymbol symbol,
238MetadataUnifyingSymbolHashSet seenSymbols, ArrayBuilder<ISymbol> workQueue,
271ISymbol symbol,
273ArrayBuilder<ISymbol> workQueue,
289foreach (var match in matches)
294if (symbol.GetOverriddenMember() is ISymbol overriddenMember)
FindSymbols\FindReferences\FindReferencesSearchEngine_FindReferencesInDocuments.cs (22)
22ISymbol originalSymbol, IImmutableSet<Document> documents, CancellationToken cancellationToken)
47var hasInheritanceRelationshipCache = new Dictionary<(ISymbol searchSymbol, ISymbol candidateSymbol), bool>();
75async ValueTask PerformSearchInProjectSeriallyAsync(ImmutableArray<(ISymbol symbol, SymbolGroup group)> symbols, Project project)
77using var _ = PooledDictionary<ISymbol, PooledHashSet<string>>.GetInstance(out var symbolToGlobalAliases);
100ImmutableArray<(ISymbol symbol, SymbolGroup group)> symbols,
102PooledDictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases)
121ISymbol symbol, SymbolGroup group, FindReferencesDocumentState state)
133async ValueTask DirectSymbolSearchAsync(ISymbol symbol, SymbolGroup group, FindReferencesDocumentState state)
164static async Task<ImmutableArray<(SymbolGroup group, ISymbol symbol, ReferenceLocation location)>> ConvertLocationsAsync(
165FindReferencesSearchEngine @this, IAsyncEnumerable<FinderLocation> locations, ISymbol symbol, SymbolGroup group, CancellationToken cancellationToken)
167using var _ = ArrayBuilder<(SymbolGroup group, ISymbol symbol, ReferenceLocation location)>.GetInstance(out var result);
176async ValueTask InheritanceSymbolSearchSeriallyAsync(ISymbol symbol, FindReferencesDocumentState state)
202async ValueTask<(bool matched, ISymbol candidate, CandidateReason candidateReason)> HasInheritanceRelationshipAsync(
203ISymbol symbol, SymbolInfo symbolInfo)
208foreach (var candidate in symbolInfo.CandidateSymbols)
217async ValueTask<bool> HasInheritanceRelationshipSingleAsync(ISymbol searchSymbol, [NotNullWhen(true)] ISymbol? candidate)
233ISymbol searchSymbol, ISymbol candidate)
245foreach (var symbolUp in searchSymbolUpSet.GetAllSymbols())
255foreach (var candidateUp in candidateSymbolUpSet.GetAllSymbols())
FindSymbols\SymbolFinder_Declarations_CustomQueries.cs (7)
28public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Solution solution, Func<string, bool> predicate, CancellationToken cancellationToken = default)
34public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Solution solution, Func<string, bool> predicate, SymbolFilter filter, CancellationToken cancellationToken = default)
43internal static async Task<ImmutableArray<ISymbol>> FindSourceDeclarationsWithCustomQueryAsync(
58using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
73public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Project project, Func<string, bool> predicate, CancellationToken cancellationToken = default)
79public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Project project, Func<string, bool> predicate, SymbolFilter filter, CancellationToken cancellationToken = default)
88internal static async Task<ImmutableArray<ISymbol>> FindSourceDeclarationsWithCustomQueryAsync(
FindSymbols\SymbolFinder_Declarations_SourceDeclarations.cs (8)
20public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Solution solution, string name, bool ignoreCase, CancellationToken cancellationToken = default)
26public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(
40public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(Project project, string name, bool ignoreCase, CancellationToken cancellationToken = default)
46public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsAsync(
67public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsWithPatternAsync(Solution solution, string pattern, CancellationToken cancellationToken = default)
77public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsWithPatternAsync(
95public static Task<IEnumerable<ISymbol>> FindSourceDeclarationsWithPatternAsync(Project project, string pattern, CancellationToken cancellationToken = default)
105public static async Task<IEnumerable<ISymbol>> FindSourceDeclarationsWithPatternAsync(
FindSymbols\SymbolFinder_Hierarchy.cs (33)
26public static async Task<IEnumerable<ISymbol>> FindOverridesAsync(
27ISymbol symbol, Solution solution, IImmutableSet<Project>? projects = null, CancellationToken cancellationToken = default)
36internal static async Task<ImmutableArray<ISymbol>> FindOverridesArrayAsync(
37ISymbol symbol, Solution solution, IImmutableSet<Project>? projects = null, CancellationToken cancellationToken = default)
44using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
64foreach (var m in type.GetMembers(symbol.Name))
66var sourceMember = await FindSourceDefinitionAsync(m, solution, cancellationToken).ConfigureAwait(false);
67var bestMember = sourceMember ?? m;
76internal static bool IsOverride(Solution solution, ISymbol member, ISymbol symbol, bool allowLooseMatch)
78for (var current = member;
92public static async Task<IEnumerable<ISymbol>> FindImplementedInterfaceMembersAsync(
93ISymbol symbol, Solution solution, IImmutableSet<Project>? projects = null, CancellationToken cancellationToken = default)
101internal static Task<ImmutableArray<ISymbol>> FindImplementedInterfaceMembersArrayAsync(
102ISymbol symbol, Solution solution, CancellationToken cancellationToken)
113internal static async Task<ImmutableArray<ISymbol>> FindImplementedInterfaceMembersArrayAsync(
114ISymbol symbol,
149using var _ = ArrayBuilder<ISymbol>.GetInstance(out var builder);
167foreach (var interfaceMember in interfaceType.GetMembers(symbol.Name))
169var sourceMethod = await FindSourceDefinitionAsync(interfaceMember, solution, cancellationToken).ConfigureAwait(false);
170var bestMethod = sourceMethod ?? interfaceMember;
173foreach (var implementation in implementations)
203/// "derived", but can be found with <see cref="FindImplementationsAsync(ISymbol, Solution,
220/// "derived", but can be found with <see cref="FindImplementationsAsync(ISymbol, Solution,
331public static async Task<IEnumerable<ISymbol>> FindImplementationsAsync(
332ISymbol symbol, Solution solution, IImmutableSet<Project>? projects = null, CancellationToken cancellationToken = default)
351/// <inheritdoc cref="FindImplementationsAsync(ISymbol, Solution, IImmutableSet{Project}, CancellationToken)"/>
355internal static async Task<ImmutableArray<ISymbol>> FindMemberImplementationsArrayAsync(
356ISymbol symbol, Solution solution, IImmutableSet<Project>? projects = null, CancellationToken cancellationToken = default)
370using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
374foreach (var implementation in implementations)
376var sourceDef = await FindSourceDefinitionAsync(implementation, solution, cancellationToken).ConfigureAwait(false);
377var bestDef = sourceDef ?? implementation;
Remote\RemoteArguments.cs (7)
60Solution solution, ISymbol symbol, CancellationToken cancellationToken)
68public static SerializableSymbolAndProjectId Create(ISymbol symbol, Project project, CancellationToken cancellationToken)
72ISymbol symbol, Solution solution, CancellationToken cancellationToken,
86ISymbol symbol, Project project, CancellationToken cancellationToken,
99public async ValueTask<ISymbol?> TryRehydrateAsync(
108var symbol = SymbolKey.ResolveString(
195var symbol = await Alias.TryRehydrateAsync(solution, cancellationToken).ConfigureAwait(false);
Rename\ConflictEngine\ConflictResolver.cs (18)
52ISymbol symbol,
129private static ImmutableArray<ISymbol> SymbolsForEnclosingInvocationExpressionWorker(SyntaxNode invocationExpression, SemanticModel semanticModel, CancellationToken cancellationToken)
144private static bool LocalVariableConflictPerLanguage(SyntaxToken tokenOrNode, Document document, ImmutableArray<ISymbol> newReferencedSymbols)
167private static bool IsRenameValid(MutableConflictResolution conflictResolution, ISymbol renamedSymbol)
175ISymbol renamedSymbol,
176ISymbol originalSymbol,
228ISymbol renamedSymbol,
229ISymbol renameSymbol,
230IEnumerable<ISymbol> referencedSymbols,
245IEnumerable<ISymbol> otherThingsNamedTheSameExcludeMethodAndParameterizedProperty;
324private static void AddConflictingSymbolLocations(IEnumerable<ISymbol> conflictingSymbols, MutableConflictResolution conflictResolution, IDictionary<Location, Location> reverseMappedLocations)
326foreach (var newSymbol in conflictingSymbols)
345IEnumerable<ISymbol> symbols,
351foreach (var symbol in symbols)
358var overriddenSymbol = symbol.GetOverriddenMember();
389private static string GetString(ISymbol symbol)
406private static async ValueTask<Location?> GetSymbolLocationAsync(Solution solution, ISymbol symbol, CancellationToken cancellationToken)
410var originalsourcesymbol = await SymbolFinder.FindSourceDefinitionAsync(symbol, solution, cancellationToken).ConfigureAwait(false);
Rename\IRenameRewriterLanguageService.cs (18)
36ISymbol symbol,
54ISymbol renamedSymbol,
55ISymbol renameSymbol,
56IEnumerable<ISymbol> referencedSymbols,
71ISymbol renameSymbol,
72ISymbol renamedSymbol,
86ISymbol renamedSymbol,
101IEnumerable<ISymbol> newReferencedSymbols);
124public abstract Task<ImmutableArray<Location>> ComputeDeclarationConflictsAsync(string replacementText, ISymbol renamedSymbol, ISymbol renameSymbol, IEnumerable<ISymbol> referencedSymbols, Solution baseSolution, Solution newSolution, IDictionary<Location, Location> reverseMappedLocations, CancellationToken cancellationToken);
125public abstract Task<ImmutableArray<Location>> ComputeImplicitReferenceConflictsAsync(ISymbol renameSymbol, ISymbol renamedSymbol, IEnumerable<ReferenceLocation> implicitReferenceLocations, CancellationToken cancellationToken);
126public abstract ImmutableArray<Location> ComputePossibleImplicitUsageConflicts(ISymbol renamedSymbol, SemanticModel semanticModel, Location originalDeclarationLocation, int newDeclarationLocationStartingPosition, CancellationToken cancellationToken);
129public abstract bool LocalVariableConflict(SyntaxToken token, IEnumerable<ISymbol> newReferencedSymbols);
130public abstract void TryAddPossibleNameConflicts(ISymbol symbol, string newName, ICollection<string> possibleNameConflicts);
133IEnumerable<ISymbol> properties, string newPropertyName, ArrayBuilder<Location> conflicts)
137foreach (var symbol in properties)
Rename\Renamer.cs (5)
38public static Task<Solution> RenameSymbolAsync(Solution solution, ISymbol symbol, string newName, OptionSet? optionSet, CancellationToken cancellationToken = default)
42Solution solution, ISymbol symbol, SymbolRenameOptions options, string newName, CancellationToken cancellationToken = default)
139internal static Task<LightweightRenameLocations> FindRenameLocationsAsync(Solution solution, ISymbol symbol, SymbolRenameOptions options, CancellationToken cancellationToken)
144ISymbol symbol,
189ISymbol symbol,
Rename\RenameUtilities.cs (22)
26internal static SyntaxToken UpdateAliasAnnotation(SyntaxToken token, ISymbol aliasSymbol, string replacementText)
44internal static ImmutableArray<ISymbol> GetSymbolsTouchingPosition(
73private static bool IsSymbolDefinedInsideMethod(ISymbol symbol)
82internal static IEnumerable<Document> GetDocumentsAffectedByRename(ISymbol symbol, Solution solution, IEnumerable<RenameLocation> renameLocations)
120private static bool ShouldRenameOnlyAffectDeclaringProject(ISymbol symbol)
151var symbol = semanticFacts.GetDeclaredSymbol(semanticModel, token, cancellationToken);
192public static IEnumerable<ISymbol> GetOverloadedSymbols(ISymbol symbol)
199foreach (var member in containingType.GetMembers())
210public static async Task<ISymbol?> TryGetPropertyFromAccessorOrAnOverrideAsync(
211ISymbol symbol, Solution solution, CancellationToken cancellationToken)
218var originalSourceSymbol = await SymbolFinder.FindSourceDefinitionAsync(
231foreach (var methodImplementor in methodImplementors)
233var propertyAccessorOrAnOverride = await TryGetPropertyFromAccessorOrAnOverrideAsync(methodImplementor, solution, cancellationToken).ConfigureAwait(false);
299public static async Task<ISymbol?> TryGetRenamableSymbolAsync(
302var symbol = await SymbolFinder.FindSymbolAtPositionAsync(document, position, cancellationToken: cancellationToken).ConfigureAwait(false);
306var definitionSymbol = await FindDefinitionSymbolAsync(symbol, document.Project.Solution, cancellationToken).ConfigureAwait(false);
315public static async Task<ISymbol> FindDefinitionSymbolAsync(
316ISymbol symbol, Solution solution, CancellationToken cancellationToken)
322var foundSymbol = await SymbolFinder.FindSourceDefinitionAsync(
325var bestSymbol = foundSymbol ?? symbol;
350var property = await TryGetPropertyFromAccessorOrAnOverrideAsync(bestSymbol, solution, cancellationToken).ConfigureAwait(false);
Rename\SymbolicRenameLocations.ReferenceProcessing.cs (13)
31ISymbol referencedSymbol, ISymbol originalSymbol, Solution solution, bool considerSymbolReferences, CancellationToken cancellationToken)
123static bool IsConstructorForType(ISymbol possibleConstructor, ISymbol possibleType)
132ISymbol propertySymbol, ISymbol parameterSymbol, CancellationToken cancellationToken)
136ISymbol symbol, Solution solution, CancellationToken cancellationToken)
138var result = await RenameUtilities.TryGetPropertyFromAccessorOrAnOverrideAsync(
161ISymbol referencedSymbol, ISymbol originalSymbol, Solution solution, CancellationToken cancellationToken)
244internal static async Task<IEnumerable<RenameLocation>> GetRenamableReferenceLocationsAsync(ISymbol referencedSymbol, ISymbol originalSymbol, ReferenceLocation location, Solution solution, CancellationToken cancellationToken)
324ISymbol originalSymbol,
Shared\Extensions\ISymbolExtensions.cs (21)
36this ISymbol symbol,
52this ISymbol symbol,
87ISymbol symbol,
107ISymbol symbol, INamedTypeSymbol? hideModuleNameAttribute, ImmutableArray<AttributeData> attributes = default)
221public static DocumentationComment GetDocumentationComment(this ISymbol symbol, Compilation compilation, CultureInfo? preferredCulture = null, bool expandIncludes = false, bool expandInheritdoc = false, CancellationToken cancellationToken = default)
224private static DocumentationComment GetDocumentationComment(ISymbol symbol, HashSet<ISymbol>? visitedSymbols, Compilation compilation, CultureInfo? preferredCulture, bool expandIncludes, bool expandInheritdoc, CancellationToken cancellationToken)
260static bool IsEligibleForAutomaticInheritdoc(ISymbol symbol)
297private static XNode[] RewriteInheritdocElements(ISymbol symbol, HashSet<ISymbol>? visitedSymbols, Compilation compilation, XNode node, CancellationToken cancellationToken)
333private static XNode[] RewriteMany(ISymbol symbol, HashSet<ISymbol>? visitedSymbols, Compilation compilation, XNode[] nodes, CancellationToken cancellationToken)
344private static XNode[]? RewriteInheritdocElement(ISymbol memberSymbol, HashSet<ISymbol>? visitedSymbols, Compilation compilation, XElement element, CancellationToken cancellationToken)
349var candidate = GetCandidateSymbol(memberSymbol);
360ISymbol? symbol;
461static ISymbol? GetCandidateSymbol(ISymbol memberSymbol)
646this ImmutableArray<T> symbols, bool hideAdvancedMembers, Compilation compilation, Func<T, bool> inclusionFilter) where T : ISymbol
655var overriddenMember = symbol.GetOverriddenMember();
683this ImmutableArray<T> symbols, bool hideAdvancedMembers, Compilation compilation) where T : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (7)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
130Task<ISymbol?> GetInterceptorSymbolAsync(Document document, int position, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (11)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
266public Task<ISymbol> GetInterceptorSymbolAsync(Document document, int position, CancellationToken cancellationToken)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
31private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
50ISymbol symbol,
68ISymbol symbol,
86ISymbol symbol,
119ISymbol symbol,
191ISymbol symbol,
256ISymbol symbol,
263ISymbol symbol,
264ISymbol containingContextSymbol,
300ISymbol symbol,
309ISymbol symbol,
319ISymbol symbol,
333ISymbol symbol,
382ISymbol symbol,
580ISymbol symbol,
595ISymbol symbol,
596ISymbol containingContextSymbol,
614ISymbol symbol,
src\RoslynAnalyzers\Utilities\Compiler\Options\SymbolNamesWithValueOption.cs (15)
32private readonly ImmutableDictionary<ISymbol, TValue> _symbols;
59private readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> _wildcardMatchResult = new();
61private readonly ConcurrentDictionary<ISymbol, string> _symbolToDeclarationId = new();
63private SymbolNamesWithValueOption(ImmutableDictionary<string, TValue> names, ImmutableDictionary<ISymbol, TValue> symbols,
76_symbols = ImmutableDictionary<ISymbol, TValue>.Empty;
91var symbolsBuilder = PooledDictionary<ISymbol, TValue>.GetInstance();
190static void ProcessSymbolName(NameParts parts, Compilation compilation, string? optionalPrefix, PooledDictionary<ISymbol, TValue> symbolsBuilder)
202foreach (var symbol in DocumentationCommentId.GetSymbolsForDeclarationId(nameWithPrefix, compilation))
231public bool Contains(ISymbol symbol)
237public bool TryGetValue(ISymbol symbol, [MaybeNullWhen(false)] out TValue value)
267private bool TryGetFirstWildcardMatch(ISymbol symbol, [NotNullWhen(true)] out string? firstMatchName, [MaybeNullWhen(false)] out TValue firstMatchValue)
345static string GetDeclarationId(ISymbol symbol)
375internal ref readonly ImmutableDictionary<ISymbol, TValue> Symbols => ref _symbolNamesWithValueOption._symbols;
379internal ref readonly ConcurrentDictionary<ISymbol, KeyValuePair<string?, TValue?>> WildcardMatchResult => ref _symbolNamesWithValueOption._wildcardMatchResult;
381internal ref readonly ConcurrentDictionary<ISymbol, string> SymbolToDeclarationId => ref _symbolNamesWithValueOption._symbolToDeclarationId;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
35private readonly PooledHashSet<ISymbol> _referenceTakenSymbolsBuilder;
40_referenceTakenSymbolsBuilder = PooledHashSet<ISymbol>.GetInstance();
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
66protected abstract PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId);
137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol);
143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap(
146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance();
150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap(
151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap,
158(ISymbol, IOperation) key = (parameter, null);
178public void OnReadReferenceFound(ISymbol symbol)
201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
237foreach (var symbol in SymbolsWriteBuilder.Keys.Select(d => d.symbol).ToArray())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (7)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites;
62public void Clear(ISymbol symbol)
74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg)
86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg)
104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten)
130foreach (var key in _reachingWrites.Keys)
223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (17)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap;
69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap;
73ISymbol owningSymbol,
77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
78PooledHashSet<ISymbol> symbolsRead,
99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
106public ISymbol OwningSymbol { get; }
108protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
118ISymbol owningSymbol,
131symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
215private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken)
224writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
462public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
466captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
514public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (8)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap,
22PooledHashSet<ISymbol> symbolsRead,
32protected override PooledHashSet<ISymbol> SymbolsReadBuilder { get; }
34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; }
39ISymbol owningSymbol,
44symbolsRead: PooledHashSet<ISymbol>.GetInstance(),
63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (13)
26private ISymbol _currentContainingSymbol;
29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap;
35ISymbol containingSymbol,
51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken)
58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance();
90private void OnReadReferenceFound(ISymbol symbol)
93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo)
101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId)
107private void OnReferenceFound(ISymbol symbol, IOperation operation)
159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt)
166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance();
407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SemanticFacts\ISemanticFacts.cs (6)
65ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken);
90IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken);
95ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
96ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken);
98ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken);
105ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (31)
31/// the "same" <see cref="ISymbol.ContainingType"/> and
32/// equal <see cref="ISymbol.MetadataName"/>.</item>
34/// the "same" <see cref="ISymbol.ContainingType"/>,
35/// equal <see cref="ISymbol.MetadataName"/>,
41/// the "same" <see cref="ISymbol.ContainingAssembly"/>.
42/// <see cref="ISymbol.MetadataName"/> is not used because module identity is not important in practice.</item>
44/// the "same" <see cref="ISymbol.ContainingSymbol"/>,
45/// equal <see cref="ISymbol.MetadataName"/>,
49/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
50/// equal <see cref="ISymbol.MetadataName"/>.
55/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
56/// equal <see cref="ISymbol.MetadataName"/>.</item>
60/// the "same" the "same" <see cref="ISymbol.ContainingType"/>,
61/// the "same" <see cref="ISymbol.MetadataName"/>, and have
65/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
66/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
68/// the "same" <see cref="ISymbol.ContainingSymbol"/> and
69/// the "same" <see cref="ISymbol.MetadataName"/>.</item>
71/// the "same" <see cref="ISymbol.Name"/>.</item>
78/// cref="SyntaxTree"/> is enumerated to list all the symbols with the same <see cref="ISymbol.Name"/> and <see
79/// cref="ISymbol.Kind"/> as the original symbol. The symbol with the same index in the destination tree as the
129public static SymbolKey Create(ISymbol? symbol, CancellationToken cancellationToken = default)
148public static bool CanCreate(ISymbol symbol, CancellationToken cancellationToken)
202public static string CreateString(ISymbol? symbol, CancellationToken cancellationToken = default)
206internal static string CreateStringWorker(int version, ISymbol? symbol, CancellationToken cancellationToken = default)
233/// to the corresponding <see cref="ISymbol"/> in a future <see cref="Compilation"/>.
245where TSymbol : class, ISymbol
261ImmutableArray<ISymbol>.CastUp(symbols.Builder.ToImmutableAndClear()),
298string? metadataName) where TSymbol : ISymbol
307foreach (var member in members)
317public static bool IsBodyLevelSymbol(ISymbol symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (13)
332private readonly Stack<ISymbol?> _contextualSymbolStack = new();
385where TOwningSymbol : ISymbol
425public ContextualSymbolPopper PushContextualSymbol(ISymbol? contextualSymbol)
431private void PopContextualSymbol(ISymbol? contextualSymbol)
438public ISymbol? CurrentContextualSymbol
447public readonly ref struct ContextualSymbolPopper(SymbolKeyReader reader, ISymbol? contextualSymbol)
468public SymbolKeyResolution ReadSymbolKey(ISymbol? contextualSymbol, out string? failureReason)
539Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
558var nextContextualSymbol = contextualSymbol is null ? null : getContextualSymbol?.Invoke(contextualSymbol, i);
591Func<TContextualSymbol, int, ISymbol?>? getContextualSymbol,
593where TContextualSymbol : ISymbol
594where TSymbol : ISymbol
729var symbol = semanticModel.GetDeclaredSymbol(node, CancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\INamedTypeSymbolExtensions.cs (63)
70public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
81private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
86ISymbol member,
87Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
155ISymbol member,
156Func<INamedTypeSymbol, ISymbol, bool> isValid,
159var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
179public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
197static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
212static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
229static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
246private static bool IsImplementable(ISymbol m)
249public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
259var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
267public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
270Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
278var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
286public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
300private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
312private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
324private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
327private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
330Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
331Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
332Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
402private static ImmutableArray<ISymbol> GetUnimplementedMembers(
405Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
406Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
407Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
410using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
412foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
441void AddIfNotImplemented(ISymbol member)
448public static IEnumerable<ISymbol> GetAttributeNamedParameters(
451ISymbol within)
464foreach (var member in type.GetMembers())
466var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
475private static ISymbol? IsAttributeNamedParameter(
476ISymbol symbol,
477ISymbol within)
517private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
530public static ImmutableArray<ISymbol> GetOverridableMembers(
536using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
569Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
571foreach (var member in containingType.GetMembers())
582var overriddenMember = member.GetOverriddenMember();
590Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
594foreach (var member in containingType.GetMembers())
612Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
615foreach (var member in type.GetMembers())
626private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
647private static bool IsEqualsObjectOverride(ISymbol? member)
658private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (94)
23public static string ToNameDisplayString(this ISymbol symbol)
26public static string ToSignatureDisplayString(this ISymbol symbol)
29public static bool HasPublicResultantVisibility(this ISymbol symbol)
32public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
79public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
84ISymbol? exactMatch = symbol switch
100if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
107bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
112foreach (var member in baseType.GetMembers(symbol.Name))
140public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
143IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
144IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
145IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
149public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
154using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
158foreach (var interfaceMember in iface.GetMembers())
160var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
174public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
177public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
184public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
214public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
224public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
227public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
230public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
233public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
236public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
239public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
242public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
245public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
248public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
254public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
260public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
266public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
269public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
272public static bool IsExtensionMethod(this ISymbol symbol)
275public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
278public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
281public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
284public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
287public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
290public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
293public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
296public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
299public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
302public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
305public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
308public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
311public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
314public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
317public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
320public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
323public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
326public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
334public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
337public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
349public static int GetArity(this ISymbol symbol)
358public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
401public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
404public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
408public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
418public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
421public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
429public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
437public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
450public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
458public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
473public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
482public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
489this ISymbol? symbol,
532public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
536[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
556public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
562public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
588public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
606public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
609public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
612public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
615public static bool IsFromSource(this ISymbol symbol)
618public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
621public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
637public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
776public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
793public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
802public static bool IsObsolete(this ISymbol symbol)
809public static bool HasAttribute([NotNullWhen(true)] this ISymbol? symbol, [NotNullWhen(true)] INamedTypeSymbol? attributeClass)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions_Accessibility.cs (11)
19this ISymbol symbol,
20ISymbol within,
41this ISymbol symbol,
53this ISymbol symbol,
66ISymbol symbol,
85ISymbol symbol,
86ISymbol within, // must be assembly or named type symbol
177private static bool IsNamedTypeAccessible(INamedTypeSymbol type, ISymbol within)
215ISymbol within)
250ISymbol within,
410ISymbol within,
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ITypeSymbolExtensions.cs (13)
399public static bool CanSupportCollectionInitializer(this ITypeSymbol typeSymbol, ISymbol within)
430public static IEnumerable<T> GetAccessibleMembersInBaseTypes<T>(this ITypeSymbol containingType, ISymbol within) where T : class, ISymbol
439public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, ISymbol within) where T : class, ISymbol
449public static ImmutableArray<T> GetAccessibleMembersInThisAndBaseTypes<T>(this ITypeSymbol? containingType, string memberName, ISymbol within) where T : class, ISymbol
494public static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, ISymbol within) where T : class, ISymbol
504private static IEnumerable<T> SelectAccessibleMembers<T>(this IEnumerable<ITypeSymbol>? types, string memberName, ISymbol within) where T : class, ISymbol
688foreach (var member in type.GetMembers())
749public static bool IsReadOnlySpan([NotNullWhen(true)] this ISymbol? symbol)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\AbstractCodeGenerationService.cs (12)
65public TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken)
115public TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode
140public abstract TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, TCodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
271IEnumerable<ISymbol> members,
294IEnumerable<ISymbol> members,
301foreach (var member in members)
325IEnumerable<ISymbol> members,
333foreach (var member in members)
342private SyntaxNode? GetNewMember(TCodeGenerationContextInfo info, CodeGenerationDestination codeGenerationDestination, ISymbol member, CancellationToken cancellationToken)
358ISymbol member,
373private static bool GeneratingEnum(IEnumerable<ISymbol> members)
455public Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\ICodeGenerationService.cs (4)
83TDeclarationNode AddMembers<TDeclarationNode>(TDeclarationNode destination, IEnumerable<ISymbol> members, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
123TDeclarationNode UpdateDeclarationMembers<TDeclarationNode>(TDeclarationNode declaration, IList<ISymbol> newMembers, CodeGenerationContextInfo info, CancellationToken cancellationToken) where TDeclarationNode : SyntaxNode;
173Task<Document> AddMembersAsync(CodeGenerationSolutionContext context, INamedTypeSymbol destination, IEnumerable<ISymbol> members, CancellationToken cancellationToken);
178bool CanAddTo(ISymbol destination, Solution solution, CancellationToken cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\SyntaxAnnotationExtensions.cs (1)
15where TSymbol : ISymbol
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (14)
80private static ITypeSymbol GetType(Compilation compilation, ISymbol symbol)
95this SyntaxGenerator generator, IMethodSymbol method, ISymbol throughMember)
110this SyntaxGenerator generator, ISymbol member, ISymbol throughMember)
174static SyntaxNode GenerateContainerName(SyntaxGenerator factory, ISymbol throughMember)
188ISymbol? throughMember,
227ISymbol? throughMember,
271private static bool TryGetValue(IDictionary<string, ISymbol>? dictionary, string key, [NotNullWhen(true)] out string? value)
274if (dictionary != null && dictionary.TryGetValue(key, out var symbol))
283public static ImmutableArray<ISymbol> CreateFieldsForParameters(
286using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
305public static ImmutableArray<ISymbol> CreatePropertiesForParameters(
308using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
340IDictionary<string, ISymbol>? parameterToExistingFieldMap,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SemanticsFactsService\AbstractSemanticFactsService.cs (10)
32private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75string baseName, Func<ISymbol, bool> filter,
92protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode container, CancellationToken cancellationToken)
115var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
198public ISymbol GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
228public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
237public ISymbol FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
240public ISymbol FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
243public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
249public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)