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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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 (30)
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)
131foreach (var member in members)
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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
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\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Services\SemanticFacts\CSharpSemanticFacts.cs (13)
59public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
65var symbol = semanticModel.GetDeclaredSymbol(ancestor, cancellationToken);
246public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
263public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken)
266public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argument, CancellationToken cancellationToken)
271public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
278AssignmentExpressionSyntax _ when token.Kind() == SyntaxKind.EqualsToken => GetDeconstructionAssignmentMethods(semanticModel, node).As<ISymbol>(),
279ForEachVariableStatementSyntax _ when token.Kind() == SyntaxKind.InKeyword => GetDeconstructionForEachMethods(semanticModel, node).As<ISymbol>(),
284static ImmutableArray<ISymbol> GetCallingConventionSymbols(SemanticModel model, FunctionPointerUnmanagedCallingConventionSyntax syntax)
297private ImmutableArray<ISymbol> GetSymbolInfo(SemanticModel semanticModel, SyntaxNode node, SyntaxToken token, CancellationToken cancellationToken)
353var symbol = semanticModel.GetSymbolInfo(node, cancellationToken).GetAnySymbol();
372public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
382var localFunctionSymbol = semanticModel.GetDeclaredSymbol(localFunction, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (16)
717var castedSymbol = semanticModel.GetSymbolInfo(castedExpressionNode, cancellationToken).GetAnySymbol();
727var memberSymbol = semanticModel.GetSymbolInfo(memberAccessExpression, cancellationToken).GetAnySymbol();
1072foreach (var sym in type.GetMembers(opName))
1211var symbol = semanticModel.GetDeclaredSymbol(variableDeclarator, cancellationToken);
1313var oldSymbolInfo = originalSemanticModel.GetSymbolInfo(currentOld, cancellationToken).Symbol;
1314var newSymbolInfo = rewrittenSemanticModel.GetSymbolInfo(currentNew, cancellationToken).Symbol;
1366var originalMemberSymbol = originalSemanticModel.GetSymbolInfo(memberAccessExpression, cancellationToken).Symbol;
1371var rewrittenMemberSymbol = rewrittenSemanticModel.GetSymbolInfo(rewrittenMemberAccessExpression, cancellationToken).Symbol;
1437var implementationMember = rewrittenContainingType.FindImplementationForInterfaceMember(originalMemberSymbol);
1451for (var current = rewrittenMemberSymbol; current != null; current = current.GetOverriddenMember())
1475var originalMemberSymbol = originalSemanticModel.GetSymbolInfo(memberAccessExpression, cancellationToken).Symbol;
1480var rewrittenMemberSymbol = rewrittenSemanticModel.GetSymbolInfo(rewrittenMemberAccessExpression, cancellationToken).Symbol;
1487private static bool IsComplementaryDelegateInvoke(ISymbol originalMemberSymbol, ISymbol rewrittenMemberSymbol)
1550ISymbol originalMemberSymbol, ISymbol rewrittenMemberSymbol, CancellationToken cancellationToken)
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 (15)
115public override async Task<(ISymbol? symbol, int selectedIndex)> GetInvocationSymbolAsync(
155var symbol = semanticModel.GetDeclaredSymbol(matchingNode, cancellationToken);
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 (13)
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);
195foreach (var member in baseType.GetMembers())
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)
244foreach (var symbol in group.OrderBy(s => s.GetArity()))
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 (23)
172internal override MemberBody? TryGetDeclarationBody(SyntaxNode node, ISymbol? symbol)
175internal override bool IsDeclarationWithSharedBody(SyntaxNode declaration, ISymbol member)
934internal override bool IsConstructorWithMemberInitializers(ISymbol symbol, CancellationToken cancellationToken)
986protected override SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, Func<ImmutableArray<SyntaxReference>, SyntaxReference?> selector, CancellationToken cancellationToken)
1011protected override ISymbol? GetDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken)
1024protected override OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol)> GetEditedSymbols(
1044OneOrMany<(ISymbol? oldSymbol, ISymbol? newSymbol)> AddFieldSymbolUpdates(SeparatedSyntaxList<VariableDeclaratorSyntax> oldVariables, SeparatedSyntaxList<VariableDeclaratorSyntax> newVariables)
1057var oldSymbol = (oldNode != null) ? GetSymbolForEdit(oldNode, oldModel.RequiredModel, cancellationToken) : null;
1058var newSymbol = (newNode != null) ? GetSymbolForEdit(newNode, newModel.RequiredModel, cancellationToken) : null;
1061? OneOrMany<(ISymbol?, ISymbol?)>.Empty
1066ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result,
1069ISymbol? oldSymbol,
1071ISymbol? newSymbol,
1082var oldContainingMemberOrType = GetParameterContainingMemberOrType(oldNode, newNode, oldModel, topMatch.ReverseMatches, cancellationToken);
1083var newContainingMemberOrType = GetParameterContainingMemberOrType(newNode, oldNode, newModel, topMatch.Matches, cancellationToken);
1085var matchingNewContainingMemberOrType = GetSemanticallyMatchingNewSymbol(oldContainingMemberOrType, newContainingMemberOrType, newModel.Compilation, symbolCache, cancellationToken);
1377private ISymbol? GetSymbolForEdit(
1414private ISymbol? GetParameterContainingMemberOrType(SyntaxNode? node, SyntaxNode? otherNode, DocumentSemanticModel model, IReadOnlyDictionary<SyntaxNode, SyntaxNode> fromOtherMap, CancellationToken cancellationToken)
2507internal override void ReportInsertedMemberSymbolRudeEdits(RudeEditDiagnosticsBuilder diagnostics, ISymbol newSymbol, SyntaxNode newNode, bool insertingIntoExistingContainingType)
ImplementInterface\AbstractChangeImplementationCodeRefactoringProvider.cs (11)
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);
59var member = semanticModel.GetDeclaredSymbol(container, cancellationToken);
195foreach (var interfaceMember in interfaceType.GetMembers())
197var impl = containingType.FindImplementationForInterfaceMember(interfaceMember);
231var documentToImplDeclarations = new OrderedMultiDictionary<Document, (SyntaxNode, ISymbol impl, SetWithInsertionOrder<ISymbol> interfaceMembers)>();
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 (17)
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,
954foreach (var symbol in fullyOrderedSymbols)
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 (5)
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)
155var symbol = symbols.FirstOrDefault(s => !s.IsObsolete()) ?? symbols[0];
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)
24private static readonly Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> s_addSymbolEncoding = AddSymbolEncoding;
25private static readonly Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> s_addSymbolInfo = AddSymbolInfo;
31ImmutableArray<ISymbol> symbols,
34Action<ImmutableArray<ISymbol>, ArrayBuilder<KeyValuePair<string, string>>> symbolEncoder,
62var firstSymbol = symbols[0];
80private static void AddSymbolEncoding(ImmutableArray<ISymbol> symbols, ArrayBuilder<KeyValuePair<string, string>> properties)
83private static void AddSymbolInfo(ImmutableArray<ISymbol> symbols, ArrayBuilder<KeyValuePair<string, string>> properties)
85var symbol = symbols[0];
107public static string EncodeSymbols(ImmutableArray<ISymbol> symbols)
123public static string EncodeSymbol(ISymbol symbol)
131public static async Task<ImmutableArray<ISymbol>> GetSymbolsAsync(CompletionItem item, Document document, CancellationToken cancellationToken)
136using var _ = ArrayBuilder<ISymbol>.GetInstance(out var symbols);
162private static void DecodeSymbols(List<string> ids, Compilation compilation, ArrayBuilder<ISymbol> symbols)
167var symbol = DecodeSymbol(id, compilation);
180private static ISymbol? DecodeSymbol(string id, Compilation compilation)
191CompletionItem item, Document document, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, CancellationToken cancellationToken)
302ImmutableArray<ISymbol> symbols,
334ImmutableArray<ISymbol> symbols,
358ImmutableArray<ISymbol> symbols,
389CompletionItem 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)
463var symbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(crefAttribute.Value, semanticModel.Compilation);
512var symbol = DocumentationCommentId.GetFirstSymbolForDeclarationId(crefValue, semanticModel.Compilation);
530string crefValue, ISymbol typeResolutionSymbol, int position, SemanticModel semanticModel, SymbolDisplayFormat format)
EditAndContinue\AbstractEditAndContinueAnalyzer.cs (160)
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);
1107ISymbol oldMember,
1108ISymbol newMember,
2541protected static bool SymbolsEquivalent(ISymbol oldSymbol, ISymbol newSymbol)
2602protected static bool MemberOrDelegateSignaturesEquivalent(ISymbol? oldMember, ISymbol? newMember, bool exact = false)
2667PooledDictionary<ISymbol, SymbolKey> symbolKeyCache)
2669public SymbolKey GetKey(ISymbol symbol, CancellationToken cancellationToken)
2702using var _1 = PooledHashSet<ISymbol>.GetInstance(out var processedSymbols);
2704using var _3 = PooledDictionary<ISymbol, SymbolKey>.GetInstance(out var symbolKeyCache);
2737var oldSymbolInNewCompilation = symbolCache.GetKey(oldSymbol, cancellationToken).Resolve(newModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
2738var newSymbolInOldCompilation = symbolCache.GetKey(newSymbol, cancellationToken).Resolve(oldModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
2770var symbol = newSymbol ?? oldSymbol;
2978var newMatchingSymbol = newContainingType.GetMembers(oldSymbol.Name).FirstOrDefault(m => m is IPropertySymbol or IFieldSymbol);
3579bool PreprocessSymbolEdit(ref ISymbol? oldSymbol, ref ISymbol? newSymbol)
3586static ISymbol? Resolve(ISymbol symbol, SymbolKey symbolKey, Compilation compilation, CancellationToken cancellationToken)
3589var result = symbolKey.Resolve(compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
3595var symbol = newSymbol ?? oldSymbol;
3651(SyntaxNode? oldDeclaration, SyntaxNode? newDeclaration) GetSymbolDeclarationNodes(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxNode? oldNode, SyntaxNode? newNode)
3656protected static bool IsMemberOrDelegateReplaced(ISymbol oldMember, ISymbol newMember)
3660protected static bool IsMember(ISymbol symbol)
3663protected static bool IsMemberOrDelegate(ISymbol symbol)
3666protected static ISymbol? GetSemanticallyMatchingNewSymbol(ISymbol? oldSymbol, ISymbol? newSymbol, Compilation newCompilation, SymbolInfoCache symbolCache, CancellationToken cancellationToken)
3675protected static void AddMemberUpdate(ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result, ISymbol? oldSymbol, ISymbol? newSymbol, ISymbol? newSemanticallyMatchingSymbol)
3702var member = parameterSymbol.ContainingSymbol;
3789private static bool AllowsDeletion(ISymbol symbol)
3833private static void AddUpdateEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol symbol, CancellationToken cancellationToken)
3858void AddUpdate(ISymbol? symbol)
3870private static void AddDeleteEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol oldSymbol, SymbolKey deletedSymbolContainer, CancellationToken cancellationToken)
3897void AddDelete(ISymbol? symbol)
3909private static void AddInsertEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol newSymbol, CancellationToken cancellationToken)
3921ISymbol oldSymbol,
3922ISymbol newSymbol,
3969void AddInsert(ISymbol? symbol)
3977void AddDelete(ISymbol? symbol)
3986private ImmutableArray<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)> GetNamespaceSymbolEdits(
3991using var _1 = ArrayBuilder<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)>.GetInstance(out var builder);
4013var newType = SymbolKey.Create(oldType, cancellationToken).Resolve(newModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
4044var oldType = SymbolKey.Create(newType, cancellationToken).Resolve(oldModel.Compilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
4069private bool IsRestartRequired(ISymbol oldMember, SyntaxNode? oldDeclaration, Compilation oldCompilation, ISymbol newMember, SyntaxNode? newDeclaration, CancellationToken cancellationToken)
4088var memberWithInitializer = oldDeclarationHasInitializer ? oldMember : newMember;
4102private static bool HasRestartRequiredAttribute(ISymbol symbol)
4126private static bool HasCompilerServicesAttribute(ISymbol symbol, string attributeName)
4161ISymbol oldMember,
4165ISymbol newMember,
4222var oldSymbol = diagnosticContext.RequiredOldSymbol;
4223var newSymbol = diagnosticContext.RequiredNewSymbol;
4566private static RudeEditKind GetSignatureChangeRudeEdit(ISymbol oldMember, ISymbol newMember, EditAndContinueCapabilitiesGrantor capabilities)
4635var oldSymbol = diagnosticContext.RequiredOldSymbol;
4636var newSymbol = diagnosticContext.RequiredNewSymbol;
4663/// Semantic edits of members synthesized based on parameters that have no declaring syntax (<see cref="GetSymbolDeclarationSyntax(ISymbol, CancellationToken)"/> returns null)
4673var oldContainingMember = oldParameterSymbol.ContainingSymbol;
4674var newContainingMember = newParameterSymbol.ContainingSymbol;
4706var beginInvokeMethod = delegateType.GetMembers(methodName).FirstOrDefault();
4720var oldSymbol = diagnosticContext.RequiredOldSymbol;
4721var newSymbol = diagnosticContext.RequiredNewSymbol;
4768var oldSymbol = diagnosticContext.RequiredOldSymbol;
4927private static bool CanRenameOrChangeSignature(ISymbol oldSymbol, ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4931private static bool CanAddNewMemberToExistingType(ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4948private static EditAndContinueCapabilities GetRequiredAddMethodCapabilities(ISymbol symbol)
4952private static EditAndContinueCapabilities GetRequiredAddFieldCapabilities(ISymbol symbol)
4956private static bool CanUpdateMemberBody(ISymbol oldSymbol, EditAndContinueCapabilitiesGrantor capabilities)
4978foreach (var member in GetRecordUpdatedSynthesizedMethods(compilation, recordType))
4988private static IEnumerable<ISymbol> GetRecordUpdatedSynthesizedMethods(Compilation compilation, INamedTypeSymbol record)
5000var result = record.GetMembers(WellKnownMemberNames.PrintMembersMethodName)
5035ISymbol? oldSymbol,
5036ISymbol? newSymbol,
5044public ISymbol? OldSymbol
5047public ISymbol RequiredOldSymbol
5056public ISymbol RequiredNewSymbol
5074var newDiagnosticSymbol = newSymbol;
5117private ISymbol? TryGetNewContainer(ISymbol oldSymbol, ref int distance, CancellationToken cancellationToken)
5119var oldContainer = oldSymbol.ContainingSymbol;
5236public DiagnosticContext WithSymbols(ISymbol oldSymbol, ISymbol newSymbol)
5242ISymbol? oldSymbol,
5243ISymbol? newSymbol,
5252internal void ReportTypeLayoutUpdateRudeEdits(in DiagnosticContext diagnosticContext, ISymbol newSymbol, CancellationToken cancellationToken)
5657foreach (var member in type.GetMembers())
5687private static bool IsPartialTypeEdit(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxTree oldSyntaxTree, SyntaxTree newSyntaxTree)
5694static bool IsPartialTypeEdit(ISymbol? symbol, SyntaxTree tree)
5708ISymbol oldMember,
5712ISymbol newMember,
6084private readonly struct VariableCapture(VariableCaptureKind kind, ISymbol symbol)
6087public readonly ISymbol Symbol = symbol;
6100private readonly record struct VariableCaptureKey(VariableCaptureKind Kind, ISymbol? CapturedVariable)
6102public static VariableCaptureKey Create(VariableCaptureKind kind, ISymbol symbol)
6105public static VariableCaptureKey Create(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6109private static VariableCaptureKind GetCaptureKind(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6132ArrayBuilder<(VariableCaptureKind kind, ISymbol symbol, ArrayBuilder<LambdaBody> capturingLambdas)>? inLambdaCaptures = null;
6150inLambdaCaptures ??= ArrayBuilder<(VariableCaptureKind, ISymbol, ArrayBuilder<LambdaBody>)>.GetInstance();
6152foreach (var capture in captures)
6197ISymbol newMember,
6257void MarkVariables(ImmutableArray<ISymbol> variables)
6259foreach (var variable in variables)
6280internal static ISymbol? GetAssociatedMember(ISymbol symbol)
6291protected abstract SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, Func<ImmutableArray<SyntaxReference>, SyntaxReference?> selector, CancellationToken cancellationToken);
6293protected SyntaxNode GetSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6296protected SyntaxNode? GetSingleSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6299protected SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, SyntaxTree tree, CancellationToken cancellationToken)
6302protected abstract ISymbol? GetDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken);
6304protected ISymbol GetRequiredDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken)
6306var symbol = GetDeclaredSymbol(model, declaration, cancellationToken);
6311private TextSpan GetSymbolLocationSpan(ISymbol symbol, CancellationToken cancellationToken)
6469var local = newCapture.Symbol;
6490var oldSymbol = oldCapture.Symbol;
6491var newSymbol = newCapture.Symbol;
6550void AddRuntimeRudeEdit(ISymbol newSymbol, RudeEditDiagnostic diagnostic)
6609private static ITypeSymbol GetType(ISymbol localOrParameter)
6617private SyntaxNode GetCapturedVariableScope(ISymbol local, CancellationToken cancellationToken)
6874private static bool IsGlobalMain(ISymbol symbol)
6877private static bool InGenericContext(ISymbol symbol)
6879var current = symbol;
6928public bool IsPrimaryConstructor(ISymbol symbol, CancellationToken cancellationToken)
6935public bool IsPrimaryConstructorParameterMatchingSymbol(ISymbol symbol, CancellationToken cancellationToken)
6945public IMethodSymbol? GetEncompassingPrimaryConstructor(SyntaxNode declaration, ISymbol symbol, CancellationToken cancellationToken)
6957private static bool SymbolPresenceAffectsSynthesizedRecordMembers(ISymbol symbol)
6972private bool DeleteEditImpliesInsertEdit(ISymbol oldSymbol, ISymbol newSymbol, Compilation oldCompilation, CancellationToken cancellationToken)
6986var oldConstructor = SymbolKey.Create(newPrimaryConstructor, cancellationToken).Resolve(oldCompilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
6999var oldParameter = SymbolKey.Create(newPrimaryParameter, cancellationToken).Resolve(oldCompilation, ignoreAssemblyKey: true, cancellationToken).Symbol;
7025var oldProperty = ((IMethodSymbol)oldSymbol).AssociatedSymbol;
EmbeddedLanguages\EmbeddedLanguageDetector.cs (14)
187var formatMethod = iformattable
194var impl = type.FindImplementationForInterfaceMember(formatMethod);
255var symbol =
265var symbol = semanticModel.GetDeclaredSymbol(property, cancellationToken);
320var symbol =
332ISymbol? symbol,
359ISymbol? symbol,
384ISymbol symbol,
404var otherSymbol = semanticModel.GetSymbolInfo(descendent, cancellationToken).GetAnySymbol();
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 (34)
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>();
303foreach (var sym in symbolInfo.GetAllSymbols())
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 (20)
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);
112foreach (var linkedSymbol in linkedSymbols)
116foreach (var implementation in implementations)
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);
155foreach (var ov in overrides)
157for (var overridden = ov.GetOverriddenMember(allowLooseMatch: true);
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 (10)
30this ISymbol definition,
36this ISymbol definition,
43ISymbol definition,
62this ISymbol definition,
85var definition = group.Symbols.First();
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)
200Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> selectedMembers,
240Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> members,
257Document document, SyntaxNode typeDeclaration, INamedTypeSymbol containingType, ImmutableArray<ISymbol> members,
294Document 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 (34)
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);
645foreach (var implementationSymbol in implementationSymbols)
659private static ImmutableArray<ISymbol> GetOverriddenSymbols(ISymbol memberSymbol, bool allowLooseMatch)
664using var _ = ArrayBuilder<ISymbol>.GetInstance(out var builder);
665for (var overriddenMember = memberSymbol.GetOverriddenMember(allowLooseMatch);
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)
276ImmutableDictionary<ISymbol, string> renameTable,
288ImmutableDictionary<ISymbol, SyntaxNode> replacementTable,
321private ImmutableDictionary<ISymbol, SyntaxNode> ComputeReplacementTable(
326ImmutableDictionary<ISymbol, string> renameTable)
330(parameter, argument) => (parameter: (ISymbol)parameter,
333.Select(parameterAndExpressionPair => (parameter: (ISymbol)parameterAndExpressionPair.Key,
337.Select(parameterAndName => (parameter: (ISymbol)parameterAndName.parameter,
350private static ImmutableDictionary<ISymbol, string> ComputeRenameTable(
359var renameTable = new Dictionary<ISymbol, string>();
362foreach (var symbol in parametersNeedGenerateFreshVariableFor.Concat(localSymbolsInCallee))
381private readonly HashSet<ISymbol> _allSymbols = [];
388public static ImmutableHashSet<ISymbol> GetAllSymbols(
LanguageServices\SymbolDisplayService\AbstractSymbolDisplayService.AbstractSymbolDescriptionBuilder.cs (19)
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);
152protected virtual ImmutableArray<SymbolDisplayPart> WrapConstraints(ISymbol symbol, ImmutableArray<SymbolDisplayPart> displayParts)
155private async Task AddPartsAsync(ImmutableArray<ISymbol> symbols)
157var firstSymbol = symbols[0];
173private DocumentationComment GetAppropriateDocumentationComment(ISymbol firstSymbol, Compilation compilation, CancellationToken cancellationToken)
249private void AddDocumentationContent(ISymbol symbol, DocumentationComment documentationComment)
310protected abstract void AddCaptures(ISymbol symbol);
339foreach (var captured in captures)
360ImmutableArray<ISymbol> symbolGroup, SymbolDescriptionGroups groups)
369public async Task<IDictionary<SymbolDescriptionGroups, ImmutableArray<TaggedText>>> BuildDescriptionSectionsAsync(ImmutableArray<ISymbol> symbolGroup)
378private async Task AddDescriptionPartAsync(ISymbol symbol)
763private void AddDescriptionForArbitrarySymbol(ISymbol symbol)
781ImmutableArray<ISymbol> symbolGroup)
798private static int GetOverloadCount(ImmutableArray<ISymbol> symbolGroup)
882protected ImmutableArray<SymbolDisplayPart> ToMinimalDisplayParts(ISymbol symbol, SymbolDisplayFormat? format = null)
888private static IEnumerable<SymbolDisplayPart> Part(SymbolDisplayPartKind kind, ISymbol? symbol, string text)
LanguageServices\SymbolDisplayService\ISymbolDisplayService.cs (4)
15Task<ImmutableArray<SymbolDisplayPart>> ToDescriptionPartsAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, CancellationToken cancellationToken = default);
16Task<IDictionary<SymbolDescriptionGroups, ImmutableArray<TaggedText>>> ToDescriptionGroupsAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, CancellationToken cancellationToken = default);
23public Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ISymbol symbol, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, CancellationToken cancellationToken = default)
26public async Task<string> ToDescriptionStringAsync(SemanticModel semanticModel, int position, ImmutableArray<ISymbol> symbols, SymbolDescriptionOptions options, SymbolDescriptionGroups groups = SymbolDescriptionGroups.All, 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 (13)
136private static bool HasNoErrors(ImmutableArray<ISymbol> symbols)
191protected virtual string? GetNullabilityAnalysis(SemanticModel semanticModel, ISymbol symbol, SyntaxNode node, CancellationToken cancellationToken) => null;
194SolutionServices services, SemanticModel semanticModel, ISymbol symbol, SyntaxToken token, CancellationToken cancellationToken)
308protected ImmutableArray<ISymbol> BindSymbols(
317var symbolSet = new HashSet<ISymbol>(SymbolEquivalenceComparer.Instance);
318using var _ = ArrayBuilder<ISymbol>.GetInstance(out var filteredSymbols);
325void AddSymbols(ImmutableArray<ISymbol> symbols, bool checkAccessibility)
327foreach (var symbol in symbols)
370private ImmutableArray<ISymbol> GetSymbolsFromToken(SyntaxToken token, SolutionServices services, SemanticModel semanticModel, CancellationToken cancellationToken)
374var symbol = semanticModel.GetSymbolInfo(lambdaSyntax, cancellationToken).Symbol;
380var symbol = semanticModel.GetSymbolInfo(elementAccessExpression, cancellationToken).Symbol;
397private static bool IsOk([NotNullWhen(returnValue: true)] ISymbol? symbol)
411private static bool IsAccessible(ISymbol symbol, INamedTypeSymbol? within)
SignatureHelp\AbstractSignatureHelpProvider.SymbolKeySignatureHelpItem.cs (1)
14ISymbol symbol,
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\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 (30)
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)
131foreach (var member in members)
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 (8)
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)
261var selectedSymbol =
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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
629var symbol = semanticModel.GetDeclaredSymbol(node);
636internal static ImmutableArray<(string key, string value)> GetAdditionalFindUsagesProperties(ISymbol definition)
646var containingSymbol = definition.ContainingSymbol;
655where TSymbol : ISymbol
676ISymbol symbol, Project project, CancellationToken cancellationToken)
684ISymbol symbol, HashSet<string>? globalAliases, Project project,
695ISymbol symbol, FindReferencesDocumentState state, Action<FinderLocation, TData> processResult, TData processResultData, FindReferencesSearchOptions options, CancellationToken cancellationToken)
701public sealed override ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(
702ISymbol symbol, Solution solution, FindReferencesSearchOptions options, CancellationToken cancellationToken)
714protected virtual ValueTask<ImmutableArray<ISymbol>> DetermineCascadedSymbolsAsync(
FindSymbols\FindReferences\FindReferencesSearchEngine.cs (26)
22using Reference = (SymbolGroup group, ISymbol symbol, ReferenceLocation location);
36private static readonly ObjectPool<Dictionary<ISymbol, SymbolGroup>> s_symbolToGroupPool = new(() => new(MetadataUnifyingEquivalenceComparer.Instance));
60public Task FindReferencesAsync(ISymbol symbol, CancellationToken cancellationToken)
64ImmutableArray<ISymbol> symbols, CancellationToken cancellationToken)
83ImmutableArray<ISymbol> symbols, Action<Reference> onReferenceFound, CancellationToken cancellationToken)
126private async IAsyncEnumerable<(Project project, ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols)> GetProjectsAndSymbolsToSearchSeriallyAsync(
129Dictionary<ISymbol, SymbolGroup> symbolToGroup,
164private async Task<ImmutableArray<(ISymbol symbol, SymbolGroup group)>> ReportGroupsSeriallyAsync(
165ImmutableArray<ISymbol> symbols, Dictionary<ISymbol, SymbolGroup> symbolToGroup, CancellationToken cancellationToken)
167var result = new FixedSizeArrayBuilder<(ISymbol symbol, SymbolGroup group)>(symbols.Length);
170foreach (var symbol in symbols)
177ISymbol symbol, Dictionary<ISymbol, SymbolGroup> symbolToGroup, CancellationToken cancellationToken)
193foreach (var groupSymbol in group.Symbols)
207ImmutableArray<ISymbol> symbols, CancellationToken cancellationToken)
217Project project, ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols, Action<Reference> onReferenceFound, CancellationToken cancellationToken)
219using var _1 = PooledDictionary<ISymbol, PooledHashSet<string>>.GetInstance(out var symbolToGlobalAliases);
220using var _2 = PooledDictionary<Document, Dictionary<ISymbol, SymbolGroup>>.GetInstance(out var documentToSymbolsWithin);
275Dictionary<ISymbol, SymbolGroup> symbolsToSearchFor,
276Dictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases,
320ISymbol symbolToSearchFor, SymbolGroup symbolGroup, FindReferencesDocumentState state, Action<Reference> onReferenceFound)
344ImmutableArray<(ISymbol symbol, SymbolGroup group)> allSymbols,
345PooledDictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases,
363private static void FreeGlobalAliases(PooledDictionary<ISymbol, PooledHashSet<string>> symbolToGlobalAliases)
369private 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)
48ISymbol symbol,
123private static ImmutableArray<ISymbol> SymbolsForEnclosingInvocationExpressionWorker(SyntaxNode invocationExpression, SemanticModel semanticModel, CancellationToken cancellationToken)
138private static bool LocalVariableConflictPerLanguage(SyntaxToken tokenOrNode, Document document, ImmutableArray<ISymbol> newReferencedSymbols)
161private static bool IsRenameValid(MutableConflictResolution conflictResolution, ISymbol renamedSymbol)
169ISymbol renamedSymbol,
170ISymbol originalSymbol,
223ISymbol renamedSymbol,
224ISymbol renameSymbol,
225IEnumerable<ISymbol> referencedSymbols,
240IEnumerable<ISymbol> otherThingsNamedTheSameExcludeMethodAndParameterizedProperty;
319private static void AddConflictingSymbolLocations(IEnumerable<ISymbol> conflictingSymbols, MutableConflictResolution conflictResolution, IDictionary<Location, Location> reverseMappedLocations)
321foreach (var newSymbol in conflictingSymbols)
340IEnumerable<ISymbol> symbols,
346foreach (var symbol in symbols)
353var overriddenSymbol = symbol.GetOverriddenMember();
384private static string GetString(ISymbol symbol)
401private static async ValueTask<Location?> GetSymbolLocationAsync(Solution solution, ISymbol symbol, CancellationToken cancellationToken)
405var 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,
186ISymbol 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)
32ISymbol referencedSymbol, ISymbol originalSymbol, Solution solution, bool considerSymbolReferences, CancellationToken cancellationToken)
124static bool IsConstructorForType(ISymbol possibleConstructor, ISymbol possibleType)
133ISymbol propertySymbol, ISymbol parameterSymbol, CancellationToken cancellationToken)
137ISymbol symbol, Solution solution, CancellationToken cancellationToken)
139var result = await RenameUtilities.TryGetPropertyFromAccessorOrAnOverrideAsync(
162ISymbol referencedSymbol, ISymbol originalSymbol, Solution solution, CancellationToken cancellationToken)
246ISymbol referencedSymbol, ISymbol originalSymbol, ReferenceLocation location, Solution solution, CancellationToken cancellationToken)
326ISymbol 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
265public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
25public static string ToNameDisplayString(this ISymbol symbol)
28public static string ToSignatureDisplayString(this ISymbol symbol)
31public static bool HasPublicResultantVisibility(this ISymbol symbol)
34public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
81public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
86ISymbol? exactMatch = symbol switch
102if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
109bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
114foreach (var member in baseType.GetMembers(symbol.Name))
142public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
145IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
146IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
147IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
151public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
156using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
160foreach (var interfaceMember in iface.GetMembers())
162var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
176public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
179public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
186public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
216public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
226public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
229public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
232public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
235public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
238public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
241public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
244public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
247public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
250public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
256public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
262public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
268public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
271public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod(this ISymbol symbol)
277public static bool IsLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
280public static bool IsAnonymousOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
283public static bool IsModuleMember([NotNullWhen(true)] this ISymbol? symbol)
286public static bool IsConstructor([NotNullWhen(true)] this ISymbol? symbol)
289public static bool IsStaticConstructor([NotNullWhen(true)] this ISymbol? symbol)
292public static bool IsDestructor([NotNullWhen(true)] this ISymbol? symbol)
295public static bool IsUserDefinedOperator([NotNullWhen(true)] this ISymbol? symbol)
298public static bool IsConversion([NotNullWhen(true)] this ISymbol? symbol)
301public static bool IsOrdinaryMethod([NotNullWhen(true)] this ISymbol? symbol)
304public static bool IsOrdinaryMethodOrLocalFunction([NotNullWhen(true)] this ISymbol? symbol)
307public static bool IsDelegateType([NotNullWhen(true)] this ISymbol? symbol)
310public static bool IsAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
313public static bool IsNormalAnonymousType([NotNullWhen(true)] this ISymbol? symbol)
316public static bool IsAnonymousDelegateType([NotNullWhen(true)] this ISymbol? symbol)
319public static bool IsAnonymousTypeProperty([NotNullWhen(true)] this ISymbol? symbol)
322public static bool IsTupleField([NotNullWhen(true)] this ISymbol? symbol)
325public static bool IsIndexer([NotNullWhen(true)] this ISymbol? symbol)
328public static bool IsWriteableFieldOrProperty([NotNullWhen(true)] this ISymbol? symbol)
336public static bool IsRequired([NotNullWhen(true)] this ISymbol? symbol)
339public static ITypeSymbol? GetMemberType(this ISymbol? symbol)
351public static int GetArity(this ISymbol symbol)
360public static ISymbol? GetOriginalUnreducedDefinition(this ISymbol? symbol)
403public static bool IsFunctionValue([NotNullWhen(true)] this ISymbol? symbol)
406public static bool IsThisParameter([NotNullWhen(true)] this ISymbol? symbol)
410public static ISymbol? ConvertThisParameterToType(this ISymbol? symbol)
420public static bool IsParams([NotNullWhen(true)] this ISymbol? symbol)
423public static ImmutableArray<IParameterSymbol> GetParameters(this ISymbol? symbol)
431public static ImmutableArray<ITypeParameterSymbol> GetTypeParameters(this ISymbol? symbol)
439public static ImmutableArray<ITypeParameterSymbol> GetAllTypeParameters(this ISymbol? symbol)
452public static ImmutableArray<ITypeSymbol> GetTypeArguments(this ISymbol? symbol)
460public static ImmutableArray<ITypeSymbol> GetAllTypeArguments(this ISymbol symbol)
475public static bool IsAttribute([NotNullWhen(true)] this ISymbol? symbol)
484public static bool RequiresUnsafeModifier([NotNullWhen(true)] this ISymbol? member)
491this ISymbol? symbol,
534public static bool IsStaticType([NotNullWhen(true)] this ISymbol? symbol)
538[NotNullWhen(true)] this ISymbol? symbol, ISymbol withinType, IAssemblySymbol withinAssembly, CancellationToken cancellationToken)
558public static IEnumerable<IPropertySymbol> GetValidAnonymousTypeProperties(this ISymbol symbol)
564public static Accessibility ComputeResultantAccessibility(this ISymbol? symbol, ITypeSymbol finalDestination)
590public static bool IsInaccessibleLocal(this ISymbol symbol, int position)
608public static bool IsAccessor([NotNullWhen(true)] this ISymbol? symbol)
611public static bool IsPropertyAccessor([NotNullWhen(true)] this ISymbol? symbol)
614public static bool IsEventAccessor([NotNullWhen(true)] this ISymbol? symbol)
617public static bool IsFromSource(this ISymbol symbol)
620public static bool IsNonImplicitAndFromSource(this ISymbol symbol)
623public static ITypeSymbol? GetSymbolType(this ISymbol? symbol)
639public static bool IsAwaitableNonDynamic([NotNullWhen(true)] this ISymbol? symbol, SemanticModel semanticModel, int position)
778public static bool IsKind<TSymbol>(this ISymbol symbol, SymbolKind kind, [NotNullWhen(true)] out TSymbol? result) where TSymbol : class, ISymbol
795public static bool IsSymbolWithSpecialDiscardName(this ISymbol symbol)
811public static bool IsObsolete(this ISymbol symbol)
836public 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
694foreach (var member in type.GetMembers())
784public 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)
30private static readonly Func<ISymbol, bool> s_LocalNameFilter = s =>
75Func<ISymbol, bool>? filter,
95protected virtual IEnumerable<ISymbol> GetCollidableSymbols(SemanticModel semanticModel, SyntaxNode location, SyntaxNode? container, CancellationToken cancellationToken)
116var impl = type.FindImplementationForInterfaceMember(disposeMethodToLookFor);
197public ISymbol? GetDeclaredSymbol(SemanticModel semanticModel, SyntaxToken token, CancellationToken cancellationToken)
227public IEnumerable<ISymbol> GetDeclaredSymbols(SemanticModel semanticModel, SyntaxNode memberDeclaration, CancellationToken cancellationToken)
236public ISymbol? FindFieldOrPropertyForArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
239public ISymbol? FindFieldOrPropertyForAttributeArgument(SemanticModel semanticModel, SyntaxNode argumentNode, CancellationToken cancellationToken)
242public ImmutableArray<ISymbol> GetBestOrAllSymbols(SemanticModel semanticModel, SyntaxNode? node, SyntaxToken token, CancellationToken cancellationToken)
248public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)