src\RoslynAnalyzers\Utilities\Compiler\Options\AnalyzerOptionsExtensions.cs (18)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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 (14)
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(objectCreation.Type, cancellationToken).GetAnySymbol();
368var symbol = semanticModel.GetSymbolInfo(node, cancellationToken).GetAnySymbol();
387public ImmutableArray<IMethodSymbol> GetLocalFunctionSymbols(Compilation compilation, ISymbol symbol, CancellationToken cancellationToken)
397var 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();
1092foreach (var sym in type.GetMembers(opName))
1231var symbol = semanticModel.GetDeclaredSymbol(variableDeclarator, cancellationToken);
1333var oldSymbolInfo = originalSemanticModel.GetSymbolInfo(currentOld, cancellationToken).Symbol;
1334var newSymbolInfo = rewrittenSemanticModel.GetSymbolInfo(currentNew, cancellationToken).Symbol;
1385var originalMemberSymbol = originalSemanticModel.GetSymbolInfo(memberAccessExpression, cancellationToken).Symbol;
1390var rewrittenMemberSymbol = rewrittenSemanticModel.GetSymbolInfo(rewrittenMemberAccessExpression, cancellationToken).Symbol;
1456var implementationMember = rewrittenContainingType.FindImplementationForInterfaceMember(originalMemberSymbol);
1470for (var current = rewrittenMemberSymbol; current != null; current = current.GetOverriddenMember())
1494var originalMemberSymbol = originalSemanticModel.GetSymbolInfo(memberAccessExpression, cancellationToken).Symbol;
1499var rewrittenMemberSymbol = rewrittenSemanticModel.GetSymbolInfo(rewrittenMemberAccessExpression, cancellationToken).Symbol;
1506private static bool IsComplementaryDelegateInvoke(ISymbol originalMemberSymbol, ISymbol rewrittenMemberSymbol)
1569ISymbol 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)
2524internal 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 (163)
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)
2622protected static bool MemberOrDelegateSignaturesEquivalent(ISymbol? oldMember, ISymbol? newMember, bool exact = false)
2687PooledDictionary<ISymbol, SymbolKey> symbolKeyCache)
2689public SymbolKey GetKey(ISymbol symbol, CancellationToken cancellationToken)
2722using var _1 = PooledHashSet<ISymbol>.GetInstance(out var processedSymbols);
2724using var _3 = PooledDictionary<ISymbol, SymbolKey>.GetInstance(out var symbolKeyCache);
2757var oldSymbolInNewCompilation = symbolCache.GetKey(oldSymbol, cancellationToken).Resolve(newModel.Compilation, cancellationToken: cancellationToken).Symbol;
2758var newSymbolInOldCompilation = symbolCache.GetKey(newSymbol, cancellationToken).Resolve(oldModel.Compilation, cancellationToken: cancellationToken).Symbol;
2790var symbol = newSymbol ?? oldSymbol;
3020var newMatchingSymbol = newContainingType.GetMembers(oldSymbol.Name).FirstOrDefault(m => m is IPropertySymbol or IFieldSymbol);
3630bool PreprocessSymbolEdit(ref ISymbol? oldSymbol, ref ISymbol? newSymbol)
3637static ISymbol? Resolve(ISymbol symbol, SymbolKey symbolKey, Compilation compilation, CancellationToken cancellationToken)
3640var result = symbolKey.Resolve(compilation, cancellationToken: cancellationToken).Symbol;
3646var symbol = newSymbol ?? oldSymbol;
3702(SyntaxNode? oldDeclaration, SyntaxNode? newDeclaration) GetSymbolDeclarationNodes(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxNode? oldNode, SyntaxNode? newNode)
3707protected static bool IsMemberOrDelegateReplaced(ISymbol oldMember, ISymbol newMember)
3711protected static bool IsMember(ISymbol symbol)
3714protected static bool IsMemberOrDelegate(ISymbol symbol)
3717protected static ISymbol? GetSemanticallyMatchingNewSymbol(ISymbol? oldSymbol, ISymbol? newSymbol, Compilation newCompilation, SymbolInfoCache symbolCache, CancellationToken cancellationToken)
3726protected static void AddMemberUpdate(ref TemporaryArray<(ISymbol?, ISymbol?, EditKind)> result, ISymbol? oldSymbol, ISymbol? newSymbol, ISymbol? newSemanticallyMatchingSymbol)
3753var member = parameterSymbol.ContainingSymbol;
3840private static bool AllowsDeletion(ISymbol symbol)
3884private static void AddUpdateEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol symbol, CancellationToken cancellationToken)
3909void AddUpdate(ISymbol? symbol)
3921private static void AddDeleteEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol oldSymbol, SymbolKey deletedSymbolContainer, CancellationToken cancellationToken)
3948void AddDelete(ISymbol? symbol)
3960private static void AddInsertEditsForMemberAndAccessors(ArrayBuilder<SemanticEditInfo> semanticEdits, ISymbol newSymbol, CancellationToken cancellationToken)
3972ISymbol oldSymbol,
3973ISymbol newSymbol,
4020void AddInsert(ISymbol? symbol)
4028void AddDelete(ISymbol? symbol)
4037private ImmutableArray<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)> GetNamespaceSymbolEdits(
4042using var _1 = ArrayBuilder<(ISymbol? oldSymbol, ISymbol? newSymbol, EditKind editKind)>.GetInstance(out var builder);
4064var newType = SymbolKey.Create(oldType, cancellationToken).Resolve(newModel.Compilation, cancellationToken: cancellationToken).Symbol;
4095var oldType = SymbolKey.Create(newType, cancellationToken).Resolve(oldModel.Compilation, cancellationToken: cancellationToken).Symbol;
4120private bool IsRestartRequired(ISymbol oldMember, SyntaxNode? oldDeclaration, Compilation oldCompilation, ISymbol newMember, SyntaxNode? newDeclaration, CancellationToken cancellationToken)
4139var memberWithInitializer = oldDeclarationHasInitializer ? oldMember : newMember;
4153private static bool HasRestartRequiredAttribute(ISymbol symbol)
4167PooledHashSet<ISymbol> processedSymbols,
4220private static bool HasCompilerServicesAttribute(ISymbol symbol, string attributeName)
4255ISymbol oldMember,
4259ISymbol newMember,
4316var oldSymbol = diagnosticContext.RequiredOldSymbol;
4317var newSymbol = diagnosticContext.RequiredNewSymbol;
4634bool IsOrIsContainedInNewExtension(ISymbol symbol)
4636var current = symbol;
4684private static RudeEditKind GetSignatureChangeRudeEdit(ISymbol oldMember, ISymbol newMember, EditAndContinueCapabilitiesGrantor capabilities)
4753var oldSymbol = diagnosticContext.RequiredOldSymbol;
4754var newSymbol = diagnosticContext.RequiredNewSymbol;
4781/// Semantic edits of members synthesized based on parameters that have no declaring syntax (<see cref="GetSymbolDeclarationSyntax(ISymbol, CancellationToken)"/> returns null)
4791var oldContainingMember = oldParameterSymbol.ContainingSymbol;
4792var newContainingMember = newParameterSymbol.ContainingSymbol;
4824var beginInvokeMethod = delegateType.GetMembers(methodName).FirstOrDefault();
4838var oldSymbol = diagnosticContext.RequiredOldSymbol;
4839var newSymbol = diagnosticContext.RequiredNewSymbol;
4886var oldSymbol = diagnosticContext.RequiredOldSymbol;
5045private static bool CanRenameOrChangeSignature(ISymbol oldSymbol, ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
5049private static bool CanAddNewMemberToExistingType(ISymbol newSymbol, EditAndContinueCapabilitiesGrantor capabilities)
5066private static EditAndContinueCapabilities GetRequiredAddMethodCapabilities(ISymbol symbol)
5070private static EditAndContinueCapabilities GetRequiredAddFieldCapabilities(ISymbol symbol)
5074private static bool CanUpdateMemberBody(ISymbol oldSymbol, EditAndContinueCapabilitiesGrantor capabilities)
5096foreach (var member in GetRecordUpdatedSynthesizedMethods(compilation, recordType))
5106private static IEnumerable<ISymbol> GetRecordUpdatedSynthesizedMethods(Compilation compilation, INamedTypeSymbol record)
5118var result = record.GetMembers(WellKnownMemberNames.PrintMembersMethodName)
5153ISymbol? oldSymbol,
5154ISymbol? newSymbol,
5162public ISymbol? OldSymbol
5165public ISymbol RequiredOldSymbol
5174public ISymbol RequiredNewSymbol
5192var newDiagnosticSymbol = newSymbol;
5235private ISymbol? TryGetNewContainer(ISymbol oldSymbol, ref int distance, CancellationToken cancellationToken)
5237var oldContainer = oldSymbol.ContainingSymbol;
5354public DiagnosticContext WithSymbols(ISymbol oldSymbol, ISymbol newSymbol)
5360ISymbol? oldSymbol,
5361ISymbol? newSymbol,
5370internal void ReportTypeLayoutUpdateRudeEdits(in DiagnosticContext diagnosticContext, ISymbol newSymbol, CancellationToken cancellationToken)
5775foreach (var member in type.GetMembers())
5805private static bool IsPartialTypeEdit(ISymbol? oldSymbol, ISymbol? newSymbol, SyntaxTree oldSyntaxTree, SyntaxTree newSyntaxTree)
5812static bool IsPartialTypeEdit(ISymbol? symbol, SyntaxTree tree)
5826ISymbol oldMember,
5830ISymbol newMember,
6202private readonly struct VariableCapture(VariableCaptureKind kind, ISymbol symbol)
6205public readonly ISymbol Symbol = symbol;
6218private readonly record struct VariableCaptureKey(VariableCaptureKind Kind, ISymbol? CapturedVariable)
6220public static VariableCaptureKey Create(VariableCaptureKind kind, ISymbol symbol)
6223public static VariableCaptureKey Create(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6227private static VariableCaptureKind GetCaptureKind(ISymbol variable, IMethodSymbol? liftingPrimaryConstructor)
6250ArrayBuilder<(VariableCaptureKind kind, ISymbol symbol, ArrayBuilder<LambdaBody> capturingLambdas)>? inLambdaCaptures = null;
6268inLambdaCaptures ??= ArrayBuilder<(VariableCaptureKind, ISymbol, ArrayBuilder<LambdaBody>)>.GetInstance();
6270foreach (var capture in captures)
6315ISymbol newMember,
6375void MarkVariables(ImmutableArray<ISymbol> variables)
6377foreach (var variable in variables)
6398internal static ISymbol? GetAssociatedMember(ISymbol symbol)
6409protected abstract SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, Func<ImmutableArray<SyntaxReference>, SyntaxReference?> selector, CancellationToken cancellationToken);
6411protected SyntaxNode GetSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6414protected SyntaxNode? GetSingleSymbolDeclarationSyntax(ISymbol symbol, CancellationToken cancellationToken)
6417protected SyntaxNode? GetSymbolDeclarationSyntax(ISymbol symbol, SyntaxTree tree, CancellationToken cancellationToken)
6420protected abstract ISymbol? GetDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken);
6422protected ISymbol GetRequiredDeclaredSymbol(SemanticModel model, SyntaxNode declaration, CancellationToken cancellationToken)
6424var symbol = GetDeclaredSymbol(model, declaration, cancellationToken);
6429private TextSpan GetSymbolLocationSpan(ISymbol symbol, CancellationToken cancellationToken)
6587var local = newCapture.Symbol;
6608var oldSymbol = oldCapture.Symbol;
6609var newSymbol = newCapture.Symbol;
6668void AddRuntimeRudeEdit(ISymbol newSymbol, RudeEditDiagnostic diagnostic)
6731private static ITypeSymbol GetType(ISymbol localOrParameter)
6739private SyntaxNode GetCapturedVariableScope(ISymbol local, CancellationToken cancellationToken)
6996private static bool IsGlobalMain(ISymbol symbol)
6999private static bool InGenericContext(ISymbol symbol)
7001var current = symbol;
7050public bool IsPrimaryConstructor(ISymbol symbol, CancellationToken cancellationToken)
7057public bool IsPrimaryConstructorParameterMatchingSymbol(ISymbol symbol, CancellationToken cancellationToken)
7067public IMethodSymbol? GetEncompassingPrimaryConstructor(SyntaxNode declaration, ISymbol symbol, CancellationToken cancellationToken)
7079private static bool SymbolPresenceAffectsSynthesizedRecordMembers(ISymbol symbol)
7094private bool DeleteEditImpliesInsertEdit(ISymbol oldSymbol, ISymbol newSymbol, Compilation oldCompilation, CancellationToken cancellationToken)
7108var oldConstructor = SymbolKey.Create(newPrimaryConstructor, cancellationToken).Resolve(oldCompilation, cancellationToken: cancellationToken).Symbol;
7121var oldParameter = SymbolKey.Create(newPrimaryParameter, cancellationToken).Resolve(oldCompilation, cancellationToken: cancellationToken).Symbol;
7147var 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();
445var fieldOrProperty = Info.SemanticFacts.FindFieldOrPropertyForAttributeArgument(semanticModel, argument, cancellationToken);
460var fieldOrProperty = Info.SemanticFacts.FindFieldOrPropertyForArgument(semanticModel, argument, cancellationToken);
474var symbol = semanticModel.GetSymbolInfo(left, cancellationToken).Symbol;
479ISymbol? symbol, [NotNullWhen(true)] out string? identifier)
487[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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)
29private static bool TryGetSyntaxTreeForOption(ISymbol symbol, [NotNullWhen(returnValue: true)] out SyntaxTree? tree)
48ISymbol symbol,
66ISymbol symbol,
84ISymbol symbol,
117ISymbol symbol,
189ISymbol symbol,
254ISymbol symbol,
261ISymbol symbol,
262ISymbol containingContextSymbol,
298ISymbol symbol,
307ISymbol symbol,
317ISymbol symbol,
331ISymbol symbol,
380ISymbol symbol,
578ISymbol symbol,
593ISymbol symbol,
594ISymbol containingContextSymbol,
612ISymbol 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)
80public static ISymbol? FindImplementationForAbstractMember(this INamedTypeSymbol? type, ISymbol symbol)
91private static bool ImplementationExists(INamedTypeSymbol classOrStructType, ISymbol member)
96ISymbol member,
97Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
165ISymbol member,
166Func<INamedTypeSymbol, ISymbol, bool> isValid,
169var implementation = classOrStructType.FindImplementationForInterfaceMember(member);
189public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
207static ImmutableArray<ISymbol> GetImplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
222static bool IsPropertyWithNonPublicImplementableAccessor(ISymbol member)
239static bool IsImplicitlyImplementable(ISymbol member, ISymbol within)
256private static bool IsImplementable(ISymbol m)
259public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
269var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
277public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembersInThis(
280Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
288var implementation = classOrStructType.FindImplementationForInterfaceMember(m);
296public static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedExplicitMembers(
310private static ImmutableArray<ISymbol> GetExplicitlyImplementableMembers(INamedTypeSymbol type, ISymbol within)
322private static bool IsPropertyWithInaccessibleImplementableAccessor(ISymbol member, ISymbol within)
334private static bool IsInaccessibleImplementableAccessor(IMethodSymbol? accessor, ISymbol within)
337private static ImmutableArray<(INamedTypeSymbol type, ImmutableArray<ISymbol> members)> GetAllUnimplementedMembers(
340Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
341Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
342Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
412private static ImmutableArray<ISymbol> GetUnimplementedMembers(
415Func<INamedTypeSymbol, ISymbol, Func<INamedTypeSymbol, ISymbol, bool>, CancellationToken, bool> isImplemented,
416Func<INamedTypeSymbol, ISymbol, bool> isValidImplementation,
417Func<INamedTypeSymbol, ISymbol, ImmutableArray<ISymbol>> interfaceMemberGetter,
420using var _ = ArrayBuilder<ISymbol>.GetInstance(out var results);
422foreach (var member in interfaceMemberGetter(interfaceType, classOrStructType))
451void AddIfNotImplemented(ISymbol member)
458public static IEnumerable<ISymbol> GetAttributeNamedParameters(
461ISymbol within)
474foreach (var member in type.GetMembers())
476var namedParameter = IsAttributeNamedParameter(member, within ?? compilation.Assembly);
485private static ISymbol? IsAttributeNamedParameter(
486ISymbol symbol,
487ISymbol within)
527private static ImmutableArray<ISymbol> GetMembers(INamedTypeSymbol type, ISymbol within)
540public static ImmutableArray<ISymbol> GetOverridableMembers(
546using var _ = PooledDictionary<ISymbol, int>.GetInstance(out var result);
579Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
581foreach (var member in containingType.GetMembers())
592var overriddenMember = member.GetOverriddenMember();
600Dictionary<ISymbol, int> result, INamedTypeSymbol containingType, CancellationToken cancellationToken)
604foreach (var member in containingType.GetMembers())
622Dictionary<ISymbol, int> result, INamedTypeSymbol containingType,
625foreach (var member in type.GetMembers())
636private static bool IsOverridable(ISymbol member, INamedTypeSymbol containingType)
657private static bool IsEqualsObjectOverride(ISymbol? member)
668private static bool IsEqualsObject(ISymbol member)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (96)
24public static string ToNameDisplayString(this ISymbol symbol)
27public static string ToSignatureDisplayString(this ISymbol symbol)
30public static bool HasPublicResultantVisibility(this ISymbol symbol)
33public static SymbolVisibility GetResultantVisibility(this ISymbol symbol)
80public static ISymbol? GetOverriddenMember(this ISymbol? symbol, bool allowLooseMatch = false)
85ISymbol? exactMatch = symbol switch
101if (TryFindLooseMatch(symbol, baseType, out var looseMatch))
108bool TryFindLooseMatch(ISymbol symbol, INamedTypeSymbol baseType, [NotNullWhen(true)] out ISymbol? looseMatch)
113foreach (var member in baseType.GetMembers(symbol.Name))
141public static ImmutableArray<ISymbol> ExplicitInterfaceImplementations(this ISymbol symbol)
144IEventSymbol @event => ImmutableArray<ISymbol>.CastUp(@event.ExplicitInterfaceImplementations),
145IMethodSymbol method => ImmutableArray<ISymbol>.CastUp(method.ExplicitInterfaceImplementations),
146IPropertySymbol property => ImmutableArray<ISymbol>.CastUp(property.ExplicitInterfaceImplementations),
150public static ImmutableArray<ISymbol> ExplicitOrImplicitInterfaceImplementations(this ISymbol symbol)
155using var _ = ArrayBuilder<ISymbol>.GetInstance(out var result);
159foreach (var interfaceMember in iface.GetMembers())
161var impl = symbol.ContainingType.FindImplementationForInterfaceMember(interfaceMember);
175public static ImmutableArray<ISymbol> ImplicitInterfaceImplementations(this ISymbol symbol)
178public static bool IsOverridable([NotNullWhen(true)] this ISymbol? symbol)
185public static bool IsImplementableMember([NotNullWhen(true)] this ISymbol? symbol)
215public static INamedTypeSymbol? GetContainingTypeOrThis(this ISymbol symbol)
225public static bool IsErrorType([NotNullWhen(true)] this ISymbol? symbol)
228public static bool IsModuleType([NotNullWhen(true)] this ISymbol? symbol)
231public static bool IsInterfaceType([NotNullWhen(true)] this ISymbol? symbol)
234public static bool IsArrayType([NotNullWhen(true)] this ISymbol? symbol)
237public static bool IsTupleType([NotNullWhen(true)] this ISymbol? symbol)
240public static bool IsAnonymousFunction([NotNullWhen(true)] this ISymbol? symbol)
243public static bool IsKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
246public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind)
249public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2)
255public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, SymbolKind kind1, SymbolKind kind2, SymbolKind kind3)
261public static bool MatchesKind([NotNullWhen(true)] this ISymbol? symbol, params SymbolKind[] kinds)
267public static bool IsReducedExtension([NotNullWhen(true)] this ISymbol? symbol)
270public static bool IsEnumMember([NotNullWhen(true)] this ISymbol? symbol)
274public static bool IsExtensionMethod([NotNullWhen(true)] 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)
845[NotNullWhen(true)] this ISymbol? symbol)
851[NotNullWhen(true)] this ISymbol? symbol,
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)