Binder\Binder.cs (19)
240internal virtual Symbol? ContainingMemberOrLambda
426var member = this.ContainingMemberOrLambda;
444var containingMember = this.ContainingMemberOrLambda;
592internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNode node, bool hasBaseReceiver)
602internal void ReportDiagnosticsIfObsolete(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
616internal void ReportDiagnosticsIfObsolete(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, bool hasBaseReceiver)
634Symbol symbol,
637Symbol? containingMember,
661Symbol leastOverriddenSymbol = symbol.GetLeastOverriddenMember(containingType);
700Symbol symbol,
703Symbol? containingMember,
713internal static ObsoleteDiagnosticKind ReportDiagnosticsIfObsoleteInternal(DiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol? containingMember, BinderFlags location)
744internal static void ReportDiagnosticsIfObsoleteInternal(BindingDiagnosticBag diagnostics, Symbol symbol, SyntaxNodeOrToken node, Symbol containingMember, BinderFlags location)
785Symbol symbol,
793Symbol symbol,
802Symbol symbol,
930var currentContainer = scope.ContainingMemberOrLambda;
Binder\Binder.ValueChecks.cs (24)
33internal Symbol Symbol { get; }
57private MethodInfo(Symbol symbol, MethodSymbol? method, MethodSymbol? setMethod)
93Symbol symbol = ReferenceEquals(Symbol, Method) && method is not null ? method : Symbol;
845Symbol otherSymbol = null;
880(object)otherSymbol == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(otherSymbol),
1673Symbol containing = this.ContainingMemberOrLambda;
1882private static bool RequiresVariableReceiver(BoundExpression receiver, Symbol symbol)
1986var containing = this.ContainingMemberOrLambda;
2141var containingMember = ContainingMemberOrLambda;
2157private bool IsBadBaseAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol member, BindingDiagnosticBag diagnostics,
2158Symbol propertyOrEventSymbolOpt = null)
2366Symbol? symbol = methodInvocationInfo.MethodInfo.Symbol;
2446BindingDiagnosticBag diagnostics, bool isRefEscape, Symbol symbolForReporting)
2460var symbol = methodInvocationInfo.MethodInfo.Symbol;
2526Symbol symbolForReporting)
2823static bool hasRefLikeReturn(Symbol symbol)
3093Symbol symbol,
3105var symbol = argument switch
3136Symbol symbolForReporting,
3147SafeContext localScopeDepth, BindingDiagnosticBag diagnostics, Symbol symbolForReporting)
3154var symbol = methodInvocationInfo.MethodInfo.Symbol;
3233Symbol symbolForReporting)
3376public override Symbol ContainingSymbol
3610private static void ReportReadOnlyError(Symbol symbol, SyntaxNode node, BindValueKind kind, bool checkingReceiver, BindingDiagnosticBag diagnostics)
Binder\Binder_Attributes.cs (7)
30ImmutableArray<Binder> binders, ImmutableArray<AttributeSyntax> attributesToBind, Symbol ownerSymbol, NamedTypeSymbol[] boundAttributeTypes,
138internal BoundAttribute BindAttribute(AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
155private static BoundAttribute BindAttributeCore(Binder binder, AttributeSyntax node, NamedTypeSymbol attributeType, Symbol? attributedMember, BindingDiagnosticBag diagnostics)
530Symbol namedArgumentNameSymbol = BindNamedAttributeArgumentName(namedArgument, attributeType, diagnostics, out wasError, out resultKind);
594private Symbol BindNamedAttributeArgumentName(AttributeArgumentSyntax namedArgument, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics, out bool wasError, out LookupResultKind resultKind)
603Symbol resultSymbol = this.ResultSymbol(result, name, 0, identifierName, diagnostics, false, out wasError, qualifierOpt: null);
609private TypeSymbol BindNamedAttributeArgumentType(AttributeArgumentSyntax namedArgument, Symbol namedArgumentNameSymbol, NamedTypeSymbol attributeType, BindingDiagnosticBag diagnostics)
Binder\Binder_Crefs.cs (80)
19internal ImmutableArray<Symbol> BindCref(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
21ImmutableArray<Symbol> symbols = BindCrefInternal(syntax, out ambiguityWinner, diagnostics);
27private ImmutableArray<Symbol> BindCrefInternal(CrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
46private ImmutableArray<Symbol> BindTypeCref(TypeCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
62return ImmutableArray.Create<Symbol>(result);
65private ImmutableArray<Symbol> BindQualifiedCref(QualifiedCrefSyntax syntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
101private ImmutableArray<Symbol> BindMemberCref(MemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
112return ImmutableArray<Symbol>.Empty;
115ImmutableArray<Symbol> result;
147private ImmutableArray<Symbol> BindNameMemberCref(NameMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
177return ImmutableArray<Symbol>.Empty;
180ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText, arity, syntax.Parameters != null, diagnostics);
185return ImmutableArray<Symbol>.Empty;
198private ImmutableArray<Symbol> BindIndexerMemberCref(IndexerMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
202ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, WellKnownMemberNames.Indexer, memberNameText: WellKnownMemberNames.Indexer, arity, syntax.Parameters != null, diagnostics);
207return ImmutableArray<Symbol>.Empty;
224private ImmutableArray<Symbol> BindExtensionMemberCref(ExtensionMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
249return ImmutableArray<Symbol>.Empty;
254ImmutableArray<Symbol> sortedSymbols = computeSortedAndFilteredCrefExtensionMembers(containerOpt, memberName, extensionArity, arity, extensionTypeArguments, diagnostics, syntax);
266ImmutableArray<Symbol> computeSortedAndFilteredCrefExtensionMembers(NamespaceOrTypeSymbol? containerOpt, string name, int extensionArity, int arity, TypeArgumentListSyntax? extensionTypeArguments, BindingDiagnosticBag diagnostics, ExtensionMemberCrefSyntax syntax)
291ArrayBuilder<Symbol>? sortedSymbolsBuilder = null;
327foreach (var candidate in candidates)
345sortedSymbolsBuilder ??= ArrayBuilder<Symbol>.GetInstance();
355return ImmutableArray<Symbol>.Empty;
388private ImmutableArray<Symbol> BindOperatorMemberCref(OperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
397return ImmutableArray<Symbol>.Empty;
400ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
405return ImmutableArray<Symbol>.Empty;
463private ImmutableArray<Symbol> BindConversionOperatorMemberCref(ConversionOperatorMemberCrefSyntax syntax, NamespaceOrTypeSymbol? containerOpt, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
476return ImmutableArray<Symbol>.Empty;
490ImmutableArray<Symbol> sortedSymbols = ComputeSortedCrefMembers(syntax, containerOpt, memberName, memberNameText: memberName, arity, syntax.Parameters != null, diagnostics);
495return ImmutableArray<Symbol>.Empty;
507return ImmutableArray<Symbol>.Empty;
528private ImmutableArray<Symbol> ComputeSortedCrefMembers(CSharpSyntaxNode syntax, NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, BindingDiagnosticBag diagnostics)
536private ImmutableArray<Symbol> ComputeSortedCrefMembers(NamespaceOrTypeSymbol? containerOpt, string memberName, string memberNameText, int arity, bool hasParameterList, CSharpSyntaxNode syntax,
541ArrayBuilder<Symbol> builder;
559builder = ArrayBuilder<Symbol>.GetInstance();
571builder = ArrayBuilder<Symbol>.GetInstance();
646return ImmutableArray<Symbol>.Empty;
649builder = ArrayBuilder<Symbol>.GetInstance(numInstanceConstructors);
654return ImmutableArray<Symbol>.Empty;
675private ImmutableArray<Symbol> ProcessCrefMemberLookupResults(
676ImmutableArray<Symbol> symbols,
681out Symbol? ambiguityWinner,
691ArrayBuilder<Symbol> candidates = ArrayBuilder<Symbol>.GetInstance();
695ImmutableArray<Symbol> results = PerformCrefOverloadResolution(candidates, parameterSymbols, arity, memberSyntax, out ambiguityWinner, diagnostics);
826private ImmutableArray<Symbol> ProcessParameterlessCrefMemberLookupResults(
827ImmutableArray<Symbol> symbols,
831out Symbol? ambiguityWinner,
841foreach (Symbol s in symbols)
872Symbol symbol = symbols[0];
879ArrayBuilder<Symbol> unwrappedSymbols = ArrayBuilder<Symbol>.GetInstance(symbols.Length);
881foreach (Symbol wrapped in symbols)
924return ImmutableArray.Create<Symbol>(ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, symbol));
931private void GetCrefOverloadResolutionCandidates(ImmutableArray<Symbol> symbols, int arity, TypeArgumentListSyntax? typeArgumentListSyntax, ArrayBuilder<Symbol> candidates)
933foreach (Symbol candidate in symbols)
935Symbol constructedCandidate = ConstructWithCrefTypeParameters(arity, typeArgumentListSyntax, candidate);
957private static ImmutableArray<Symbol> PerformCrefOverloadResolution(ArrayBuilder<Symbol> candidates, ImmutableArray<ParameterSymbol> parameterSymbols, int arity, MemberCrefSyntax memberSyntax, out Symbol? ambiguityWinner, BindingDiagnosticBag diagnostics)
959ArrayBuilder<Symbol>? viable = null;
961foreach (Symbol candidate in candidates)
969Symbol signatureMember;
1033viable = ArrayBuilder<Symbol>.GetInstance();
1060return ImmutableArray<Symbol>.Empty;
1080private Symbol ConstructWithCrefTypeParameters(int arity, TypeArgumentListSyntax? typeArgumentListSyntax, Symbol symbol)
Binder\Binder_Expressions.cs (90)
38var memberOpt = this.ContainingMemberOrLambda?.ContainingNonLambdaMember();
114return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty);
122return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNode);
130return BadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childNodes);
138return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty);
146return BadExpression(syntax, lookupResultKind, ImmutableArray<Symbol>.Empty, childNode);
152private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols)
165private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, BoundExpression childNode)
178private BoundBadExpression BadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol> symbols, ImmutableArray<BoundExpression> childNodes, bool wasCompilerGenerated = false)
220ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
326if (op.NoCommonTypeError == ErrorCode.ERR_InvalidQM && trueArg is Symbol trueSymbol && falseArg is Symbol falseSymbol)
867node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(BindToTypeForErrorRecovery(BindValue(node.Expression, BindingDiagnosticBag.Discarded, BindValueKind.RefersToLocation))),
1054argumentSyntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty,
1338Symbol container = this.ContainingMemberOrLambda;
1535internal void ReportFieldContextualKeywordConflictIfAny(Symbol? symbol, SyntaxNode syntax, SyntaxToken identifier, BindingDiagnosticBag diagnostics)
1669var members = ArrayBuilder<Symbol>.GetInstance();
1670Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, node, name, node.Arity, members, diagnostics, out isError, qualifierOpt: null); // reports diagnostics in result.
1795void reportPrimaryConstructorParameterShadowing(SimpleNameSyntax node, Symbol symbol, string name, bool invoked, LookupResult lookupResult, ArrayBuilder<Symbol> members, BindingDiagnosticBag diagnostics)
1907private BoundExpression SynthesizeMethodGroupReceiver(CSharpSyntaxNode syntax, ArrayBuilder<Symbol> members)
2000private bool IsBadLocalOrParameterCapture(Symbol symbol, TypeSymbol type, RefKind refKind)
2017private BoundExpression BindNonMethod(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics, LookupResultKind resultKind, bool indexed, bool isError)
2287private bool ReportSimpleProgramLocalReferencedOutsideOfTopLevelStatement(SimpleNameSyntax node, Symbol symbol, BindingDiagnosticBag diagnostics)
2304private BoundExpression SynthesizeReceiver(SyntaxNode node, Symbol member, BindingDiagnosticBag diagnostics)
2340var containingMember = ContainingMember();
2375internal Symbol ContainingMember()
2405var containingMember = this.ContainingMemberOrLambda;
2484var symbol = this.BindNamespaceAliasSymbol(node, diagnostics);
2488private static BoundExpression CreateBoundNamespaceOrTypeExpression(ExpressionSyntax node, Symbol symbol)
3306internal static void CheckRestrictedTypeInAsyncMethod(Symbol containingSymbol, TypeSymbol type, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
3323foreach (Symbol member in ContainingType?.GetMembers(identifier) ?? ImmutableArray<Symbol>.Empty)
3444where TMember : Symbol
4528ImmutableArray<Symbol>.Empty,
4567ImmutableArray<Symbol>.Empty,
4899symbols: ImmutableArray<Symbol>.Empty,
4910symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
4953symbols: ImmutableArray<Symbol>.Empty, //CONSIDER: we could look for a matching constructor on System.ValueType
5274return new BoundBadExpression(syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType());
5489return new BoundBadExpression(node, LookupResultKind.NotInvocable, StaticCast<Symbol>.From(type.InstanceConstructors), ImmutableArray.Create(argument), type);
5536return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, StaticCast<Symbol>.From(type.InstanceConstructors), childNodes, type);
5633return new BoundBadExpression(node, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(type), children.ToImmutableAndFree(), type) { WasCompilerGenerated = wasCompilerGenerated };
6162private static ImmutableSegmentedDictionary<string, Symbol> GetMembersRequiringInitialization(MethodSymbol constructor)
6167return ImmutableSegmentedDictionary<string, Symbol>.Empty;
6179ImmutableSegmentedDictionary<string, Symbol> requiredMembers = GetMembersRequiringInitialization(constructor);
6201var memberSymbol = assignmentOperator.Left switch
6217if (!requiredMembersBuilder.TryGetValue(memberSymbol.Name, out var requiredMember))
6239private static void ReportMembersRequiringInitialization(SyntaxNode creationSyntax, ImmutableSegmentedDictionary<string, Symbol>.Builder requiredMembersBuilder, BindingDiagnosticBag diagnostics)
6469return BadExpression(elementInitializer, LookupResultKind.NotInvocable, ImmutableArray<Symbol>.Empty, boundElementInitializerExpressions);
6921ArrayBuilder<Symbol> symbols = ArrayBuilder<Symbol>.GetInstance();
7101return new BoundBadExpression(node, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol>.Empty, children, interfaceType);
7529Symbol leftSymbol;
7850ArrayBuilder<Symbol> symbols = lookupResult.Symbols;
7855Symbol sym = ResultSymbol(lookupResult, rightName, rightArity, node, diagnostics, false, out wasError, ns, options);
8044if (resolution.IsNonMethodExtensionMember(out Symbol? extensionMember))
8061private BoundExpression GetExtensionMemberAccess(SyntaxNode syntax, BoundExpression? receiver, Symbol extensionMember, BindingDiagnosticBag diagnostics)
8135var members = ArrayBuilder<Symbol>.GetInstance();
8233ReportQueryLookupFailed(node, boundLeft, plainName, ImmutableArray<Symbol>.Empty, diagnostics);
8295return this.BindMemberAccessBadResult(syntax, node.Name, node.ReceiverOpt, node.LookupError, StaticCast<Symbol>.From(node.Methods), node.ResultKind);
8306ImmutableArray<Symbol> symbols,
8312foreach (var s in symbols)
8338var symbolOpt = symbols.Length == 1 ? symbols[0] : null;
8342(object)symbolOpt == null ? ImmutableArray<Symbol>.Empty : ImmutableArray.Create(symbolOpt),
8347private TypeSymbol GetNonMethodMemberType(Symbol symbolOpt)
8438var members = ArrayBuilder<Symbol>.GetInstance();
8441Symbol symbol = GetSymbolOrMethodOrPropertyGroup(lookupResult, right, plainName, arity, members, diagnostics, out wasError,
8829foreach (var member in lookupResult.Symbols)
8871ImmutableArray<Symbol> symbols = lookupResult.Symbols.ToImmutable();
8882errorInfo = OverloadResolutionResult<Symbol>.CreateAmbiguousCallDiagnosticInfo(binder.Compilation, representativeMethod, representativeProperty, symbols, isExtension: true);
9089private void CheckReceiverAndRuntimeSupportForSymbolAccess(SyntaxNode node, BoundExpression receiverOpt, Symbol symbol, BindingDiagnosticBag diagnostics)
9141static bool isNotImplementableInstanceMember(Symbol symbol)
9197Symbol symbol,
9245private Symbol GetSymbolOrMethodOrPropertyGroup(LookupResult result, SyntaxNode node, string plainName, int arity, ArrayBuilder<Symbol> methodOrPropertyGroup, BindingDiagnosticBag diagnostics, out bool wasError, NamespaceOrTypeSymbol qualifierOpt)
9255Symbol other = null; // different member type from 'methodOrPropertyGroup'
9260foreach (var symbol in result.Symbols)
9327private static bool IsMethodOrPropertyGroup(ArrayBuilder<Symbol> members)
9331var member = members[0];
9665return new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes, CreateErrorType(), hasErrors: true);
10011foreach (Symbol symbol in lookupResult.Symbols)
10428foreach (var candidate in lookupResult.Symbols)
10483foreach (var candidate in lookupResult.Symbols)
10924var extensionMember = singleLookupResult.Symbol;
11028private static bool IsStaticInstanceMismatchForUniqueSignatureFromMethodGroup(BoundExpression receiver, Symbol extensionMember)
11138var extensionMember = singleLookupResult.Symbol;
11374return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnostics, getErrorLocation());
11481internal static bool MethodOrLambdaRequiresValue(Symbol symbol, CSharpCompilation compilation)
Binder\Binder_Lookup.cs (59)
205var extensionCandidates = ArrayBuilder<Symbol>.GetInstance();
208foreach (var candidate in extensionCandidates)
375Symbol existingDefinition = submissionSymbols.Symbols.First();
409Symbol firstSymbol = submissionSymbols.Symbols.First();
520foreach (Symbol member in members)
573Symbol symbolWithoutSuffix;
579Symbol symbolWithSuffix = null;
639private bool IsAmbiguousResult(LookupResult result, out Symbol resultSymbol)
665private Symbol ResolveMultipleSymbolsInAttributeTypeLookup(ArrayBuilder<Symbol> symbols)
684var srcSymbol = symbols[best.Index];
685var mdSymbol = symbols[secondBest.Index];
697private static bool NameAndArityMatchRecursively(Symbol x, Symbol y)
717static bool isRoot(Symbol symbol) => symbol is null || symbol is NamespaceSymbol { IsGlobalNamespace: true };
720private bool IsSingleViableAttributeType(LookupResult result, out Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
736private SingleLookupResult GenerateNonViableAttributeTypeResult(Symbol symbol, DiagnosticInfo diagInfo, bool diagnose)
746private bool CheckAttributeTypeViability(Symbol symbol, bool diagnose, ref DiagnosticInfo diagInfo, ref CompoundUseSiteInfo<AssemblySymbol> attributeTypeViabilityUseSiteInfo)
826ArrayBuilder<Symbol> members,
842foreach (Symbol member in members)
912var other = GetNearestOtherSymbol(basesBeingResolved, type);
967var allMembers = new HashSet<Symbol>(comparer);
968var conflictingMembers = new HashSet<Symbol>(comparer);
973foreach (var sym in result.Symbols)
998foreach (var sym in tmp.Symbols)
1012foreach (var sym in result.Symbols)
1021foreach (var sym in allMembers)
1062private static Symbol GetNearestOtherSymbol(ConsList<TypeSymbol> list, TypeSymbol type)
1311var sym = hiddenSymbols[i];
1317var hidingSym = hidingSymbols[j];
1362private static bool IsMethodOrIndexer(Symbol symbol)
1367internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, string name, LookupOptions options, Binder originalBinder)
1371return nsOrType.GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
1379return ImmutableArray<Symbol>.Empty;
1391internal static ImmutableArray<Symbol> GetCandidateMembers(NamespaceOrTypeSymbol nsOrType, LookupOptions options, Binder originalBinder)
1395return StaticCast<Symbol>.From(nsOrType.GetTypeMembersUnordered());
1403return ImmutableArray<Symbol>.Empty;
1411private bool IsInScopeOfAssociatedSyntaxTree(Symbol symbol)
1459internal SingleLookupResult CheckViability(Symbol symbol, int arity, LookupOptions options, TypeSymbol accessThroughType, bool diagnose, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1468var unwrappedSymbol = symbol.Kind == SymbolKind.Alias
1519var unwrappedSymbols = ImmutableArray.Create<Symbol>(unwrappedSymbol);
1544diagInfo = new CSDiagnosticInfo(ErrorCode.ERR_BadAccess, new[] { unwrappedSymbol }, ImmutableArray.Create<Symbol>(unwrappedSymbol), additionalLocations: ImmutableArray<Location>.Empty);
1618private CSDiagnosticInfo MakeCallMethodsDirectlyDiagnostic(Symbol symbol)
1655/// Does not consider <see cref="Symbol.CanBeReferencedByName"/> - that is left to the caller.
1657internal bool CanAddLookupSymbolInfo(Symbol symbol, LookupOptions options, LookupSymbolsInfo info, TypeSymbol accessThroughType, AliasSymbol aliasSymbol = null)
1723private bool IsCrefAccessible(Symbol symbol)
1728private static bool IsEffectivelyPrivate(Symbol symbol)
1730for (Symbol s = symbol; (object)s != null; s = s.ContainingSymbol)
1745internal bool IsAccessible(Symbol symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, TypeSymbol accessThroughType = null, ConsList<TypeSymbol> basesBeingResolved = null)
1751internal bool IsAccessible(Symbol symbol, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
1764internal bool IsAccessible(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
1776/// Should only be called by <see cref="IsAccessible(Symbol, TypeSymbol, out bool, ref CompoundUseSiteInfo{AssemblySymbol}, ConsList{TypeSymbol})"/>,
1779internal virtual bool IsAccessibleHelper(Symbol symbol, TypeSymbol accessThroughType, out bool failedThroughTypeCheck, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved)
1785internal bool IsNonInvocableMember(Symbol symbol)
1801internal static bool IsInvocableMember(Symbol symbol, ConsList<FieldSymbol> fieldsBeingBound)
1826private static bool IsInstance(Symbol symbol)
1843private static bool WrongArity(Symbol symbol, int arity, bool diagnose, LookupOptions options, out DiagnosticInfo diagInfo)
2029foreach (var symbol in candidateMembers)
2041foreach (var symbol in candidateMembers)
Binder\Binder_Patterns.cs (10)
346out Symbol? variableSymbol, out BoundExpression? variableAccess);
382lengthAccess = new BoundBadExpression(node, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, CreateErrorType(), hasErrors: true) { WasCompilerGenerated = true };
859hasErrors: ref hasErrors, variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
884out Symbol? variableSymbol,
1046ref hasErrors, out Symbol? variableSymbol, out BoundExpression? variableAccess);
1311foreach (var symbol in tupleType.GetMembers(name))
1343Symbol foundSymbol = BindTypeOrAliasOrKeyword(node.VarKeyword, node, diagnostics, out bool isVar).Symbol;
1373variableSymbol: out Symbol? variableSymbol, variableAccess: out BoundExpression? variableAccess);
1525Symbol? symbol = null;
1551private Symbol? BindPropertyPatternMember(
Binder\Binder_Query.cs (6)
302state.selectOrGroup, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty,
747yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), CreateErrorType());
753yExpression = new BoundBadExpression(yExpression.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(yExpression), yExpression.Type);
814field2Value = new BoundBadExpression(field2Value.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(field2Value), field2Value.Type, true);
970receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.NotAValue, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(receiver), CreateErrorType());
992receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.NotAValue, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(receiver), CreateErrorType());
Binder\Binder_QueryErrors.cs (3)
29ImmutableArray<Symbol> symbols,
164internal static void ReportQueryInferenceFailed(CSharpSyntaxNode queryClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics)
213private static bool ReportQueryInferenceFailedSelectMany(FromClauseSyntax fromClause, string methodName, BoundExpression receiver, AnalyzedArguments arguments, ImmutableArray<Symbol> symbols, BindingDiagnosticBag diagnostics)
Binder\Binder_Symbols.cs (57)
197Symbol symbol = null;
351private NamespaceOrTypeSymbol GetContainingNamespaceOrNonExtensionType(Symbol symbol)
362internal Symbol BindNamespaceAliasSymbol(IdentifierNameSyntax node, BindingDiagnosticBag diagnostics)
377Symbol bindingResult = ResultSymbol(result, plainName, 0, node, diagnostics, false, out wasError, qualifierOpt: null, options: LookupOptions.NamespaceAliasesOnly);
588var bindingResult = BindNamespaceAliasSymbol(node.Alias, diagnostics);
887Symbol bindingResult = null;
965foreach (var s in result.Symbols)
986foreach (var s in result.Symbols)
1060Symbol.ReportUseSiteDiagnostic(info, diagnostics, node.Location);
1093private static Symbol UnwrapAliasNoDiagnostics(Symbol symbol, ConsList<TypeSymbol> basesBeingResolved = null)
1125private Symbol UnwrapAlias(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1131private Symbol UnwrapAlias(Symbol symbol, out AliasSymbol alias, BindingDiagnosticBag diagnostics, SyntaxNode syntax, ConsList<TypeSymbol> basesBeingResolved = null)
1289Symbol lookupResultSymbol = ResultSymbol(lookupResult, plainName, arity, node, diagnostics, (basesBeingResolved != null), out wasError, qualifierOpt, options);
1318ImmutableArray.Create<Symbol>(lookupResultSymbol),
1430ArrayBuilder<Symbol> members,
1474ImmutableArray<TypeWithAnnotations> typeArguments, bool invoked, ArrayBuilder<Symbol> members, BindingDiagnosticBag diagnostics)
1508receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Ambiguous, ImmutableArray<Symbol>.Empty, ImmutableArray.Create(receiver), receiver.Type, hasErrors: true).MakeCompilerGenerated();
1518receiver = new BoundBadExpression(receiver.Syntax, LookupResultKind.Empty, ImmutableArray<Symbol>.Empty, childBoundNodes: [receiver], receiver.Type, hasErrors: true).MakeCompilerGenerated();
1543ArrayBuilder<Symbol> members, TypeSymbol receiverType,
1576foreach (Symbol symbol in lookupResult.Symbols)
1614private static readonly Func<Symbol, MethodSymbol> s_toMethodSymbolFunc = s => (MethodSymbol)s;
1615private static readonly Func<Symbol, PropertySymbol> s_toPropertySymbolFunc = s => (PropertySymbol)s;
1723internal Symbol GetSpecialTypeMember(SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1728internal static Symbol GetSpecialTypeMember(CSharpCompilation compilation, SpecialMember member, BindingDiagnosticBag diagnostics, SyntaxNode syntax)
1730Symbol memberSymbol;
1737where TSymbol : Symbol
1777private static UseSiteInfo<AssemblySymbol> GetUseSiteInfoForWellKnownMemberOrContainingType(Symbol symbol)
1792internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxNode node)
1797internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, SyntaxToken token)
1808internal static bool ReportUseSite(Symbol symbol, BindingDiagnosticBag diagnostics, Location location)
1879internal Symbol GetWellKnownTypeMember(WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1888internal static Symbol GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, BindingDiagnosticBag diagnostics, Location location = null, SyntaxNode syntax = null, bool isOptional = false)
1893Symbol memberSymbol = GetWellKnownTypeMember(compilation, member, out useSiteInfo, isOptional);
1902internal static Symbol GetWellKnownTypeMember(CSharpCompilation compilation, WellKnownMember member, out UseSiteInfo<AssemblySymbol> useSiteInfo, bool isOptional = false)
1904Symbol memberSymbol = compilation.GetWellKnownTypeMember(member);
1945private class ConsistentSymbolOrder : IComparer<Symbol>
1948public int Compare(Symbol fst, Symbol snd)
1970internal Symbol ResultSymbol(
1981Symbol symbol = resultSymbol(result, simpleName, arity, where, diagnostics, suppressUseSiteDiagnostics, out wasError, qualifierOpt, options);
1999Symbol resultSymbol(
2038var srcSymbol = symbols[best.Index];
2039var mdSymbol = symbols[secondBest.Index];
2097var first = symbols[best.Index];
2098var second = symbols[secondBest.Index];
2100Debug.Assert(!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything) || options.IsAttributeTypeLookup(),
2103Debug.Assert(!Symbol.Equals(first, second, TypeCompareKind.ConsiderEverything) || !Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2259!Symbol.Equals(originalSymbols[best.Index], originalSymbols[secondBest.Index], TypeCompareKind.ConsiderEverything),
2314var singleResult = symbols[0];
2422private static AssemblySymbol GetContainingAssembly(Symbol symbol)
2542private BestSymbolInfo GetBestSymbolInfo(ArrayBuilder<Symbol> symbols, out BestSymbolInfo secondBest)
2550var symbol = symbols[i];
2588private static BestSymbolLocation GetLocation(CSharpCompilation compilation, Symbol symbol)
Binder\BinderFactory.BinderFactoryVisitor.cs (10)
24private Symbol _memberOpt;
27internal void Initialize(BinderFactory factory, int position, CSharpSyntaxNode memberDeclarationOpt, Symbol memberOpt)
436Symbol containingSymbol = binder.ContainingMemberOrLambda;
560private Symbol GetMemberSymbol(string memberName, TextSpan memberSpan, NamedTypeSymbol container, SymbolKind kind)
566foreach (Symbol sym in sourceMemberContainerTypeSymbol.GetMembersToMatchAgainstDeclarationSpan())
573if (sym.Name == memberName && checkSymbol(sym, memberSpan, kind, out Symbol result))
581foreach (Symbol sym in container.GetMembers(memberName))
583if (checkSymbol(sym, memberSpan, kind, out Symbol result))
592bool checkSymbol(Symbol sym, TextSpan memberSpan, SymbolKind kind, out Symbol result)
Binder\BindingDiagnosticBag.cs (7)
87internal void AddDependencies(Symbol? symbol)
95internal bool ReportUseSite(Symbol? symbol, SyntaxNode node)
100internal bool ReportUseSite(Symbol? symbol, SyntaxToken token)
105internal bool ReportUseSite(Symbol? symbol, Location location)
108internal bool ReportUseSite<TData>(Symbol? symbol, Func<TData, Location> getLocation, TData data)
151return Symbol.ReportUseSiteDiagnostic(diagnosticInfo, diagnosticBag, location);
174internal CSDiagnosticInfo Add(ErrorCode code, Location location, ImmutableArray<Symbol> symbols, params object[] args)
Binder\InMethodBinder.cs (10)
27private SmallDictionary<string, Symbol> _lazyDefinitionMap;
49private static void RecordDefinition<T>(SmallDictionary<string, Symbol> declarationMap, ImmutableArray<T> definitions) where T : Symbol
51foreach (Symbol s in definitions)
72internal override Symbol ContainingMemberOrLambda
243private static bool ReportConflictWithParameter(Symbol parameter, Symbol newSymbol, string name, Location newLocation, BindingDiagnosticBag diagnostics)
331internal override bool EnsureSingleDefinition(Symbol symbol, string name, Location location, BindingDiagnosticBag diagnostics)
355map = new SmallDictionary<string, Symbol>();
362Symbol existingDeclaration;
Binder\LookupResult.cs (17)
17internal delegate SingleLookupResult LookupFilter(Symbol sym);
68private readonly ArrayBuilder<Symbol> _symbolList;
79_symbolList = new ArrayBuilder<Symbol>();
109internal Symbol SingleSymbolOrDefault
117internal ArrayBuilder<Symbol> Symbols
155internal static SingleLookupResult Good(Symbol symbol)
160internal static SingleLookupResult WrongArity(Symbol symbol, DiagnosticInfo error)
170internal static SingleLookupResult NotReferencable(Symbol symbol, DiagnosticInfo error)
175internal static SingleLookupResult StaticInstanceMismatch(Symbol symbol, DiagnosticInfo error)
180internal static SingleLookupResult Inaccessible(Symbol symbol, DiagnosticInfo error)
185internal static SingleLookupResult NotInvocable(Symbol unwrappedSymbol, Symbol symbol, bool diagnose)
191internal static SingleLookupResult NotLabel(Symbol symbol, DiagnosticInfo error)
196internal static SingleLookupResult NotTypeOrNamespace(Symbol symbol, DiagnosticInfo error)
201internal static SingleLookupResult NotTypeOrNamespace(Symbol unwrappedSymbol, Symbol symbol, bool diagnose)
208internal static SingleLookupResult NotAnAttributeType(Symbol symbol, DiagnosticInfo error)
Binder\Semantics\AccessCheck.cs (11)
25Symbol symbol,
38Symbol symbol,
53Symbol symbol,
67internal static bool IsEffectivelyPublicOrInternal(Symbol symbol, out bool isInternal)
134Symbol symbol,
135Symbol within, // must be assembly or named type symbol
223private static bool IsNamedTypeAccessible(NamedTypeSymbol type, Symbol within, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, ConsList<TypeSymbol> basesBeingResolved = null)
259Symbol within)
300Symbol within,
345Symbol within,
494Symbol within,
Binder\Semantics\OverloadResolution\OverloadResolution.cs (61)
66where TMember : Symbol
80where TMember : Symbol
196where TMember : Symbol
321where TMember : Symbol
360where TMember : Symbol
440where TMember : Symbol
492private static readonly ObjectPool<PooledHashSet<Symbol>> s_HiddenSymbolsSetPool = PooledHashSet<Symbol>.CreatePool(Microsoft.CodeAnalysis.CSharp.Symbols.SymbolEqualityComparer.AllIgnoreOptions);
495where TMember : Symbol
497PooledHashSet<Symbol> hiddenSymbols = null;
508foreach (Symbol hidden in getHiddenMembers(result.LeastOverriddenMember.ConstructedFrom()))
540static ImmutableArray<Symbol> getHiddenMembers(Symbol member)
551return ImmutableArray<Symbol>.Empty;
582BoundExpression receiverOpt) where TMember : Symbol
608private static void RemoveStaticInstanceMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, bool requireStatic) where TMember : Symbol
626private static void RemoveMethodsNotDeclaredStatic<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
642private void RemoveConstraintViolations<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
663private void RemoveCallingConventionMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, in CallingConventionInfo expectedConvention) where TMember : Symbol
686var member = (MethodSymbol)(Symbol)result.Member;
792private bool FailsConstraintChecks<TMember>(TMember member, out ArrayBuilder<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
852bool isFunctionPointerConversion) where TMember : Symbol
868var method = (MethodSymbol)(Symbol)result.Member;
900private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
918private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
1067where TMember : Symbol
1235where TMember : Symbol
1296public static bool IsValidParams(Binder binder, Symbol member, bool disallowExpandedNonArrayParams, out TypeWithAnnotations definitionElementType)
1380Symbol member,
1381Symbol moreDerivedOverride,
1413where TMember : Symbol
1437where TMember : Symbol
1457private static bool HidesByName(Symbol member)
1471where TMember : Symbol
1497where TMember : Symbol
1620where TMember : Symbol
1663where TMember : Symbol
1781where TMember : Symbol
1790where TMember : Symbol
1851where TMember : Symbol
1942where TMember : Symbol
2093where TMember : Symbol
2133where TMember : Symbol
2676private static RefKind GetParameterBetternessRefKind<TMember>(ParameterSymbol parameter, TMember member) where TMember : Symbol
2691where TMember : Symbol
2711private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
3844Symbol member,
3889out bool hasAnyRefOmittedArgument) where TMember : Symbol
4037Options options) where TMember : Symbol
4050out bool hasAnyRefOmittedArgument) where TMember : Symbol
4108where TMember : Symbol
4189where TMember : Symbol
4257where TMember : Symbol
4356var methodForTypeParameters = isNewExtensionMember ? leastOverriddenMember.OriginalDefinition : leastOverriddenMember;
4414where TMember : Symbol
4463(MethodSymbol)(Symbol)member,
4483Symbol candidate, // method or property
4688Symbol candidate, // method or property
4764private static bool TypeContainsTypeParameterFromContainer(Symbol container, TypeSymbol parameterType)
4774private static TMember GetConstructedFrom<TMember>(TMember member) where TMember : Symbol
4781return (TMember)(Symbol)(member as MethodSymbol).ConstructedFrom;
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (25)
26internal class OverloadResolutionResult<TMember> where TMember : Symbol
222bool isExtension = false) where T : Symbol
233var symbols = StaticCast<Symbol>.From(memberGroup);
598private static void ReportUnsupportedMetadata(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstUnsupported)
610Symbol.ReportUseSiteDiagnostic(diagInfo, diagnostics, location);
613private static void ReportWrongCallingConvention(Location location, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, MemberResolutionResult<TMember> firstSupported, MethodSymbol target)
640ImmutableArray<Symbol> symbols,
659ImmutableArray<Symbol> symbols,
674Symbol symbol = staticInstanceMismatch.Member;
728var method = (MethodSymbol)(Symbol)mismatch.Member;
758ImmutableArray<Symbol> symbols,
823ImmutableArray<Symbol> symbols)
843ImmutableArray<Symbol> symbols)
876ImmutableArray<Symbol> symbols)
911ImmutableArray<Symbol> symbols,
956ImmutableArray<Symbol> symbols,
1075MethodSymbol method = (MethodSymbol)(Symbol)result.Member;
1115ImmutableArray<Symbol> symbols,
1184ImmutableArray<Symbol> symbols,
1409static Symbol unwrapIfParamsCollection(MemberResolutionResult<TMember> badArg, ParameterSymbol parameter, bool isLastParameter)
1421private bool HadAmbiguousWorseMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isQuery, BoundExpression receiver, string name, bool isExtension)
1487private bool HadAmbiguousBestMethods(CSharpCompilation compilation, BindingDiagnosticBag diagnostics, ImmutableArray<Symbol> symbols, Location location, bool isExtension)
1543internal static DiagnosticInfoWithSymbols CreateAmbiguousCallDiagnosticInfo(CSharpCompilation compilation, Symbol first, Symbol second, ImmutableArray<Symbol> symbols, bool isExtension)
CommandLine\CSharpCompiler.cs (6)
247Symbol? entryPoint = comp.ScriptClass;
386var symbol = diag switch
388{ Code: (int)ErrorCode.ERR_BadAccess, Arguments: [Symbol s] } => s,
389{ Code: (int)ErrorCode.ERR_InaccessibleGetter, Arguments: [Symbol s] } => s,
390{ Code: (int)ErrorCode.ERR_InaccessibleSetter, Arguments: [Symbol s] } => s,
391{ Code: (int)ErrorCode.ERR_ImplicitImplementationOfInaccessibleInterfaceMember, Arguments: [_, Symbol s, _] } => s,
Compilation\AttributeSemanticModel.cs (11)
19private readonly Symbol? _attributeTarget;
24Symbol? attributeTarget,
28ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt = null)
39public static AttributeSemanticModel Create(PublicSemanticModel containingSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Symbol? attributeTarget, Binder rootBinder, ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
48public static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, AttributeSyntax syntax, NamedTypeSymbol attributeType, AliasSymbol aliasOpt, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt, int position)
108ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
Compilation\CSharpCompilation.cs (30)
345internal bool IsRuntimeAsyncEnabledIn(Symbol? symbol)
1250internal new Symbol? GetAssemblyOrModuleSymbol(MetadataReference reference)
1271return (TSymbol?)(object?)symbol.GetSymbol<Symbol>();
1811internal Symbol GetSpecialTypeMember(SpecialMember specialMember)
1840ImmutableArray<Symbol>.Empty,
2119var taskCandidates = taskEntryPoints.SelectAsArray(s => (Symbol)s.Candidate);
2122foreach (var candidate in taskCandidates)
2193symbols: viableEntryPoints.OfType<Symbol>().AsImmutable(),
2217ArrayBuilder<MethodSymbol> entryPointCandidates, IEnumerable<Symbol> members)
2219foreach (var member in members)
2236static void addIfCandidate(ArrayBuilder<MethodSymbol> entryPointCandidates, Symbol member)
2483Symbol? symbol0 = symbol.EnsureCSharpSymbolOrNull(nameof(symbol));
2484Symbol? within0 = within.EnsureCSharpSymbolOrNull(nameof(within));
3021private void GetDiagnosticsWithoutSeverityFiltering(CompilationStage stage, bool includeEarlierStages, BindingDiagnosticBag builder, Predicate<Symbol>? symbolFilter, CancellationToken cancellationToken)
3153private static bool IsDefinedOrImplementedInSourceTree(Symbol symbol, SyntaxTree tree, TextSpan? span)
3259filterOpt: filterTree is object ? (Predicate<Symbol>?)(s => IsDefinedOrImplementedInSourceTree(s, filterTree, filterSpan)) : (Predicate<Symbol>?)null,
3301private ReadOnlyBindingDiagnostic<AssemblySymbol> GetSourceDeclarationDiagnostics(SyntaxTree? syntaxTree = null, TextSpan? filterSpanWithinTree = null, Func<IEnumerable<Diagnostic>, SyntaxTree, TextSpan?, IEnumerable<Diagnostic>>? locationFilterOpt = null, Predicate<Symbol>? symbolFilter = null, CancellationToken cancellationToken = default)
3709foreach (var childSymbol in symbol.GetMembers())
4762internal IEnumerable<Symbol> GetSymbolsWithNameCore(string name, SymbolFilter filter = SymbolFilter.TypeAndMember, CancellationToken cancellationToken = default)
4825internal bool ShouldEmitNullableAttributes(Symbol symbol)
4851static Symbol getExplicitAccessibilitySymbol(Symbol symbol)
4877internal void SymbolDeclaredEvent(Symbol symbol)
4943var sustainedLowLatency = GetWellKnownTypeMember(WellKnownMember.System_Runtime_GCLatencyMode__SustainedLowLatency);
4977public IEnumerable<Symbol> GetSymbolsWithName()
4979var result = new HashSet<Symbol>();
4991HashSet<Symbol> set)
5045ArrayBuilder<MergedNamespaceOrTypeDeclaration> spine, MergedTypeDeclaration current, HashSet<Symbol> set)
5053foreach (var member in container.GetMembers())
Compilation\CSharpSemanticModel.cs (143)
168internal abstract BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols);
178internal abstract ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken));
280protected BoundExpression GetSpeculativelyBoundExpressionWithoutNullability(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
287crefSymbols = default(ImmutableArray<Symbol>);
299crefSymbols = ImmutableArray.Create<Symbol>(binder.BindType(expression, BindingDiagnosticBag.Discarded).Type);
325internal static ImmutableArray<Symbol> BindCref(CrefSyntax crefSyntax, Binder binder)
327Symbol unusedAmbiguityWinner;
337ImmutableArray<Symbol> symbols = BindCref(crefSyntax, binder);
368private static SymbolInfo GetCrefSymbolInfo(OneOrMany<Symbol> symbols, SymbolInfoOptions options, bool hasParameterList)
724ImmutableArray<Symbol> crefSymbols;
1054ImmutableArray<Symbol> crefSymbols;
1201ImmutableArray<Symbol> crefSymbols;
1672foreach (Symbol symbol in lookupResult.Symbols)
1704Symbol uniqueSymbol;
1766Symbol singleSymbol = binder.ResultSymbol(lookupResult, name, arity, this.Root, BindingDiagnosticBag.Discarded, true, out wasError, container, options);
1774foreach (var symbol in lookupResult.Symbols)
1782foreach (var symbol in lookupResult.Symbols)
1792private Symbol RemapSymbolIfNecessary(Symbol symbol)
1810internal abstract Symbol RemapSymbolIfNecessaryCore(Symbol symbol);
1827public bool IsAccessible(int position, Symbol symbol)
1879Constraint = "Provide " + nameof(ArrayBuilder<Symbol>) + " capacity to reduce number of allocations.")]
1916OneOrMany<Symbol> symbols = GetSemanticSymbols(
1917boundExpr, boundNodeForSyntacticParent, binderOpt, options, out bool isDynamic, out LookupResultKind resultKind, out ImmutableArray<Symbol> unusedMemberGroup);
1924ImmutableArray<Symbol> unusedHighestMemberGroup;
1925OneOrMany<Symbol> highestSymbols = GetSemanticSymbols(
1940ImmutableArray<Symbol> unusedHighestMemberGroup;
1941OneOrMany<Symbol> highestSymbols = GetSemanticSymbols(
1956return SymbolInfoFactory.Create(ImmutableArray<Symbol>.Empty, LookupResultKind.Empty, isDynamic);
1962var builder = ArrayBuilder<Symbol>.GetInstance(symbols.Count);
1963foreach (Symbol symbol in symbols)
1984private static SymbolInfo GetSymbolInfoForSubpattern(Symbol subpatternSymbol)
1999private static void AddUnwrappingErrorTypes(ArrayBuilder<Symbol> builder, Symbol s)
2273internal ImmutableArray<Symbol> GetMemberGroupForNode(
2282ImmutableArray<Symbol> memberGroup;
2289return ImmutableArray<Symbol>.Empty;
2311internal static SymbolInfo GetSymbolInfoForSymbol(Symbol symbol, SymbolInfoOptions options)
2316Symbol unwrapped = UnwrapAlias(symbol);
2325var symbols = OneOrMany<Symbol>.Empty;
2343var symbolToReturn = ((options & SymbolInfoOptions.ResolveAliases) != 0) ? unwrapped : symbol;
2349internal static CSharpTypeInfo GetTypeInfoForSymbol(Symbol symbol)
2359protected static Symbol UnwrapAlias(Symbol symbol)
2364protected static OneOrMany<Symbol> UnwrapAliases(OneOrMany<Symbol> symbols)
2368foreach (Symbol symbol in symbols)
2377ArrayBuilder<Symbol> builder = ArrayBuilder<Symbol>.GetInstance();
2378foreach (Symbol symbol in symbols)
3342private OneOrMany<Symbol> GetSemanticSymbols(
3349out ImmutableArray<Symbol> memberGroup)
3351memberGroup = ImmutableArray<Symbol>.Empty;
3352OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
3408var typeSymbol = boundType.AliasOpt ?? (Symbol)boundType.Type;
3460symbols = OneOrMany.Create<Symbol>(invocation.FunctionPointer);
3489symbols = originalIndexersOpt.IsDefault ? OneOrMany.Create<Symbol>(indexerAccess.Indexer) : StaticCast<Symbol>.From(OneOrMany.Create(originalIndexersOpt));
3504symbols = OneOrMany<Symbol>.Empty;
3509symbols = OneOrMany.Create<Symbol>(methodSymbol);
3515boundNode.ExpressionSymbol is Symbol accessSymbol &&
3521symbols = OneOrMany.Create<Symbol>(parentOperator.Event);
3534symbols = OneOrMany.Create<Symbol>(ReducedExtensionMethodSymbol.Create(symbol));
3619var builder = ArrayBuilder<Symbol>.GetInstance();
3630memberGroup = dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3638memberGroup = collectionInit.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3646memberGroup = dynamicIndexer.ApplicableIndexers.Cast<PropertySymbol, Symbol>();
3658memberGroup = objectCreation.ApplicableMethods.Cast<MethodSymbol, Symbol>();
3669symbols = OneOrMany.Create<Symbol>(boundObjectCreation.Constructor);
3673symbols = StaticCast<Symbol>.From(OneOrMany.Create(boundObjectCreation.ConstructorsGroup));
3677memberGroup = boundObjectCreation.ConstructorsGroup.Cast<MethodSymbol, Symbol>();
3685var containingMember = binder.ContainingMember();
3688symbols = thisParam != null ? OneOrMany.Create<Symbol>(thisParam) : OneOrMany<Symbol>.Empty;
3697symbols = OneOrMany.Create<Symbol>(fromEndIndexExpression.MethodOpt);
3707symbols = OneOrMany.Create<Symbol>(rangeExpression.MethodOpt);
3714if (boundNode.ExpressionSymbol is Symbol symbol)
3732private static ParameterSymbol GetThisParameter(TypeSymbol typeOfThis, NamedTypeSymbol containingType, Symbol containingMember, out LookupResultKind resultKind)
3800private static void GetSymbolsAndResultKind(BoundUnaryOperator unaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3816symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(unaryOperator.Operand.Type.StrippedType(),
3823private static void GetSymbolsAndResultKind(BoundIncrementOperator increment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3840symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(opType,
3847private static void GetSymbolsAndResultKind(BoundBinaryOperator binaryOperator, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3873symbols = OneOrMany.Create<Symbol>(new SynthesizedIntrinsicOperatorSymbol(objectType,
3891private static Symbol GetIntrinsicOperatorSymbol(BinaryOperatorKind op, bool isDynamic, TypeSymbol leftType, TypeSymbol rightType, TypeSymbol returnType, bool isChecked)
3920private static void GetSymbolsAndResultKind(BoundCompoundAssignmentOperator compoundAssignment, out bool isDynamic, ref LookupResultKind resultKind, ref OneOrMany<Symbol> symbols)
3946private static void GetSymbolsAndResultKind(BoundExpression node, Symbol symbolOpt, ImmutableArray<MethodSymbol> originalCandidates, out OneOrMany<Symbol> symbols, out LookupResultKind resultKind)
3955symbols = StaticCast<Symbol>.From(OneOrMany.Create(originalCandidates));
3960symbols = OneOrMany<Symbol>.Empty;
3973ref OneOrMany<Symbol> symbols,
3974ref ImmutableArray<Symbol> memberGroup)
4026ref OneOrMany<Symbol> symbols,
4027ref ImmutableArray<Symbol> memberGroup)
4067symbols = OneOrMany.Create<Symbol>(constructorOpt);
4071symbols = StaticCast<Symbol>.From(OneOrMany.Create(candidateConstructors));
4076memberGroup = candidateConstructors.Cast<MethodSymbol, Symbol>();
4117PooledHashSet<Symbol> hiddenSymbols = null;
4120Symbol symbol = iSymbol.GetSymbol();
4126foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4130hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4138foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4142hiddenSymbols = PooledHashSet<Symbol>.GetInstance();
4210HashSet<Symbol> hiddenSymbols = new HashSet<Symbol>();
4215foreach (Symbol overridden in overriddenOrHiddenMembers.OverriddenMembers)
4223foreach (Symbol hidden in overriddenOrHiddenMembers.HiddenMembers)
4239private OneOrMany<Symbol> GetMethodGroupSemanticSymbols(
4245out ImmutableArray<Symbol> memberGroup)
4249OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4321symbols = OneOrMany.Create((Symbol)method);
4333symbols = OneOrMany.Create(dynamicInvocation.ApplicableMethods.Cast<MethodSymbol, Symbol>());
4339ImmutableArray<Symbol> myMethodGroup = memberGroup;
4392private OneOrMany<Symbol> GetPropertyGroupSemanticSymbols(
4397out ImmutableArray<Symbol> propertyGroup)
4401OneOrMany<Symbol> symbols = OneOrMany<Symbol>.Empty;
4410propertyGroup = boundNode.Properties.Cast<PropertySymbol, Symbol>();
4427symbols = OneOrMany.Create<Symbol>(indexer.Indexer);
4433symbols = StaticCast<Symbol>.From(OneOrMany.Create(indexer.OriginalIndexersOpt));
4440ImmutableArray<Symbol> myPropertyGroup = propertyGroup;
4568internal static ImmutableArray<Symbol> GetReducedAndFilteredMethodGroupSymbols(Binder binder, BoundMethodGroup node)
4570var members = ArrayBuilder<Symbol>.GetInstance();
4571var filteredMembers = ArrayBuilder<Symbol>.GetInstance();
4598var otherSymbol = node.LookupSymbolOpt;
4677ArrayBuilder<Symbol> members,
4678ArrayBuilder<Symbol> filteredMembers,
4679Symbol member,
4684Symbol? substitutedMember = member.GetReducedAndFilteredSymbol(typeArguments, receiverType, compilation, checkFullyInferred: false);
4703ArrayBuilder<Symbol> members,
4704ArrayBuilder<Symbol> filteredMembers,
4716Symbol member = singleResult.Symbol;
4747private static OneOrMany<Symbol> CreateReducedAndFilteredSymbolsFromOriginals(BoundCall call, CSharpCompilation compilation)
4768var methodBuilder = ArrayBuilder<Symbol>.GetInstance();
4769var filteredMethodBuilder = ArrayBuilder<Symbol>.GetInstance();
4783private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundCall call)
4797return OneOrMany.Create<Symbol>(method);
4800private OneOrMany<Symbol> CreateReducedExtensionMethodIfPossible(BoundDelegateCreationExpression delegateCreation, BoundExpression receiverOpt)
4810return OneOrMany.Create<Symbol>(method);
Compilation\InitializerSemanticModel.cs (10)
27Symbol symbol,
30ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt = null) :
59internal static InitializerSemanticModel Create(PublicSemanticModel containingSemanticModel, ParameterSyntax syntax, ParameterSymbol parameterSymbol, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt)
69internal static SpeculativeSemanticModelWithMemberModel CreateSpeculative(SyntaxTreeSemanticModel parentSemanticModel, Symbol owner, EqualsValueClauseSyntax syntax, Binder rootBinder, ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt, int position)
259ref ImmutableDictionary<Symbol, Symbol> remappedSymbols)
Compilation\MemberSemanticModel.cs (26)
29private readonly Symbol _memberSymbol;
37private ImmutableDictionary<Symbol, Symbol> _lazyRemappedSymbols;
38private readonly ImmutableDictionary<Symbol, Symbol> _parentRemappedSymbolsOpt;
48Symbol memberSymbol,
51ImmutableDictionary<Symbol, Symbol> parentRemappedSymbolsOpt)
85internal Symbol MemberSymbol
163internal ImmutableDictionary<Symbol, Symbol> GetRemappedSymbols()
192internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
206ImmutableDictionary<Symbol, Symbol> ignored = null;
721private T GetRemappedSymbol<T>(T originalSymbol) where T : Symbol
726if (_lazyRemappedSymbols.TryGetValue(originalSymbol, out Symbol? remappedSymbol))
1271internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
1512protected void UnguardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
1520protected void GuardedAddBoundTreeForStandaloneSyntax(SyntaxNode syntax, BoundNode bound, NullableWalker.SnapshotManager manager = null, ImmutableDictionary<Symbol, Symbol> remappedSymbols = null)
2084ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols);
2379internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
2390if (_lazyRemappedSymbols.TryGetValue(symbol, out var remappedSymbol))
Compilation\SpeculativeSemanticModelWithMemberModel.cs (15)
48ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
57static Symbol? getAttributeTargetFromPosition(int position, SyntaxTreeSemanticModel model)
74Symbol owner,
77ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt)
90Symbol owner,
93ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt,
106ImmutableDictionary<Symbol, Symbol>? parentRemappedSymbolsOpt,
470internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
510internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
575internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
Compilation\SyntaxTreeSemanticModel.cs (18)
284var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: (options & SymbolInfoOptions.PreserveAliases) != 0);
322var symbol = GetSemanticInfoSymbolInNonMemberContext(node, bindVarAsAliasFirst: false); // Don't care about aliases here.
330private Symbol GetSemanticInfoSymbolInNonMemberContext(CSharpSyntaxNode node, bool bindVarAsAliasFirst)
356Symbol result = bindVarAsAliasFirst
397internal override ImmutableArray<Symbol> GetMemberGroupWorker(CSharpSyntaxNode node, SymbolInfoOptions options, CancellationToken cancellationToken = default(CancellationToken))
403return model == null ? ImmutableArray<Symbol>.Empty : model.GetMemberGroupWorker(node, options, cancellationToken);
738internal override BoundExpression GetSpeculativelyBoundExpression(int position, ExpressionSyntax expression, SpeculativeBindingOption bindingOption, out Binder binder, out ImmutableArray<Symbol> crefSymbols)
1400foreach (var symbol in collection)
1778private Symbol GetDeclaredMember(NamespaceOrTypeSymbol container, TextSpan declarationSpan, bool isKnownToBeANamespace, string name = null)
1806Symbol zeroWidthMatch = null;
1807foreach (var symbol in collection)
1813var result = GetDeclaredMember(namedType, declarationSpan, isKnownToBeANamespace, name);
1830Symbol partial = symbol.GetPartialImplementationPart();
1864var result = this.GetDeclaredMember(container, declarationSyntax.Span, isKnownToBeANamespace: false, declarationSyntax.Identifier.ValueText);
2346private static BoundNode GetBoundRoot(MemberSemanticModel memberModel, out Symbol member)
2398private Symbol GetDeclaredMemberSymbol(CSharpSyntaxNode declarationSyntax)
2449internal override Symbol RemapSymbolIfNecessaryCore(Symbol symbol)
Compiler\ClsComplianceChecker.cs (36)
32private readonly ConcurrentDictionary<Symbol, Compliance> _declaredOrInheritedCompliance;
52_declaredOrInheritedCompliance = new ConcurrentDictionary<Symbol, Compliance>(Symbols.SymbolEqualityComparer.ConsiderEverything);
212foreach (var m in symbol.GetMembersUnordered())
230foreach (var m in symbol.GetMembersUnordered())
267foreach (var m in symbol.GetMembersUnordered())
420private bool VisitTypeOrMember(Symbol symbol, Compliance compliance)
497private void CheckForNonCompliantAbstractMember(Symbol symbol)
541private void CheckForCompliantWithinNonCompliant(Symbol symbol)
585private void CheckForAttributeWithArrayArgument(Symbol symbol)
680Symbol container = parameters[0].ContainingSymbol;
683Symbol associated = ((MethodSymbol)container).AssociatedSymbol;
711private void CheckReturnTypeCompliance(Symbol symbol)
784private bool CheckForDeclarationWithoutAssemblyDeclaration(Symbol symbol, Compliance compliance)
807MultiDictionary<string, Symbol> seenByName = new MultiDictionary<string, Symbol>(CaseInsensitiveComparison.Comparer);
823foreach (Symbol member in @interface.GetMembersUnordered())
838foreach (Symbol member in baseType.GetMembersUnordered())
855foreach (Symbol member in symbol.GetMembers())
884private void CheckSymbolDistinctness(Symbol symbol, string symbolName, MultiDictionary<string, Symbol>.ValueSet sameNameSymbols)
891foreach (Symbol other in sameNameSymbols)
906foreach (Symbol other in sameNameSymbols)
927private void CheckName(Symbol symbol)
960private bool DoNotVisit(Symbol symbol)
973private bool IsSyntacticallyFilteredOut(Symbol symbol)
1114private Compliance GetDeclaredOrInheritedCompliance(Symbol symbol)
1127Symbol associated = method.AssociatedSymbol;
1170private Compliance GetInheritedCompliance(Symbol symbol)
1174Symbol containing = (Symbol)symbol.ContainingType ?? symbol.ContainingAssembly;
1184private bool? GetDeclaredCompliance(Symbol symbol, out Location attributeLocation)
1220private static bool IsAccessibleOutsideAssembly(Symbol symbol)
1233private static bool IsAccessibleIfContainerIsAccessible(Symbol symbol)
1267private static bool IsImplicitClass(Symbol symbol)
1316private static bool TryGetCollisionErrorCode(Symbol x, Symbol y, out ErrorCode code)
Compiler\DocumentationCommentCompiler.cs (23)
138internal static string GetDocumentationCommentXml(Symbol symbol, bool processIncludes, CancellationToken cancellationToken)
199foreach (var s in symbol.GetMembers())
242foreach (Symbol member in symbol.GetMembers())
274foreach (Symbol member in extension.GetMembers())
343Symbol symbolForDocComment = underlyingMethod.IsAccessor()
363static bool hasDocumentationTrivia(Symbol symbol)
383public override void DefaultVisit(Symbol symbol)
400Symbol? implementationPart = symbol.GetPartialImplementationPart();
426var symbolForDocComments = symbol is SynthesizedRecordPropertySymbol ? symbol.ContainingType : symbol;
462private static bool ShouldSkip(Symbol symbol)
532Symbol symbol,
628Symbol symbol,
737private static Location GetLocationInTreeReportingDocumentationCommentDiagnostics(Symbol symbol)
753private static ImmutableArray<ParameterSymbol> GetParameters(Symbol symbol)
776private static ImmutableArray<TypeParameterSymbol> GetTypeParameters(Symbol symbol)
794private static bool RequiresDocumentationComment(Symbol symbol)
825private bool TryGetDocumentationCommentNodes(Symbol symbol, out DocumentationMode maxDocumentationMode, out ImmutableArray<DocumentationCommentTriviaSyntax> nodes)
1209Symbol ambiguityWinner;
1210ImmutableArray<Symbol> symbols = binder.BindCref(crefSyntax, out ambiguityWinner, diagnostics);
1212Symbol symbol;
1266Symbol memberSymbol,
1299ImmutableArray<Symbol> referencedSymbols = binder.BindXmlNameAttribute(syntax, ref useSiteInfo);
1324foreach (Symbol referencedSymbol in referencedSymbols)
Emitter\Model\PEModuleBuilder.cs (24)
31protected readonly ConcurrentDictionary<Symbol, Cci.IModuleReference> AssemblyOrModuleSymbolToModuleRefMap = new ConcurrentDictionary<Symbol, Cci.IModuleReference>();
32private readonly ConcurrentDictionary<Symbol, object> _genericInstanceMap = new ConcurrentDictionary<Symbol, object>(Symbols.SymbolEqualityComparer.ConsiderEverything);
239foreach (var member in symbol.GetMembers())
359foreach (var member in symbol.GetMembers())
382foreach (var member in symbol.GetMembers())
449private void AddSymbolLocation(MultiDictionary<Cci.DebugSourceDocument, Cci.DefinitionWithLocation> result, Symbol symbol)
476private Location GetSmallestSourceLocationOrNull(Symbol symbol)
565foreach (var member in ns.GetMembers())
600foreach (var member in (symbol.IsNamespace ? symbol.GetMembers() : symbol.GetTypeMembers().Cast<NamedTypeSymbol, Symbol>()))
973Symbol.ReportUseSiteDiagnostic(info,
1222private object GetCciAdapter(Symbol symbol)
1543var container = param.ContainingSymbol;
1579private static bool ContainerIsGeneric(Symbol container)
1642internal SynthesizedAttributeData SynthesizeIsReadOnlyAttribute(Symbol symbol)
1675internal SynthesizedAttributeData SynthesizeExtensionMarkerAttribute(Symbol symbol, string markerName)
1686internal SynthesizedAttributeData SynthesizeIsUnmanagedAttribute(Symbol symbol)
1697internal SynthesizedAttributeData SynthesizeIsByRefLikeAttribute(Symbol symbol)
1713internal SynthesizedAttributeData SynthesizeNullableAttributeIfNecessary(Symbol symbol, byte? nullableContextValue, TypeWithAnnotations type)
1773internal SynthesizedAttributeData SynthesizeNullableContextAttribute(Symbol symbol, byte value)
1798internal SynthesizedAttributeData SynthesizeNativeIntegerAttribute(Symbol symbol, TypeSymbol type)
2153Symbol.ReportUseSiteDiagnostic(info, diagnostics, syntaxNode.Location);
Errors\CSDiagnosticInfo.cs (4)
24: this(code, Array.Empty<object>(), ImmutableArray<Symbol>.Empty, ImmutableArray<Location>.Empty)
29: this(code, args, ImmutableArray<Symbol>.Empty, ImmutableArray<Location>.Empty)
33internal CSDiagnosticInfo(ErrorCode code, ImmutableArray<Symbol> symbols, object[] args)
38internal CSDiagnosticInfo(ErrorCode code, object[] args, ImmutableArray<Symbol> symbols, ImmutableArray<Location> additionalLocations)
FlowAnalysis\DataFlowsInWalker.cs (10)
25private readonly HashSet<Symbol> _dataFlowsIn = new HashSet<Symbol>();
27private DataFlowsInWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
28HashSet<Symbol> unassignedVariables, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes)
33internal static HashSet<Symbol> Analyze(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
34HashSet<Symbol> unassignedVariables, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes, out bool? succeeded)
42return badRegion ? new HashSet<Symbol>() : result;
50private HashSet<Symbol> Analyze(ref bool badRegion)
103protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
FlowAnalysis\DataFlowsOutWalker.cs (16)
27private DataFlowsOutWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<Symbol> unassignedVariables, ImmutableArray<ISymbol> dataFlowsIn)
33internal static HashSet<Symbol> Analyze(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<Symbol> unassignedVariables, ImmutableArray<ISymbol> dataFlowsIn)
46return badRegion ? new HashSet<Symbol>() : result;
54private readonly HashSet<Symbol> _dataFlowsOut = new HashSet<Symbol>();
58private readonly HashSet<Symbol> _assignedInside = new HashSet<Symbol>();
61private HashSet<Symbol> Analyze(ref bool badRegion)
80Symbol variableSymbol = variable.GetSymbol();
91protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
114private Symbol GetNodeSymbol(BoundNode node)
207Symbol variable = GetNodeSymbol(node);
252protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
FlowAnalysis\DefiniteAssignment.cs (44)
60private readonly HashSet<Symbol>? initiallyAssignedVariables;
82private readonly PooledHashSet<Symbol> _writtenVariables = PooledHashSet<Symbol>.GetInstance();
114private readonly PooledDictionary<Symbol, Location> _unsafeAddressTakenVariables = PooledDictionary<Symbol, Location>.GetInstance();
119private readonly PooledHashSet<Symbol> _capturedVariables = PooledHashSet<Symbol>.GetInstance();
121private readonly PooledHashSet<Symbol> _capturedInside = PooledHashSet<Symbol>.GetInstance();
122private readonly PooledHashSet<Symbol> _capturedOutside = PooledHashSet<Symbol>.GetInstance();
169Symbol member,
194Symbol member,
198HashSet<Symbol>? initiallyAssignedVariables = null)
216Symbol member,
220HashSet<Symbol> initiallyAssignedVariables,
235Symbol member,
284protected Symbol GetNonMemberSymbol(int slot)
344var save = CurrentSymbol;
445Symbol associatedPropertyOrEvent = field.AssociatedSymbol;
637foreach (Symbol captured in _capturedVariables)
659private void CheckCaptured(Symbol variable, ParameterSymbol? rangeVariableUnderlyingParameter = null)
662Symbol.IsCaptured(rangeVariableUnderlyingParameter ?? variable, sourceMethod))
673private void NoteCaptured(Symbol variable)
688protected IEnumerable<Symbol> GetCapturedInside() => _capturedInside.ToArray();
689protected IEnumerable<Symbol> GetCapturedOutside() => _capturedOutside.ToArray();
690protected IEnumerable<Symbol> GetCaptured() => _capturedVariables.ToArray();
691protected IEnumerable<Symbol> GetUnsafeAddressTaken() => _unsafeAddressTakenVariables.Keys.ToArray();
696private void NotePrimaryConstructorParameterReadIfNeeded(Symbol symbol)
705Symbol variable,
801protected virtual void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
1017protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression receiver, out Symbol member)
1103protected void CheckAssigned(Symbol symbol, SyntaxNode node)
1122private void ReportUnassignedIfNotCapturedInLocalFunction(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration = true)
1139protected virtual void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
1208void addDiagnosticForStructThis(Symbol thisParameter, int thisSlot)
1260var associatedSymbol = fieldSymbol.AssociatedSymbol;
1433private Symbol UseNonFieldSymbolUnsafely(BoundExpression expression)
1757Symbol current = CurrentSymbol;
1801Symbol containing = current.ContainingSymbol;
2380var oldSymbol = this.CurrentSymbol;
2498Symbol variable = UseNonFieldSymbolUnsafely(operand);
2612foreach (var symbol in namedType.GetMembersUnordered())
2662Symbol receiver = UseNonFieldSymbolUnsafely(node.ReceiverOpt);
FlowAnalysis\LocalDataFlowPass.cs (9)
36Symbol? member,
48Symbol member,
75protected int VariableSlot(Symbol symbol, int containingSlot = 0)
100protected virtual int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
161private int DescendThroughTupleRestFields(ref Symbol symbol, int containingSlot, bool forceContainingSlotsToExist)
204protected abstract bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member);
227if (TryGetReceiverAndMember(node, out BoundExpression? receiver, out Symbol? member))
239protected int MakeMemberSlot(BoundExpression? receiverOpt, Symbol member)
262protected static bool HasInitializer(Symbol field) => field switch
FlowAnalysis\NullableWalker.cs (124)
480Symbol? symbol,
695var alreadyWarnedMembers = PooledHashSet<Symbol>.GetInstance();
696foreach (var member in method.ContainingType.GetMembersUnordered())
740void checkMemberStateOnConstructorExit(MethodSymbol constructor, Symbol member, LocalState state, int thisSlot, Location? exitLocation, ImmutableArray<string> membersWithStateEnforcedByRequiredMembers, bool forcePropertyAnalysis)
759Symbol symbol;
765symbol = (Symbol?)(f.AssociatedSymbol as PropertySymbol) ?? f;
826var info = new CSDiagnosticInfo(errorCode, new object[] { symbol.Kind.Localize(), symbol.Name }, ImmutableArray<Symbol>.Empty, additionalLocations: symbol.Locations);
837foreach (var member in getMembersNeedingDefaultInitialState())
844var memberToInitialize = member;
898ImmutableArray<Symbol> getMembersNeedingDefaultInitialState()
902return ImmutableArray<Symbol>.Empty;
942static ImmutableArray<Symbol> membersToBeInitialized(NamedTypeSymbol containingType, bool includeAllMembers, bool includeCurrentTypeRequiredMembers, bool includeBaseRequiredMembers)
947=> ImmutableArray<Symbol>.Empty,
961var symbolToInitialize = getFieldSymbolToBeInitialized(symbol);
965return OneOrMany<Symbol>.Empty;
980static ImmutableArray<Symbol> getAllTypeAndRequiredMembers(TypeSymbol containingType)
983var baseRequiredMembers = containingType.BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
990var builder = ArrayBuilder<Symbol>.GetInstance(members.Length + baseRequiredMembers.Count);
1014static OneOrMany<Symbol> getAllMembersToBeDefaulted(Symbol requiredMember, bool filterOverridingProperties)
1028return OneOrMany<Symbol>.Empty;
1036foreach (var member in property.ContainingType.GetMembers(notNullMemberName))
1046static Symbol getFieldSymbolToBeInitialized(Symbol requiredMember)
1079foreach (var member in method.ContainingType.GetMembers(memberName))
1127void enforceMemberNotNullWhenIfAffected(SyntaxNode? syntaxOpt, bool sense, ImmutableArray<Symbol> members, LocalState state, LocalState otherState)
1129foreach (var member in members)
1146foreach (var member in method.ContainingType.GetMembers(memberName))
1155private void ReportFailedMemberNotNullIfNeeded(SyntaxNode? syntaxOpt, bool sense, Symbol member, LocalState state)
1164private bool FailsMemberNotNullExpectation(Symbol member, LocalState state)
1200foreach (var member in type.GetMembers(memberName))
1215private int GetSlotForMemberPostCondition(Symbol member)
1514internal static VariableState? GetAfterInitializersState(CSharpCompilation compilation, Symbol? symbol, BoundNode constructorBody)
1584Symbol? symbol,
1599Symbol? symbol,
1606ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1615Symbol? symbol,
1679ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1684var symbol = variables.Symbol;
1721private static BoundNode Rewrite(ImmutableDictionary<BoundExpression, (NullabilityInfo, TypeSymbol?)> updatedNullabilities, SnapshotManager? snapshotManager, BoundNode node, ref ImmutableDictionary<Symbol, Symbol>? remappedSymbols)
1723var remappedSymbolsBuilder = ImmutableDictionary.CreateBuilder<Symbol, Symbol>(Symbols.SymbolEqualityComparer.ConsiderEverything, Symbols.SymbolEqualityComparer.ConsiderEverything);
1836Symbol? symbol,
1893Symbol? symbol,
1926private void RecordNullableAnalysisData(Symbol? symbol, bool requiredAnalysis)
1953private void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
1976if (lambdaIsExactMatch || Symbol.Equals(originalSymbol, updatedSymbol, TypeCompareKind.ConsiderEverything))
2028var symbol = variable.Symbol;
2061protected override bool TryGetReceiverAndMember(BoundExpression expr, out BoundExpression? receiver, [NotNullWhen(true)] out Symbol? member)
2229var container = method.ContainingSymbol;
2240protected override int GetOrCreateSlot(Symbol symbol, int containingSlot = 0, bool forceSlotEvenIfEmpty = false, bool createIfMissing = true)
2364var containingSymbol = parameterOpt?.ContainingSymbol;
2731private bool IsSlotMember(int slot, Symbol possibleMember)
2743private void InheritNullableStateOfMember(int targetContainerSlot, int valueContainerSlot, Symbol member, bool isDefaultValue, int skipSlot)
2872var symbol = AsMemberOfType(targetType, variable.Symbol);
2879private static TypeSymbol GetTypeOrReturnType(Symbol symbol) => symbol.GetTypeOrReturnType().Type;
2882private TypeWithAnnotations GetTypeOrReturnTypeWithAnnotations(Symbol symbol)
2917private NullableFlowState GetDefaultState(Symbol symbol)
2932var member = variable.Symbol;
3354if (Symbol.IsCaptured(variables[slot].Symbol, localFunc))
3373var symbol = variables[variables.RootSlot(slot)].Symbol;
3374if (Symbol.IsCaptured(symbol, localFunc))
3420var oldSymbol = this._symbol;
3422var oldCurrentSymbol = this.CurrentSymbol;
3771private static bool AreCloseEnough(Symbol original, Symbol updated)
4347Symbol? symbol = getTargetMember(containingType, objectInitializer);
4350ArgumentsCompletionDelegate<Symbol>? argumentsCompletion = null;
4360invokedAsExtensionMethod: false, member: (Symbol?)null, delayCompletionForTargetMember: delayCompletionForType);
4363Action<int, Symbol>? initializationCompletion = null;
4386ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4387Action<int, Symbol>? initializationCompletion,
4408ArgumentsCompletionDelegate<Symbol>? argumentsCompletion,
4409Action<int, Symbol>? initializationCompletion)
4413Symbol? symbol = getTargetMember(containingType, (BoundObjectInitializerMember)node.Left);
4425Symbol? getTargetMember(TypeSymbol containingType, BoundObjectInitializerMember objectInitializer)
4427var symbol = objectInitializer.MemberSymbol;
4476int getOrCreateSlot(int containingSlot, Symbol symbol)
4481Action<int, Symbol>? visitNestedInitializer(int containingSlot, TypeSymbol containingType, Symbol symbol, BoundObjectInitializerExpressionBase initializer, bool delayCompletionForType)
4491Action<int, Symbol>? completeNestedInitializerAnalysis(
4492Symbol symbol, BoundObjectInitializerExpressionBase initializer, int slot, Action<int, TypeSymbol>? nestedCompletion,
4513Action<int, Symbol>? completeNestedInitializerAnalysisAsContinuation(BoundObjectInitializerExpressionBase initializer, Action<int, TypeSymbol>? nestedCompletion)
4515return (int containingSlot, Symbol symbol) =>
4523Action<int, Symbol>? visitMemberAssignment(BoundAssignmentOperator node, int containingSlot, Symbol symbol, bool delayCompletionForType, Func<TypeWithAnnotations, TypeWithState>? conversionCompletion = null)
4556Action<int, Symbol>? visitMemberAssignmentAsContinuation(BoundAssignmentOperator node, Func<TypeWithAnnotations, TypeWithState> conversionCompletion)
4558return (int containingSlot, Symbol symbol) =>
5807foreach (var member in getMembers(expressionType))
5824static IEnumerable<Symbol> getMembers(TypeSymbol type)
5827foreach (var member in type.GetMembers())
5832foreach (var member in baseType.GetMembers())
5837foreach (var member in interfaceType.GetMembers())
6893var implementationMethod = baseType.FindImplementationForInterfaceMember(constructedMethod);
7095private FlowAnalysisAnnotations GetRValueAnnotations(Symbol? symbol)
7271where TMember : Symbol
7279private delegate (TMember? member, bool returnNotNull) ArgumentsCompletionDelegate<TMember>(ImmutableArray<VisitResult> argumentResults, ImmutableArray<ParameterSymbol> parametersOpt, TMember? member) where TMember : Symbol;
7294where TMember : Symbol
7736foreach (Symbol member in type.GetMembers(memberName))
8372where TMember : Symbol
8378var definition = member.IsExtensionBlockMember() ? member.OriginalDefinition : member.ConstructedFrom();
8803private static Symbol AsMemberOfType(TypeSymbol? type, Symbol symbol)
8849if (tryAsMemberOfSingleType(containingType, out var result))
8865if (tryAsMemberOfSingleType(containingType, out var result))
8880bool tryAsMemberOfSingleType(NamedTypeSymbol singleType, [NotNullWhen(true)] out Symbol? result)
8887var symbolDef = symbol.OriginalDefinition;
9150int targetSlot = GetNullableOfTValueSlot(containingType, containingSlot, out Symbol? symbol);
10724private FlowAnalysisAnnotations GetObjectInitializerMemberLValueAnnotations(Symbol memberSymbol)
11464var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.FieldSymbol);
11493Symbol? updatedProperty;
11593var updatedSymbol = VisitMemberAccess(node, node.ReceiverOpt, node.EventSymbol);
11598private Symbol VisitMemberAccess(BoundExpression node, BoundExpression? receiverOpt, Symbol member)
11647private SpecialMember? GetNullableOfTMember(Symbol member)
11667private int GetNullableOfTValueSlot(TypeSymbol containingType, int containingSlot, out Symbol? valueProperty, bool forceSlotEvenIfEmpty = false)
13627private sealed class ExpressionAndSymbolEqualityComparer : IEqualityComparer<(BoundNode? expr, Symbol symbol)>
13633public bool Equals((BoundNode? expr, Symbol symbol) x, (BoundNode? expr, Symbol symbol) y)
13644public int GetHashCode((BoundNode? expr, Symbol symbol) obj)
FlowAnalysis\NullableWalker.SnapshotManager.cs (19)
31private readonly ImmutableDictionary<(BoundNode?, Symbol), Symbol> _updatedSymbolsMap;
35private SnapshotManager(ImmutableArray<SharedWalkerState> walkerSharedStates, ImmutableArray<(int position, Snapshot snapshot)> incrementalSnapshots, ImmutableDictionary<(BoundNode?, Symbol), Symbol> updatedSymbolsMap)
74if (_updatedSymbolsMap.TryGetValue((null, lambda), out var updatedDelegate))
82internal bool TryGetUpdatedSymbol(BoundNode node, Symbol symbol, [NotNullWhen(true)] out Symbol? updatedSymbol)
148private readonly ImmutableDictionary<(BoundNode?, Symbol), Symbol>.Builder _updatedSymbolMap = ImmutableDictionary.CreateBuilder<(BoundNode?, Symbol), Symbol>(ExpressionAndSymbolEqualityComparer.Instance, Symbols.SymbolEqualityComparer.ConsiderEverything);
166private readonly PooledDictionary<Symbol, int> _symbolToSlot = PooledDictionary<Symbol, int>.GetInstance();
181internal int EnterNewWalker(Symbol symbol)
220internal void SetUpdatedSymbol(BoundNode node, Symbol originalSymbol, Symbol updatedSymbol)
228internal void RemoveSymbolIfPresent(BoundNode node, Symbol symbol)
233private static (BoundNode?, Symbol) GetKey(BoundNode node, Symbol symbol)
FlowAnalysis\NullableWalker.Variables.cs (13)
38internal readonly Symbol? Symbol;
48internal readonly ImmutableDictionary<Symbol, TypeWithAnnotations> VariableTypes;
50internal VariablesSnapshot(int id, VariablesSnapshot? container, Symbol? symbol, ImmutableArray<KeyValuePair<VariableIdentifier, int>> variableSlot, ImmutableDictionary<Symbol, TypeWithAnnotations> variableTypes)
59internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
118internal readonly Symbol? Symbol;
128private readonly PooledDictionary<Symbol, TypeWithAnnotations> _variableTypes = SpecializedSymbolCollections.GetPooledSymbolDictionaryInstance<Symbol, TypeWithAnnotations>();
140internal static Variables Create(Symbol? symbol)
183private Variables(int id, Variables? container, Symbol? symbol)
297internal bool TryGetType(Symbol symbol, out TypeWithAnnotations type)
303internal void SetType(Symbol symbol, TypeWithAnnotations type)
353private Variables GetVariablesContainingSymbol(Symbol symbol)
FlowAnalysis\ReadWriteWalker.cs (25)
22CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion, HashSet<PrefixUnaryExpressionSyntax> unassignedVariableAddressOfSyntaxes,
23out IEnumerable<Symbol> readInside,
24out IEnumerable<Symbol> writtenInside,
25out IEnumerable<Symbol> readOutside,
26out IEnumerable<Symbol> writtenOutside,
27out IEnumerable<Symbol> captured,
28out IEnumerable<Symbol> unsafeAddressTaken,
29out IEnumerable<Symbol> capturedInside,
30out IEnumerable<Symbol> capturedOutside,
40readInside = writtenInside = readOutside = writtenOutside = captured = unsafeAddressTaken = capturedInside = capturedOutside = Enumerable.Empty<Symbol>();
65private readonly HashSet<Symbol> _readInside = new HashSet<Symbol>();
66private readonly HashSet<Symbol> _writtenInside = new HashSet<Symbol>();
67private readonly HashSet<Symbol> _readOutside = new HashSet<Symbol>();
68private readonly HashSet<Symbol> _writtenOutside = new HashSet<Symbol>();
70private ReadWriteWalker(CSharpCompilation compilation, Symbol member, BoundNode node, BoundNode firstInRegion, BoundNode lastInRegion,
78Symbol current = CurrentSymbol;
107Symbol containing = current.ContainingSymbol;
130protected override void NoteRead(Symbol variable, ParameterSymbol rangeVariableUnderlyingParameter = null)
137protected override void NoteWrite(Symbol variable, BoundExpression value, bool read, bool isRef)
175private void NoteReceiverReadOrWritten(BoundFieldAccess expr, HashSet<Symbol> readOrWritten)
183private void NoteExpressionReadOrWritten(BoundExpression receiver, HashSet<Symbol> readOrWritten)
Generated\BoundNodes.xml.Generated.cs (66)
511public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type, bool hasErrors)
521public BoundDeconstructValuePlaceholder(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
532public Symbol? VariableSymbol { get; }
538public BoundDeconstructValuePlaceholder Update(Symbol? variableSymbol, bool isDiscardExpression, TypeSymbol type)
961public BoundBadExpression(SyntaxNode syntax, LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type, bool hasErrors = false)
974public ImmutableArray<Symbol?> Symbols { get; }
980public BoundBadExpression Update(LookupResultKind resultKind, ImmutableArray<Symbol?> symbols, ImmutableArray<BoundExpression> childBoundNodes, TypeSymbol? type)
6080public BoundMethodGroup(SyntaxNode syntax, ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind, bool hasErrors = false)
6099public Symbol? LookupSymbolOpt { get; }
6107public BoundMethodGroup Update(ImmutableArray<TypeWithAnnotations> typeArgumentsOpt, string name, ImmutableArray<MethodSymbol> methods, Symbol? lookupSymbolOpt, DiagnosticInfo? lookupError, BoundMethodGroupFlags? flags, FunctionTypeSymbol? functionType, BoundExpression? receiverOpt, LookupResultKind resultKind)
6753public BoundObjectInitializerMember(SyntaxNode syntax, Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type, bool hasErrors = false)
6774public Symbol? MemberSymbol { get; }
6788public BoundObjectInitializerMember Update(Symbol? memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, AccessorKind accessorKind, TypeSymbol receiverType, TypeSymbol type)
8104protected BoundObjectPattern(BoundKind kind, SyntaxNode syntax, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8115public Symbol? Variable { get; }
8121public BoundDeclarationPattern(SyntaxNode syntax, BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8143public BoundDeclarationPattern Update(BoundTypeExpression declaredType, bool isVar, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8157public BoundRecursivePattern(SyntaxNode syntax, BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8184public BoundRecursivePattern Update(BoundTypeExpression? declaredType, MethodSymbol? deconstructMethod, ImmutableArray<BoundPositionalSubpattern> deconstruction, ImmutableArray<BoundPropertySubpattern> properties, bool isExplicitNotNullTest, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8198public BoundListPattern(SyntaxNode syntax, ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8228public BoundListPattern Update(ImmutableArray<BoundPattern> subpatterns, bool hasSlice, BoundExpression? lengthAccess, BoundExpression? indexerAccess, BoundListPatternReceiverPlaceholder? receiverPlaceholder, BoundListPatternIndexPlaceholder? argumentPlaceholder, Symbol? variable, BoundExpression? variableAccess, TypeSymbol inputType, TypeSymbol narrowedType)
8335public BoundPositionalSubpattern(SyntaxNode syntax, Symbol? symbol, BoundPattern pattern, bool hasErrors = false)
8344public Symbol? Symbol { get; }
8349public BoundPositionalSubpattern Update(Symbol? symbol, BoundPattern pattern)
8393public BoundPropertySubpatternMember(SyntaxNode syntax, BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type, bool hasErrors = false)
8405public Symbol? Symbol { get; }
8411public BoundPropertySubpatternMember Update(BoundPropertySubpatternMember? receiver, Symbol? symbol, TypeSymbol type)
8636protected VariablePendingInference(BoundKind kind, SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8647public Symbol VariableSymbol { get; }
8653public OutVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8665public OutVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8679public DeconstructionVariablePendingInference(SyntaxNode syntax, Symbol variableSymbol, BoundExpression? receiverOpt, bool hasErrors = false)
8691public DeconstructionVariablePendingInference Update(Symbol variableSymbol, BoundExpression? receiverOpt)
8705public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression, bool hasErrors)
8712public OutDeconstructVarPendingInference(SyntaxNode syntax, Symbol? variableSymbol, bool isDiscardExpression)
8720public Symbol? VariableSymbol { get; }
8726public OutDeconstructVarPendingInference Update(Symbol? variableSymbol, bool isDiscardExpression)
10885Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
10952ImmutableArray<Symbol?> symbols = this.VisitSymbols<Symbol?>(node.Symbols);
11882Symbol? lookupSymbolOpt = this.VisitSymbol(node.LookupSymbolOpt);
12004Symbol? memberSymbol = this.VisitSymbol(node.MemberSymbol);
12252Symbol? variable = this.VisitSymbol(node.Variable);
12262Symbol? variable = this.VisitSymbol(node.Variable);
12273Symbol? variable = this.VisitSymbol(node.Variable);
12305Symbol? symbol = this.VisitSymbol(node.Symbol);
12317Symbol? symbol = this.VisitSymbol(node.Symbol);
12364Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12371Symbol variableSymbol = this.VisitSymbol(node.VariableSymbol);
12378Symbol? variableSymbol = this.VisitSymbol(node.VariableSymbol);
12416private readonly ImmutableDictionary<Symbol, Symbol>.Builder _remappedSymbols;
12418public NullabilityRewriter(ImmutableDictionary<BoundExpression, (NullabilityInfo Info, TypeSymbol? Type)> updatedNullabilities, NullableWalker.SnapshotManager? snapshotManager, ImmutableDictionary<Symbol, Symbol>.Builder remappedSymbols)
12480Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
12646ImmutableArray<Symbol?> symbols = GetUpdatedArray(node, node.Symbols);
14075Symbol? lookupSymbolOpt = GetUpdatedSymbol(node, node.LookupSymbolOpt);
14348Symbol? memberSymbol = GetUpdatedSymbol(node, node.MemberSymbol);
14909Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14920Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14932Symbol? variable = GetUpdatedSymbol(node, node.Variable);
14967Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
14974Symbol? symbol = GetUpdatedSymbol(node, node.Symbol);
15034Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15052Symbol variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
15070Symbol? variableSymbol = GetUpdatedSymbol(node, node.VariableSymbol);
Lowering\ClosureConversion\ExpressionLambdaRewriter.cs (8)
352return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
383return new BoundBadExpression(node.Syntax, 0, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), ExpressionType);
910private BoundExpression InitializerMemberSetter(Symbol symbol)
925private BoundExpression InitializerMemberGetter(Symbol symbol)
952var sym = ((BoundObjectInitializerMember)a.Left).MemberSymbol;
1092return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1099return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
1131return new BoundBadExpression(node.Syntax, default(LookupResultKind), ImmutableArray<Symbol>.Empty, ImmutableArray.Create<BoundExpression>(node), node.Type);
Lowering\ExtensionMethodBodyRewriter.cs (12)
23private ImmutableDictionary<Symbol, Symbol> _symbolMap;
38_symbolMap = ImmutableDictionary<Symbol, Symbol>.Empty.WithComparers(ReferenceEqualityComparer.Instance, ReferenceEqualityComparer.Instance);
51private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenMethodSymbol rewritten, ReadOnlySpan<ParameterSymbol> rewrittenParameters)
53ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
73private (RewrittenMethodSymbol, ImmutableDictionary<Symbol, Symbol>) EnterMethod(MethodSymbol symbol, RewrittenLambdaOrLocalFunctionSymbol rewritten)
123ImmutableDictionary<Symbol, Symbol> saveSymbolMap = _symbolMap;
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (6)
204private MethodSymbol? GetLocalOrParameterStoreLogger(TypeSymbol variableType, Symbol targetSymbol, bool? refAssignmentSourceIsLocal, SyntaxNode syntax)
392if (!TryGetLocalOrParameterInfo(original.Left, out var targetSymbol, out var targetType, out var targetIndex))
413private bool TryGetLocalOrParameterInfo(BoundNode node, [NotNullWhen(true)] out Symbol? symbol, [NotNullWhen(true)] out TypeSymbol? type, [NotNullWhen(true)] out BoundExpression? indexExpression)
441Symbol targetSymbol,
490private BoundExpression VariableRead(Symbol localOrParameterSymbol)
602if (!TryGetLocalOrParameterInfo(arguments[i], out var targetSymbol, out var targetType, out var targetIndex))
Lowering\LocalRewriter\LocalRewriter.cs (3)
593return new BoundBadExpression(syntax, LookupResultKind.NotReferencable, ImmutableArray<Symbol?>.Empty, children, resultType);
596private bool TryGetWellKnownTypeMember<TSymbol>(SyntaxNode? syntax, WellKnownMember member, [NotNullWhen(true)] out TSymbol? symbol, bool isOptional = false, Location? location = null) where TSymbol : Symbol
1144private BoundExpression ConvertReceiverForExtensionMemberIfNeeded(Symbol member, BoundExpression receiver, bool markAsChecked)
Lowering\LocalRewriter\LocalRewriter_Event.cs (5)
128clearCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(removeDelegate), ErrorTypeSymbol.UnknownResultType);
170marshalCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, marshalArguments, ErrorTypeSymbol.UnknownResultType);
265getOrCreateCall = new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create<BoundExpression>(fieldAccess), ErrorTypeSymbol.UnknownResultType);
287return new BoundBadExpression(syntax, LookupResultKind.NotInvocable, ImmutableArray<Symbol?>.Empty, ImmutableArray.Create(getOrCreateCall), ErrorTypeSymbol.UnknownResultType);
333return new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray.Create<Symbol?>(node.Event),
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (4)
217var property = left.MemberSymbol;
389newGuid = new BoundBadExpression(node.Syntax, LookupResultKind.NotCreatable, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
407callGetTypeFromCLSID = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, ErrorTypeSymbol.UnknownResultType);
419rewrittenObjectCreation = new BoundBadExpression(node.Syntax, LookupResultKind.OverloadResolutionFailure, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, node.Type);
Lowering\StateMachineRewriter\IteratorAndAsyncCaptureWalker.cs (17)
30private readonly OrderedSet<Symbol> _variablesToHoist = new OrderedSet<Symbol>();
38private MultiDictionary<Symbol, SyntaxNode> _lazyDisallowedCaptures;
46private IteratorAndAsyncCaptureWalker(CSharpCompilation compilation, MethodSymbol method, BoundNode node, HashSet<Symbol> initiallyAssignedVariables, bool isRuntimeAsync)
58public static OrderedSet<Symbol> Analyze(CSharpCompilation compilation, MethodSymbol method, BoundNode node, bool isRuntimeAsync, DiagnosticBag diagnostics)
85var variable = kvp.Key;
120var variablesToHoist = new OrderedSet<Symbol>();
126var symbol = v.Symbol;
143private static bool HoistInDebugBuild(Symbol symbol)
162var symbol = variableBySlot[i].Symbol;
216private void CaptureVariable(Symbol variable, SyntaxNode syntax)
234(_lazyDisallowedCaptures ??= new MultiDictionary<Symbol, SyntaxNode>()).Add(variable, syntax);
277protected override void ReportUnassigned(Symbol symbol, SyntaxNode node, int slot, bool skipIfUseBeforeDeclaration)
369private readonly HashSet<Symbol> _localsInScope;
379_localsInScope = new HashSet<Symbol>();
408private void AddVariable(Symbol local)
443private void Capture(Symbol s, SyntaxNode syntax)
Lowering\StateMachineRewriter\StateMachineRewriter.cs (10)
30protected IReadOnlyDictionary<Symbol, CapturedSymbolReplacement>? nonReusableLocalProxies;
33protected IOrderedReadOnlySet<Symbol>? hoistedVariables;
34protected Dictionary<Symbol, CapturedSymbolReplacement>? initialParameters;
86protected abstract BoundStatement GenerateStateMachineCreation(LocalSymbol stateMachineVariable, NamedTypeSymbol frameType, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies);
114initialParameters = new Dictionary<Symbol, CapturedSymbolReplacement>();
137IEnumerable<Symbol> variablesToHoist,
138out IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies,
142var proxiesBuilder = new Dictionary<Symbol, CapturedSymbolReplacement>();
151foreach (var variable in variablesToHoist)
306protected BoundStatement GenerateParameterStorage(LocalSymbol stateMachineVariable, IReadOnlyDictionary<Symbol, CapturedSymbolReplacement> proxies)
Lowering\SyntheticBoundNodeFactory.cs (9)
241return new BoundBadExpression(Syntax, LookupResultKind.Empty, ImmutableArray<Symbol?>.Empty, ImmutableArray<BoundExpression>.Empty, type, hasErrors: true);
323public Symbol? WellKnownMember(WellKnownMember wm, bool isOptional)
325Symbol? wellKnownMember = Binder.GetWellKnownTypeMember(Compilation, wm, Diagnostics, syntax: Syntax, isOptional: true);
336public Symbol WellKnownMember(WellKnownMember wm)
358public Symbol SpecialMember(SpecialMember sm)
360var result = SpecialMember(sm, isOptional: false);
365public Symbol? SpecialMember(SpecialMember sm, bool isOptional = false)
367Symbol specialMember = Compilation.GetSpecialTypeMember(sm);
802return new BoundBadExpression(Syntax, default(LookupResultKind), ImmutableArray<Symbol?>.Empty, args.AsImmutable(), receiver);
Symbols\AliasSymbol.cs (6)
53private readonly Symbol _containingSymbol;
55protected AliasSymbol(string aliasName, Symbol containingSymbol, ImmutableArray<Location> locations, bool isExtern)
73internal static AliasSymbol CreateCustomDebugInfoAlias(NamespaceOrTypeSymbol targetSymbol, SyntaxToken aliasToken, Symbol containingSymbol, bool isExtern)
206public sealed override Symbol ContainingSymbol
243public override bool Equals(Symbol? obj, TypeCompareKind compareKind)
436internal AliasSymbolFromResolvedTarget(NamespaceOrTypeSymbol target, string aliasName, Symbol containingSymbol, ImmutableArray<Location> locations, bool isExtern)
Symbols\Attributes\AttributeData.cs (6)
213internal void DecodeSecurityAttribute<T>(Symbol targetSymbol, CSharpCompilation compilation, ref DecodeWellKnownAttributeArguments<AttributeSyntax, CSharpAttributeData, AttributeLocation> arguments)
288foreach (Symbol foundMember in type.GetMembers(memberName))
337private DeclarativeSecurityAction DecodeSecurityAttributeAction(Symbol targetSymbol, CSharpCompilation compilation, AttributeSyntax? nodeOpt, out bool hasErrors, BindingDiagnosticBag diagnostics)
380private DeclarativeSecurityAction DecodeSecurityAction(TypedConstant typedValue, Symbol targetSymbol, AttributeSyntax? nodeOpt, BindingDiagnosticBag diagnostics, out bool hasErrors)
651foreach (var member in AttributeClass.GetMembers(memberName))
670internal bool ShouldEmitAttribute(Symbol target, bool isReturnType, bool emittingAssemblyAttributesInNetModule)
Symbols\Compilation_WellKnownMembers.cs (12)
32private Symbol?[]? _lazyWellKnownTypeMembers;
81internal Symbol? GetWellKnownTypeMember(WellKnownMember member)
92var wellKnownTypeMembers = new Symbol[(int)WellKnownMember.Count];
106Symbol? result = null;
251internal static Symbol? GetRuntimeMember(NamedTypeSymbol declaringType, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
257internal static Symbol? GetRuntimeMember(ImmutableArray<Symbol> members, in MemberDescriptor descriptor, SignatureComparer<MethodSymbol, FieldSymbol, PropertySymbol, TypeSymbol, ParameterSymbol> comparer, AssemblySymbol? accessWithinOpt)
263Symbol? result = null;
294foreach (var member in members)
302!(member.DeclaredAccessibility == Accessibility.Public || (accessWithinOpt is object && Symbol.IsSymbolAccessible(member, accessWithinOpt))))
424var wellKnownMember = Binder.GetWellKnownTypeMember(this, arg.Key, useSiteInfo: out _, isOptional: true);
705var member = Binder.GetWellKnownTypeMember(this, attributeCtor,
Symbols\ConstraintsHelper.cs (10)
896this Symbol constructedContainingSymbol,
948Symbol containingSymbol,
1054Symbol constructedContainingSymbol,
1091if (typeArgument.Type is NamedTypeSymbol { IsInterface: true } iface && SelfOrBaseHasStaticAbstractMember(iface, ref useSiteInfo, out Symbol member))
1118static bool errorIfNotSatisfiesConstructorConstraint(Symbol containingSymbol, TypeParameterSymbol typeParameter, TypeWithAnnotations typeArgument, ArrayBuilder<TypeParameterDiagnosticInfo> diagnosticsBuilder)
1142Symbol containingSymbol,
1165Symbol containingSymbol,
1408private static bool SelfOrBaseHasStaticAbstractMember(NamedTypeSymbol iface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol memberWithoutImplementation)
1412foreach (Symbol m in iface.GetMembers())
1423foreach (Symbol m in baseInterface.GetMembers())
Symbols\ExtendedErrorTypeSymbol.cs (11)
25private readonly ImmutableArray<Symbol> _candidateSymbols; // Best guess at what user meant, but was wrong.
52private ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, string name, int arity, DiagnosticInfo? errorInfo, bool unreported, bool variableUsedBeforeDeclaration, ImmutableArray<Symbol> candidateSymbols, LookupResultKind resultKind)
69internal ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, Symbol guessSymbol, LookupResultKind resultKind, DiagnosticInfo errorInfo, bool unreported = false)
70: this(containingSymbol, ImmutableArray.Create<Symbol>(guessSymbol), resultKind, errorInfo, GetArity(guessSymbol), unreported)
74internal ExtendedErrorTypeSymbol(NamespaceOrTypeSymbol? containingSymbol, ImmutableArray<Symbol> candidateSymbols, LookupResultKind resultKind, DiagnosticInfo errorInfo, int arity, bool unreported = false)
88private static ImmutableArray<Symbol> UnwrapErrorCandidates(ImmutableArray<Symbol> candidateSymbols)
115public override ImmutableArray<Symbol> CandidateSymbols => _candidateSymbols.NullToEmpty();
151public override Symbol? ContainingSymbol
270foreach (Symbol sym in oldError._candidateSymbols)
312private static int GetArity(Symbol symbol)
Symbols\MemberSymbolExtensions.cs (55)
26internal static bool HasParamsParameter(this Symbol member)
35internal static ImmutableArray<ParameterSymbol> GetParameters(this Symbol member)
53internal static ImmutableArray<TypeWithAnnotations> GetParameterTypes(this Symbol member)
68internal static bool GetIsVararg(this Symbol member)
83internal static bool IsExtensionBlockMember(this Symbol member)
106internal static bool TryGetInstanceExtensionParameter(this Symbol symbol, [NotNullWhen(true)] out ParameterSymbol? extensionParameter)
121internal static int GetMemberArityIncludingExtension(this Symbol member)
131internal static ImmutableArray<TypeParameterSymbol> GetTypeParametersIncludingExtension<TMember>(this TMember member) where TMember : Symbol
152where TMember : Symbol
181internal static ImmutableArray<ParameterSymbol> GetParametersIncludingExtensionParameter(this Symbol symbol, bool skipExtensionIfStatic)
195internal static int GetParameterCountIncludingExtensionParameter(this Symbol symbol)
205internal static TMember ConstructIncludingExtension<TMember>(this TMember member, ImmutableArray<TypeWithAnnotations> typeArguments) where TMember : Symbol
220return (TMember)(Symbol)method.Construct(typeArguments[extension.Arity..]);
223return (TMember)(Symbol)method;
226return (TMember)(Symbol)method.Construct(typeArguments);
239return (TMember)(Symbol)property;
248internal static Symbol? GetReducedAndFilteredSymbol(this Symbol member, ImmutableArray<TypeWithAnnotations> typeArguments, TypeSymbol receiverType, CSharpCompilation compilation, bool checkFullyInferred)
323internal static ImmutableArray<RefKind> GetParameterRefKinds(this Symbol member)
338internal static int GetParameterCount(this Symbol member)
354internal static bool HasParameterContainingPointerType(this Symbol member)
367public static bool IsEventOrPropertyWithImplementableNonPublicAccessor(this Symbol symbol)
400public static bool IsAccessor(this Symbol symbol)
407var propertyOrEvent = methodSymbol.AssociatedSymbol;
416public static bool IsOperator(this Symbol symbol)
421public static bool IsIndexer(this Symbol symbol)
426public static bool IsIndexedProperty(this Symbol symbol)
431public static bool IsUserDefinedConversion(this Symbol symbol)
458public static int CustomModifierCount(this Symbol m)
507internal static Symbol SymbolAsMember(this Symbol s, NamedTypeSymbol newOwner)
529internal static int GetMemberArity(this Symbol symbol)
562internal static ImmutableArray<TypeParameterSymbol> GetMemberTypeParameters(this Symbol symbol)
580internal static ImmutableArray<TypeSymbol> GetMemberTypeArgumentsNoUseSiteDiagnostics(this Symbol symbol)
773internal static bool IsExplicitInterfaceImplementation(this Symbol member)
788internal static bool IsPartialMember(this Symbol member)
800internal static bool IsPartialImplementation(this Symbol member)
812internal static bool IsPartialDefinition(this Symbol member)
825internal static Symbol? GetPartialImplementationPart(this Symbol member)
837internal static Symbol? GetPartialDefinitionPart(this Symbol member)
850internal static bool ContainsTupleNames(this Symbol member)
867internal static ImmutableArray<Symbol> GetExplicitInterfaceImplementations(this Symbol member)
872return ((MethodSymbol)member).ExplicitInterfaceImplementations.Cast<MethodSymbol, Symbol>();
874return ((PropertySymbol)member).ExplicitInterfaceImplementations.Cast<PropertySymbol, Symbol>();
876return ((EventSymbol)member).ExplicitInterfaceImplementations.Cast<EventSymbol, Symbol>();
878return ImmutableArray<Symbol>.Empty;
882internal static Symbol GetOverriddenMember(this Symbol member)
897internal static Symbol GetLeastOverriddenMember(this Symbol member, NamedTypeSymbol accessingTypeOpt)
918internal static bool IsFieldOrFieldLikeEvent(this Symbol member, out FieldSymbol field)
934internal static string GetMemberCallerName(this Symbol member)
Symbols\MergedNamespaceSymbol.cs (14)
44private readonly CachingDictionary<ReadOnlyMemory<char>, Symbol> _cachedLookup;
49private ImmutableArray<Symbol> _allMembers;
94_cachedLookup = new CachingDictionary<ReadOnlyMemory<char>, Symbol>(SlowGetChildrenOfName, SlowGetChildNames, ReadOnlyMemoryOfCharComparer.Instance);
120internal override void ForceComplete(SourceLocation locationOpt, Predicate<Symbol> filter, CancellationToken cancellationToken)
133private ImmutableArray<Symbol> SlowGetChildrenOfName(ReadOnlyMemory<char> name)
136var otherSymbols = ArrayBuilder<Symbol>.GetInstance();
141foreach (Symbol childSymbol in namespaceSymbol.GetMembers(name))
181foreach (var child in ns.GetMembersUnordered())
214public override ImmutableArray<Symbol> GetMembers()
219var builder = ArrayBuilder<Symbol>.GetInstance();
227public override ImmutableArray<Symbol> GetMembers(ReadOnlyMemory<char> name)
248public override Symbol ContainingSymbol
304internal sealed override void GetExtensionMembers(ArrayBuilder<Symbol> members, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
306foreach (var member in GetMembersUnordered())
Symbols\Metadata\PE\PENamedTypeSymbol.cs (39)
55private ImmutableArray<Symbol> _lazyMembersInDeclarationOrder;
61private Dictionary<string, ImmutableArray<Symbol>> _lazyMembersByName;
493foreach (var member in @this.ContainingType.GetMembers(method.Name))
577Symbol s = _container;
831public override Symbol ContainingSymbol
1140public override ImmutableArray<Symbol> GetMembers()
1194ImmutableArray<Symbol> staticFields = GetMembers();
1304ImmutableArray<Symbol> members = GetMembers();
1407internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1412internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1417private class DeclarationOrderTypeSymbolComparer : IComparer<Symbol>
1423public int Compare(Symbol x, Symbol y)
1513ArrayBuilder<Symbol> members = null;
1519members = ArrayBuilder<Symbol>.GetInstance();
1568ArrayBuilder<Symbol> nonFieldMembers = ArrayBuilder<Symbol>.GetInstance();
1644Symbol previous = null;
1646foreach (var s in members)
1654Symbol current = s;
1689members = ArrayBuilder<Symbol>.GetInstance();
1690foreach (var member in _lazyMembersInDeclarationOrder)
1700Dictionary<string, ImmutableArray<Symbol>> membersDict = GroupByName(members);
1733internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1737ImmutableArray<Symbol> m;
1740m = ImmutableArray<Symbol>.Empty;
1746public override ImmutableArray<Symbol> GetMembers(string name)
1750ImmutableArray<Symbol> m;
1753m = ImmutableArray<Symbol>.Empty;
1760m = m.Concat(StaticCast<Symbol>.From(t));
2355private PooledDictionary<MethodDefinitionHandle, PEMethodSymbol> CreateMethods(ArrayBuilder<Symbol> members)
2390private void CreateProperties(Dictionary<MethodDefinitionHandle, PEMethodSymbol> methodHandleToSymbol, ArrayBuilder<Symbol> members)
2430ArrayBuilder<Symbol> members)
2481private static Dictionary<string, ImmutableArray<Symbol>> GroupByName(ArrayBuilder<Symbol> symbols)
2856private static int GetIndexOfFirstMember(ImmutableArray<Symbol> members, SymbolKind kind)
2873private static IEnumerable<TSymbol> GetMembers<TSymbol>(ImmutableArray<Symbol> members, SymbolKind kind, int offset = -1)
2874where TSymbol : Symbol
2883var member = members[i];
Symbols\NamedTypeSymbol.cs (36)
29private static readonly ImmutableSegmentedDictionary<string, Symbol> RequiredMembersErrorSentinel = ImmutableSegmentedDictionary<string, Symbol>.Empty.Add("<error sentinel>", null!);
35private ImmutableSegmentedDictionary<string, Symbol> _lazyRequiredMembers = default;
211ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(name);
218internal static void AddOperators(ArrayBuilder<MethodSymbol> operators, ImmutableArray<Symbol> candidates)
220foreach (var candidate in candidates)
229internal static void AddOperators(ArrayBuilder<MethodSymbol> operators, ArrayBuilder<Symbol> candidates)
231foreach (var candidate in candidates)
277ImmutableArray<Symbol> instanceCandidates = includeInstance
279: ImmutableArray<Symbol>.Empty;
280ImmutableArray<Symbol> staticCandidates = includeStatic
282: ImmutableArray<Symbol>.Empty;
290foreach (Symbol candidate in instanceCandidates)
298foreach (Symbol candidate in staticCandidates)
319ImmutableArray<Symbol> candidates = GetSimpleNonTypeMembers(WellKnownMemberNames.Indexer);
329foreach (Symbol candidate in candidates)
366foreach (var member in members)
413internal void GetExtensionMembers(ArrayBuilder<Symbol> members, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
435foreach (var candidate in candidates)
452static bool extensionMemberMatches(Symbol member, string? name, string? alternativeName, int arity, LookupOptions options, ConsList<FieldSymbol> fieldsBeingBound)
705internal ImmutableSegmentedDictionary<string, Symbol> AllRequiredMembers
713return ImmutableSegmentedDictionary<string, Symbol>.Empty;
727bool success = tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? builder);
730? builder?.ToImmutable() ?? BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty
735bool tryCalculateRequiredMembers(out ImmutableSegmentedDictionary<string, Symbol>.Builder? requiredMembersBuilder)
743var baseAllRequiredMembers = BaseTypeNoUseSiteDiagnostics?.AllRequiredMembers ?? ImmutableSegmentedDictionary<string, Symbol>.Empty;
746foreach (var member in GetMembersUnordered())
761if (baseAllRequiredMembers.TryGetValue(member.Name, out var existingMember))
798public abstract override ImmutableArray<Symbol> GetMembers();
805public abstract override ImmutableArray<Symbol> GetMembers(string name);
814internal virtual ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
841internal virtual IEnumerable<Symbol> GetInstanceFieldsAndEvents()
846protected static Func<Symbol, bool> IsInstanceFieldOrEvent = symbol =>
892internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers();
902internal abstract ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name);
1590internal override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
Symbols\NativeIntegerTypeSymbol.cs (22)
27private ImmutableArray<Symbol> _lazyMembers;
43public override Symbol ContainingSymbol => _underlyingType.ContainingSymbol;
70public override ImmutableArray<Symbol> GetMembers()
78ImmutableArray<Symbol> makeMembers(ImmutableArray<Symbol> underlyingMembers)
80var builder = ArrayBuilder<Symbol>.GetInstance();
81foreach (var underlyingMember in underlyingMembers)
141public override ImmutableArray<Symbol> GetMembers(string name) => GetMembers().WhereAsArray((member, name) => member.Name == name, name);
153internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers() => throw ExceptionUtilities.Unreachable();
155internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name) => throw ExceptionUtilities.Unreachable();
250internal static bool EqualsHelper<TSymbol>(TSymbol symbol, Symbol? other, TypeCompareKind comparison, Func<TSymbol, Symbol> getUnderlyingSymbol)
251where TSymbol : Symbol
270internal static void VerifyEquality(Symbol symbolA, Symbol symbolB)
352public override Symbol ContainingSymbol => _container;
397public override Symbol? AssociatedSymbol => _associatedSymbol;
406public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol.UnderlyingMethod);
445public override Symbol ContainingSymbol => _container;
465public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingParameter);
498public override Symbol ContainingSymbol => _container;
514public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingProperty);
Symbols\ObsoleteAttributeHelpers.cs (9)
59private static ThreeState GetObsoleteContextState(Symbol symbol, bool forceComplete, Func<Symbol, ThreeState> getStateFromSymbol)
66var associatedSymbol = ((FieldSymbol)symbol).AssociatedSymbol;
98internal static ObsoleteDiagnosticKind GetObsoleteDiagnosticKind(Symbol symbol, Symbol containingMember, bool forceComplete = false)
130static ObsoleteDiagnosticKind getDiagnosticKind(Symbol containingMember, bool forceComplete, Func<Symbol, ThreeState> getStateFromSymbol)
152internal static DiagnosticInfo CreateObsoleteDiagnostic(Symbol symbol, BinderFlags location)
158static DiagnosticInfo createObsoleteDiagnostic(Symbol symbol, BinderFlags location)
Symbols\OverriddenOrHiddenMembersHelpers.cs (71)
84private static OverriddenOrHiddenMembersResult MakeOverriddenOrHiddenMembersWorker(Symbol member)
97Symbol associatedPropertyOrEvent = accessor.AssociatedSymbol;
134ArrayBuilder<Symbol> hiddenBuilder;
135ImmutableArray<Symbol> overriddenMembers;
138ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
142private static void FindOverriddenOrHiddenMembers(Symbol member, NamedTypeSymbol containingType, bool memberIsFromSomeCompilation,
143out ArrayBuilder<Symbol> hiddenBuilder,
144out ImmutableArray<Symbol> overriddenMembers)
146Symbol bestMatch = null;
151Symbol knownOverriddenMember = member switch
180public static Symbol FindFirstHiddenMemberIfAny(Symbol member, bool memberIsFromSomeCompilation)
182ArrayBuilder<Symbol> hiddenBuilder;
186Symbol result = hiddenBuilder?.FirstOrDefault();
249ArrayBuilder<Symbol> hiddenBuilder = null;
253foreach (Symbol hiddenByProperty in hiddenOrOverriddenByProperty.HiddenMembers)
283ImmutableArray<Symbol> overriddenAccessors = ImmutableArray<Symbol>.Empty;
291ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
341ArrayBuilder<Symbol> hiddenBuilder = null;
345foreach (Symbol hiddenByEvent in hiddenOrOverriddenByEvent.HiddenMembers)
373ImmutableArray<Symbol> overriddenAccessors = ImmutableArray<Symbol>.Empty;
383ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
409internal static OverriddenOrHiddenMembersResult MakeInterfaceOverriddenOrHiddenMembers(Symbol member, bool memberIsFromSomeCompilation)
419ArrayBuilder<Symbol> hiddenBuilder = null;
428Symbol currTypeBestMatch;
430ArrayBuilder<Symbol> currTypeHiddenBuilder;
492ImmutableArray<Symbol> overriddenMembers = ImmutableArray<Symbol>.Empty;
496ArrayBuilder<Symbol> hiddenAndRelatedBuilder = null;
497foreach (Symbol hidden in hiddenBuilder)
508ImmutableArray<Symbol> hiddenMembers = hiddenBuilder == null ? ImmutableArray<Symbol>.Empty : hiddenBuilder.ToImmutableAndFree();
533Symbol member,
536Symbol knownOverriddenMember,
538out Symbol currTypeBestMatch,
540out ArrayBuilder<Symbol> hiddenBuilder)
551IEqualityComparer<Symbol> exactMatchComparer = memberIsFromSomeCompilation
555IEqualityComparer<Symbol> fallbackComparer = memberIsFromSomeCompilation
562foreach (Symbol otherMember in currType.GetMembers(member.Name))
674Symbol minCustomModifierMatch = currTypeBestMatch;
676foreach (Symbol otherMember in currType.GetMembers(member.Name))
707Symbol overridingMember,
708Symbol representativeMember,
709out ImmutableArray<Symbol> overriddenMembers,
710ref ArrayBuilder<Symbol> hiddenBuilder)
712overriddenMembers = ImmutableArray<Symbol>.Empty;
723ArrayBuilder<Symbol> overriddenBuilder = ArrayBuilder<Symbol>.GetInstance();
733overriddenMembers = ImmutableArray.Create<Symbol>(representativeMember);
753private static void AddHiddenMemberIfApplicable(ref ArrayBuilder<Symbol> hiddenBuilder, Symbol hidingMember, Symbol hiddenMember)
789private static void FindOtherOverriddenMethodsInContainingType(Symbol representativeMember, bool overridingMemberIsFromSomeCompilation, ArrayBuilder<Symbol> overriddenBuilder)
796foreach (Symbol otherMember in representativeMember.ContainingType.GetMembers(representativeMember.Name))
851private static void FindOtherHiddenMembersInContainingType(Symbol hidingMember, Symbol representativeMember, ref ArrayBuilder<Symbol> hiddenBuilder)
858IEqualityComparer<Symbol> comparer = MemberSignatureComparer.CSharpCustomModifierOverrideComparer;
859foreach (Symbol otherMember in representativeMember.ContainingType.GetMembers(representativeMember.Name))
871private static bool CanOverrideOrHide(Symbol member)
887private static bool TypeOrReturnTypeHasCustomModifiers(Symbol member)
909private static int CustomModifierCount(Symbol member)
991foreach (Symbol otherMethod in method.ContainingType.GetMembers(method.Name))
1032foreach (Symbol otherMember in currType.GetMembers(method.Name))
1070private static bool IsOverriddenSymbolAccessible(Symbol overridden, NamedTypeSymbol overridingContainingType)
Symbols\Retargeting\RetargetingSymbolTranslator.cs (42)
31private readonly ConcurrentDictionary<Symbol, Symbol> _symbolMap =
32new ConcurrentDictionary<Symbol, Symbol>(concurrencyLevel: 2, capacity: 4);
34private readonly Func<Symbol, RetargetingMethodSymbol> _createRetargetingMethod;
35private readonly Func<Symbol, RetargetingNamespaceSymbol> _createRetargetingNamespace;
36private readonly Func<Symbol, RetargetingTypeParameterSymbol> _createRetargetingTypeParameter;
37private readonly Func<Symbol, RetargetingNamedTypeSymbol> _createRetargetingNamedType;
38private readonly Func<Symbol, FieldSymbol> _createRetargetingField;
39private readonly Func<Symbol, RetargetingPropertySymbol> _createRetargetingProperty;
40private readonly Func<Symbol, RetargetingEventSymbol> _createRetargetingEvent;
42private RetargetingMethodSymbol CreateRetargetingMethod(Symbol symbol)
48private RetargetingNamespaceSymbol CreateRetargetingNamespace(Symbol symbol)
54private RetargetingNamedTypeSymbol CreateRetargetingNamedType(Symbol symbol)
60private FieldSymbol CreateRetargetingField(Symbol symbol)
86private RetargetingPropertySymbol CreateRetargetingProperty(Symbol symbol)
92private RetargetingEventSymbol CreateRetargetingEvent(Symbol symbol)
98private RetargetingTypeParameterSymbol CreateRetargetingTypeParameter(Symbol symbol)
105: CSharpSymbolVisitor<RetargetOptions, Symbol>
118private ConcurrentDictionary<Symbol, Symbol> SymbolMap
162public Symbol Retarget(Symbol symbol)
827public ImmutableArray<Symbol> Retarget(ImmutableArray<Symbol> arr)
1029foreach (var retargetedMember in retargetedType.GetMembers(method.Name))
1095foreach (var retargetedMember in retargetedType.GetMembers(property.Name))
1114foreach (var retargetedMember in retargetedType.GetMembers(@event.Name))
1317public override Symbol VisitModule(ModuleSymbol symbol, RetargetOptions options)
1324public override Symbol VisitNamespace(NamespaceSymbol symbol, RetargetOptions options)
1329public override Symbol VisitNamedType(NamedTypeSymbol symbol, RetargetOptions options)
1334public override Symbol VisitArrayType(ArrayTypeSymbol symbol, RetargetOptions options)
1339public override Symbol VisitPointerType(PointerTypeSymbol symbol, RetargetOptions options)
1344public override Symbol VisitFunctionPointerType(FunctionPointerTypeSymbol symbol, RetargetOptions argument)
1349public override Symbol VisitMethod(MethodSymbol symbol, RetargetOptions options)
1354public override Symbol VisitParameter(ParameterSymbol symbol, RetargetOptions options)
1359public override Symbol VisitField(FieldSymbol symbol, RetargetOptions options)
1364public override Symbol VisitProperty(PropertySymbol symbol, RetargetOptions argument)
1369public override Symbol VisitTypeParameter(TypeParameterSymbol symbol, RetargetOptions options)
1374public override Symbol VisitErrorType(ErrorTypeSymbol symbol, RetargetOptions options)
1379public override Symbol VisitEvent(EventSymbol symbol, RetargetOptions options)
1384public override Symbol VisitDynamicType(DynamicTypeSymbol symbol, RetargetOptions argument)
Symbols\Source\ParameterHelpers.cs (17)
22Symbol owner,
30return MakeParameters<ParameterSyntax, SourceParameterSymbol, Symbol>(
41parameterCreationFunc: static (Binder context, Symbol owner, TypeWithAnnotations parameterType,
66Symbol owner,
70var parameterCreationFunc = static (Binder context, Symbol owner, TypeWithAnnotations parameterType,
181where TOwningSymbol : Symbol
263where TOwningSymbol : Symbol
492internal static void EnsureNullableAttributeExists(PEModuleBuilder moduleBuilder, Symbol container, ImmutableArray<ParameterSymbol> parameters)
497internal static void EnsureNullableAttributeExists(CSharpCompilation? compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation)
509private static void EnsureNullableAttributeExists(CSharpCompilation compilation, Symbol container, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag? diagnostics, bool modifyCompilation, PEModuleBuilder? moduleBuilder)
530internal static void CheckUnderspecifiedGenericExtension(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics)
552static void reportUnusedExtensionTypeParameters(Symbol extensionMember, ImmutableArray<ParameterSymbol> parameters, BindingDiagnosticBag diagnostics, NamedTypeSymbol extension, ParameterSymbol extensionParameter, PooledHashSet<TypeParameterSymbol> usedTypeParameters)
833Symbol? owner,
840Symbol? containingSymbol,
905Symbol owner,
1108internal static MethodSymbol FindContainingGenericMethod(Symbol symbol)
1110for (Symbol current = symbol; (object)current != null; current = current.ContainingSymbol)
Symbols\Source\SourceMemberContainerSymbol.cs (193)
182private static readonly ObjectPool<PooledDictionary<Symbol, Symbol>> s_duplicateRecordMemberSignatureDictionary =
183PooledDictionary<Symbol, Symbol>.CreatePool(MemberSignatureComparer.RecordAPISignatureComparer);
205private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? _lazyMembersDictionary;
206private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? _lazyEarlyAttributeDecodingMembersDictionary;
212private ImmutableArray<Symbol> _lazyMembersFlattened;
293Symbol containingSymbol = this.ContainingSymbol;
549internal override void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
653ImmutableArray<Symbol> members = this.GetMembersUnordered();
659foreach (var member in members)
667foreach (var member in members)
740foreach (var member in membersAndInitializers.NonTypeMembers)
784public sealed override Symbol ContainingSymbol
916for (Symbol? container = this.ContainingType; !(container is null); container = container.ContainingType)
1069internal readonly ImmutableArray<Symbol> NonTypeMembers;
1078ImmutableArray<Symbol> nonTypeMembers,
1401private void CheckMemberNameDistinctFromType(Symbol member, BindingDiagnosticBag diagnostics)
1431static void checkContainingTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1439static void checkExtendedTypeName(Symbol member, string typeName, BindingDiagnosticBag diagnostics)
1472internal static bool HasAsyncMethodBuilderAttribute(Symbol symbol, [NotNullWhen(true)] out TypeSymbol? builderArgument)
1494internal override ImmutableArray<Symbol> GetMembersUnordered()
1508public override ImmutableArray<Symbol> GetMembers()
1530public sealed override ImmutableArray<Symbol> GetMembers(string name)
1532ImmutableArray<Symbol> members;
1538return ImmutableArray<Symbol>.Empty;
1549internal override ImmutableArray<Symbol> GetSimpleNonTypeMembers(string name)
1556return ImmutableArray<Symbol>.Empty;
1569foreach (var m in this.GetMembers())
1599internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
1611internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
1613ImmutableArray<Symbol> result;
1614return GetEarlyAttributeDecodingMembersDictionary().TryGetValue(name.AsMemory(), out result) ? result : ImmutableArray<Symbol>.Empty;
1617private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetEarlyAttributeDecodingMembersDictionary()
1621if (Volatile.Read(ref _lazyMembersDictionary) is Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> result)
1631Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
1654private static Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> ToNameKeyedDictionary(ImmutableArray<Symbol> symbols)
1658return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(1, ReadOnlyMemoryOfCharComparer.Instance)
1666return new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(ReadOnlyMemoryOfCharComparer.Instance);
1676foreach (var item in symbols)
1679var dictionary = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(accumulator.Count, ReadOnlyMemoryOfCharComparer.Instance);
1684dictionary.Add(pair.Key, pair.Value is ArrayBuilder<Symbol> arrayBuilder
1686: ImmutableArray.Create((Symbol)pair.Value));
1730internal void AssertMemberExposure(Symbol member, bool forDiagnostics = false)
1799static bool isMemberInCompleteMemberList(MembersAndInitializers? membersAndInitializers, Symbol member)
1806protected Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByName()
1816private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> GetMembersByNameSlow()
1834internal override IEnumerable<Symbol> GetInstanceFieldsAndEvents()
1838IEnumerable<Symbol> result = membersAndInitializers.NonTypeMembers.Where(IsInstanceFieldOrEvent);
1986foreach (var member in GetMembersAndInitializers().NonTypeMembers)
2000foreach (var member in GetMembers("Clone"))
2010Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2059Symbol? lastSym = typesByName?.TryGetValue(name, out var types) == true ? types.FirstOrDefault() : null;
2063foreach (var symbol in pair.Value)
2267BindingDiagnosticBag diagnostics, Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName)
2280foreach (var symbol in members)
2336Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2406Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2408ImmutableArray<Symbol> membersUnordered,
2423Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName;
2424ImmutableArray<Symbol> membersUnordered;
2435static (Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName, ImmutableArray<Symbol> membersUnordered) mergeMembersInGroup(IGrouping<string, NamedTypeSymbol> grouping)
2437Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>? membersByName = null;
2438ImmutableArray<Symbol> membersUnordered = [];
2445Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByNameToMerge = ((SourceMemberContainerTypeSymbol)extension).GetMembersByName();
2465membersByName = new Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>>(membersByName, ReadOnlyMemoryOfCharComparer.Instance);
2495static ImmutableArray<Symbol> concatMembers(ImmutableArray<Symbol> existingMembers, NamedTypeSymbol extension, ImmutableArray<Symbol> newMembers, ref ImmutableArray<Symbol> membersUnordered)
2505var membersBuilder = ArrayBuilder<Symbol>.GetInstance(existingMembers.Length + newMembers.Length);
2506var membersUnorderedBuilder = ArrayBuilder<Symbol>.GetInstance(membersUnordered.Length + newMembers.Length);
2511foreach (var member in newMembers)
2513Symbol toAdd = member.SymbolAsMember(extension);
2532foreach (var member in this.GetMembersUnordered())
2553foreach (var dup in GetMembers(tp.Name))
2564Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2565ImmutableArray<Symbol> membersUnordered,
2570foreach (Symbol symbol in membersUnordered)
2639foreach (var member in valuesByName)
2674var symbol = field.AssociatedSymbol ?? field;
2696foreach (var member in valuesByName)
2716Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2758Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2797Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
2800if (membersByName.TryGetValue(operatorName1.AsMemory(), out ImmutableArray<Symbol> candidates))
2931foreach (var member in GetMembersUnordered())
2948foreach (var member in GetMembersUnordered())
2976foreach (var m in this.GetMembersUnordered())
3020foreach (var m in t.GetMembersUnordered())
3124private Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> MakeAllMembers()
3126Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName;
3148Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
3153ImmutableArray<Symbol> typesAsSymbols = StaticCast<Symbol>.From(types);
3155ImmutableArray<Symbol> membersForName;
3169public ArrayBuilder<Symbol> NonTypeMembersWithPartialImplementations = ArrayBuilder<Symbol>.GetInstance();
3230public readonly ImmutableArray<Symbol> NonTypeMembersWithPartialImplementations;
3239private ImmutableArray<Symbol> _lazyNonTypeMembers;
3248ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations,
3308public ImmutableArray<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container)
3321private ArrayBuilder<Symbol>? NonTypeMembers;
3430public IReadOnlyCollection<Symbol> GetNonTypeMembers(SourceMemberContainerTypeSymbol container, DeclaredMembersAndInitializers declaredMembers)
3432return NonTypeMembers ?? (IReadOnlyCollection<Symbol>)declaredMembers.GetNonTypeMembers(container);
3435public void AddNonTypeMember(SourceMemberContainerTypeSymbol container, Symbol member, DeclaredMembersAndInitializers declaredMembers)
3440NonTypeMembers = ArrayBuilder<Symbol>.GetInstance(declaredNonTypeMembers.Length + 1);
3447public void SetNonTypeMembers(ArrayBuilder<Symbol> members)
3582private void MergePartialMembersAndInitializeNonTypeMembers(ImmutableArray<Symbol> nonTypeMembersWithPartialImplementations, ref ImmutableArray<Symbol> nonTypeMembers)
3586foreach (Symbol member in nonTypeMembersWithPartialImplementations)
3606var nonTypeMembersBuilder = ArrayBuilder<Symbol>.GetInstance(nonTypeMembersWithPartialImplementations.Length);
3701ImmutableArray<Symbol> nonTypeMembersToCheck;
3720foreach (var member in nonTypeMembersToCheck)
3747internal ImmutableArray<Symbol> GetMembersToMatchAgainstDeclarationSpan()
3763internal ImmutableArray<Symbol> GetCandidateMembersForLookup(string name)
3771ImmutableArray<Symbol> nonTypeMembersToCheck;
3794ImmutableArray<Symbol> types = GetTypeMembers(name).Cast<NamedTypeSymbol, Symbol>();
3795ArrayBuilder<Symbol>? memberBuilder = null;
3797foreach (var member in nonTypeMembersToCheck)
3806memberBuilder ??= ArrayBuilder<Symbol>.GetInstance(types.Length + 1);
3856foreach (var member in type.GetMembers())
3969ArrayBuilder<Symbol> nonTypeMembers,
3973var membersBySignature = new Dictionary<Symbol, Symbol>(MemberSignatureComparer.PartialMethodsComparer);
3979if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
3981foreach (var symbol in arrayBuilder)
3985if (!membersBySignature.TryGetValue(symbol, out var prev))
4025var symbol = (Symbol)pair.Value;
4030foreach (var symbol in membersBySignature.Values)
4088if (pair.Value is ArrayBuilder<Symbol> arrayBuilder)
4090foreach (var symbol in arrayBuilder)
4097fixupNotMergedPartialProperty((Symbol)pair.Value);
4101static void fixupNotMergedPartialProperty(Symbol symbol)
4110static void mergePartialMethods(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol currentMethod, SourceOrdinaryMethodSymbol prevMethod, BindingDiagnosticBag diagnostics)
4130static void mergePartialProperties(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol currentProperty, SourcePropertySymbol prevProperty, BindingDiagnosticBag diagnostics)
4154void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertyAccessorSymbol? currentAccessor, SourcePropertyAccessorSymbol? prevAccessor)
4179static void mergePartialConstructors(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol currentConstructor, SourceConstructorSymbol prevConstructor, BindingDiagnosticBag diagnostics)
4199static void mergePartialEvents(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol currentEvent, SourceEventSymbol prevEvent, BindingDiagnosticBag diagnostics)
4220static void mergeAccessors(ArrayBuilder<Symbol> nonTypeMembers, SourceEventAccessorSymbol? currentAccessor, SourceEventAccessorSymbol? prevAccessor)
4235private static void FixPartialMethod(ArrayBuilder<Symbol> nonTypeMembers, SourceOrdinaryMethodSymbol part1, SourceOrdinaryMethodSymbol part2)
4257private static void FixPartialProperty(ArrayBuilder<Symbol> nonTypeMembers, SourcePropertySymbol part1, SourcePropertySymbol part2)
4285private static void FixPartialConstructor(ArrayBuilder<Symbol> nonTypeMembers, SourceConstructorSymbol part1, SourceConstructorSymbol part2)
4307private static void FixPartialEvent(ArrayBuilder<Symbol> nonTypeMembers, SourceEventSymbol part1, SourceEventSymbol part2)
4328private static void Remove(ArrayBuilder<Symbol> symbols, Symbol symbol)
4332Symbol s = symbols[i];
4350Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4371foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4401Dictionary<ReadOnlyMemory<char>, ImmutableArray<Symbol>> membersByName,
4410foreach (var symbol in membersByName.TryGetValue(accessorName.AsMemory(), out var members) ? members : [])
4438var locationFrom = (Symbol)(getNotSet ? propertySymbol.GetMethod : propertySymbol.SetMethod) ?? propertySymbol;
4447var locationFrom = (Symbol?)(isAdder ? propertySymbol.AddMethod : propertySymbol.RemoveMethod) ?? propertySymbol;
4558private static void CheckInterfaceMembers(ImmutableArray<Symbol> nonTypeMembers, BindingDiagnosticBag diagnostics)
4560foreach (var member in nonTypeMembers)
4566private static void CheckInterfaceMember(Symbol member, BindingDiagnosticBag diagnostics)
4613private static void CheckExtensionMembers(ImmutableArray<Symbol> members, BindingDiagnosticBag diagnostics)
4615foreach (var member in members)
4622static void checkExtensionMember(Symbol member, BindingDiagnosticBag diagnostics)
4631internal static bool IsAllowedExtensionMember(Symbol member)
4677ArrayBuilder<Symbol> members,
4681foreach (var s in members)
4723var symbol = initializer.FieldOpt.AssociatedSymbol ?? initializer.FieldOpt;
4751var members = ArrayBuilder<Symbol>.GetInstance(membersSoFar.Count + 1);
4771var fieldsByName = PooledDictionary<string, Symbol>.GetInstance();
4773foreach (var member in membersSoFar)
4869void addDeconstruct(SynthesizedPrimaryConstructor ctor, ImmutableArray<Symbol> positionalMembers)
4892if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingDeconstructMethod))
4940if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingConstructor))
4971MethodSymbol addPrintMembersMethod(IEnumerable<Symbol> userDefinedMembers)
4993if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingPrintMembersMethod))
5064if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingToStringMethod))
5087var objectToString = this.DeclaringCompilation.GetSpecialTypeMember(SpecialMember.System_Object__ToString);
5091foreach (var member in currentBaseType.GetSimpleNonTypeMembers(WellKnownMemberNames.ObjectToString))
5107ImmutableArray<Symbol> addProperties(ImmutableArray<ParameterSymbol> recordParameters)
5109var existingOrAddedMembers = ArrayBuilder<Symbol>.GetInstance(recordParameters.Length);
5124if (!memberSignatures.TryGetValue(targetProperty, out var existingMember)
5189bool checkMemberNotHidden(Symbol symbol, ParameterSymbol param)
5223if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingHashCodeMethod))
5253if (!memberSignatures.TryGetValue(targetProperty, out Symbol? existingEqualityContractProperty))
5322if (!memberSignatures.TryGetValue(targetMethod, out Symbol? existingEqualsMethod))
5347void reportStaticOrNotOverridableAPIInRecord(Symbol symbol, BindingDiagnosticBag diagnostics)
5388foreach (var member in membersSoFar)
5470foreach (var synthesizedMember in synthesizedMembers)
5848private void AddAccessorIfAvailable(ArrayBuilder<Symbol> symbols, MethodSymbol? accessorOpt)
5897foreach (var member in GetMembersUnordered())
6011foreach (var member in this.GetMembersUnordered())
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (32)
100foreach (var abstractMember in this.AbstractMembers)
134foreach (var interfaceMember in @interface.GetMembers())
158MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = this.GetExplicitImplementationForInterfaceMember(interfaceMember);
178var implementingMember = implementingMemberAndDiagnostics.Symbol;
229var info = new CSDiagnosticInfo(ErrorCode.ERR_MixingWinRTEventWithRegular, args, ImmutableArray<Symbol>.Empty, ImmutableArray.Create<Location>(this.GetFirstLocation()));
237var associatedPropertyOrEvent = interfaceMemberKind == SymbolKind.Method ? ((MethodSymbol)interfaceMember).AssociatedSymbol : null;
385private bool ReportAccessorOfInterfacePropertyOrEvent(Symbol interfacePropertyOrEvent)
395Symbol implementingPropertyOrEvent;
399MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = this.GetExplicitImplementationForInterfaceMember(interfacePropertyOrEvent);
528foreach (var member in this.GetMembersUnordered())
670private void CheckNewModifier(Symbol symbol, bool isNew, BindingDiagnosticBag diagnostics)
702foreach (var hiddenMember in currType.GetMembers(symbol.Name))
742Symbol overridingMember,
779Symbol associatedPropertyOrEvent = null;
868void checkSingleOverriddenMember(Symbol overridingMember, Symbol overriddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
929var leastOverriddenMember = overriddenMember.GetLeastOverriddenMember(overriddenMember.ContainingType);
1203private bool IsValidOverrideReturnType(Symbol overridingSymbol, TypeWithAnnotations overridingReturnType, TypeWithAnnotations overriddenReturnType, BindingDiagnosticBag diagnostics)
1537Symbol overriddenMember,
1538Symbol overridingMember)
1569Symbol hidingMember,
1599foreach (var hiddenMember in hiddenMembers)
1649private static bool IsShadowingSynthesizedRecordMember(Symbol hidingMember)
1658private static bool AddHidingAbstractDiagnostic(Symbol hidingMember, Location hidingMemberLocation, Symbol hiddenMember, BindingDiagnosticBag diagnostics, ref bool suppressAccessors)
1693var associatedPropertyOrEvent = ((MethodSymbol)hidingMember).AssociatedSymbol;
1724private static bool OverrideHasCorrectAccessibility(Symbol overridden, Symbol overriding)
1812SynthesizeInterfaceMemberImplementation(SymbolAndDiagnostics implementingMemberAndDiagnostics, Symbol interfaceMember)
1822Symbol implementingMember = implementingMemberAndDiagnostics.Symbol;
Symbols\SubstitutedNamedTypeSymbol.cs (32)
27private static readonly Func<Symbol, NamedTypeSymbol, Symbol> s_symbolAsMemberFunc = SymbolExtensions.SymbolAsMember;
38private readonly Symbol _newContainer;
53private ConcurrentCache<string, ImmutableArray<Symbol>> _lazyMembersByNameCache;
55private ImmutableArray<Symbol> _lazyMembers;
57protected SubstitutedNamedTypeSymbol(Symbol newContainer, TypeMap map, NamedTypeSymbol originalDefinition, NamedTypeSymbol constructedFrom = null, bool unbound = false, TupleExtraData tupleData = null)
126public sealed override Symbol ContainingSymbol
189internal abstract override bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
236public sealed override ImmutableArray<Symbol> GetMembers()
243var builder = ArrayBuilder<Symbol>.GetInstance();
248foreach (var t in OriginalDefinition.GetMembers())
258foreach (var t in OriginalDefinition.GetMembers())
271private ArrayBuilder<Symbol> AddOrWrapTupleMembersIfNecessary(ArrayBuilder<Symbol> builder)
276var replacedFields = new HashSet<Symbol>(ReferenceEqualityComparer.Instance);
278foreach (var existingMember in existingMembers)
292internal sealed override ImmutableArray<Symbol> GetMembersUnordered()
294var builder = ArrayBuilder<Symbol>.GetInstance();
298foreach (var t in OriginalDefinition.GetMembersUnordered())
308foreach (var t in OriginalDefinition.GetMembersUnordered())
319public sealed override ImmutableArray<Symbol> GetMembers(string name)
321if (_unbound) return StaticCast<Symbol>.From(GetTypeMembers(name));
323ImmutableArray<Symbol> result;
333private ImmutableArray<Symbol> GetMembersWorker(string name)
348var builder = ArrayBuilder<Symbol>.GetInstance(originalMembers.Length);
349foreach (var t in originalMembers)
358void cacheResult(ImmutableArray<Symbol> result)
364(_lazyMembersByNameCache = new ConcurrentCache<string, ImmutableArray<Symbol>>(8));
392internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers()
399internal override ImmutableArray<Symbol> GetEarlyAttributeDecodingMembers(string name)
403var builder = ArrayBuilder<Symbol>.GetInstance();
404foreach (var t in OriginalDefinition.GetEarlyAttributeDecodingMembers(name))
Symbols\Symbol.cs (27)
51internal virtual void ForceComplete(SourceLocation? locationOpt, Predicate<Symbol>? filter, CancellationToken cancellationToken)
108public abstract Symbol ContainingSymbol { get; }
117Symbol container = this.ContainingSymbol;
148for (var container = this.ContainingSymbol; (object)container != null; container = container.ContainingSymbol)
171var container = this.ContainingSymbol;
342var container = this.ContainingSymbol;
362public Symbol OriginalDefinition
370protected virtual Symbol OriginalSymbolDefinition
764public static bool operator ==(Symbol left, Symbol right)
786public static bool operator !=(Symbol left, Symbol right)
809return this.Equals(obj as Symbol, SymbolEqualityComparer.Default.CompareKind);
812public bool Equals(Symbol other)
819return this.Equals(other as Symbol, compareKind);
823public virtual bool Equals(Symbol other, TypeCompareKind compareKind)
834public static bool Equals(Symbol first, Symbol second, TypeCompareKind compareKind)
959internal static void ForceCompleteMemberConditionally(SourceLocation? locationOpt, Predicate<Symbol>? filter, Symbol member, CancellationToken cancellationToken)
1341internal static bool GetUnificationUseSiteDiagnosticRecursive<T>(ref DiagnosticInfo result, ImmutableArray<T> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes) where T : TypeSymbol
1354internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeWithAnnotations> types, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1367internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<CustomModifier> modifiers, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1380internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<ParameterSymbol> parameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1394internal static bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, ImmutableArray<TypeParameterSymbol> typeParameters, Symbol owner, ref HashSet<TypeSymbol> checkedTypes)
1719internal static bool IsCaptured(Symbol variable, SourceMethodSymbol containingSymbol)
1770for (var currentFunction = variable.ContainingSymbol;
Symbols\SymbolExtensions.cs (56)
24public static bool IsCompilationOutputWinMdObj(this Symbol symbol)
39public static bool IsNestedType([NotNullWhen(true)] this Symbol? symbol)
87public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeSymbol type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
92public static bool IsNoMoreVisibleThan(this Symbol symbol, TypeWithAnnotations type, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
97internal static void AddUseSiteInfo(this Symbol? symbol, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool addDiagnostics = true)
120public static LocalizableErrorArgument GetKindText(this Symbol symbol)
129internal static NamespaceOrTypeSymbol? ContainingNamespaceOrType(this Symbol symbol)
131var containingSymbol = symbol.ContainingSymbol;
145internal static Symbol? ContainingNonLambdaMember(this Symbol? containingMember)
157internal static ParameterSymbol? EnclosingThisSymbol(this Symbol containingMember)
159Symbol symbol = containingMember;
199public static Symbol ConstructedFrom(this Symbol symbol)
219public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, TypeSymbol type)
228public static bool IsContainingSymbolOfAllTypeParameters(this Symbol containingSymbol, ImmutableArray<TypeSymbol> types)
233private static readonly Func<TypeSymbol, Symbol, bool, bool> s_hasInvalidTypeParameterFunc =
236private static bool HasInvalidTypeParameter(TypeSymbol type, Symbol? containingSymbol)
240var symbol = type.ContainingSymbol;
253public static bool IsTypeOrTypeAlias(this Symbol symbol)
273internal static bool CompilationAllowsUnsafe(this Symbol symbol)
278internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, BindingDiagnosticBag diagnostics)
283internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, BindingDiagnosticBag diagnostics)
286internal static void CheckUnsafeModifier(this Symbol symbol, DeclarationModifiers modifiers, Location errorLocation, DiagnosticBag? diagnostics)
300public static bool IsHiddenByCodeAnalysisEmbeddedAttribute(this Symbol symbol)
317public static bool MustCallMethodsDirectly(this Symbol symbol)
330public static int GetArity(this Symbol? symbol)
346internal static CSharpSyntaxNode GetNonNullSyntaxNode(this Symbol? symbol)
354Symbol? containingSymbol = symbol.ContainingSymbol;
371internal static Symbol? EnsureCSharpSymbolOrNull(this ISymbol? symbol, string paramName)
430internal static TypeWithAnnotations GetTypeOrReturnType(this Symbol symbol)
462internal static FlowAnalysisAnnotations GetFlowAnalysisAnnotations(this Symbol? symbol)
474internal static void GetTypeOrReturnType(this Symbol symbol, out RefKind refKind, out TypeWithAnnotations returnType,
525internal static bool IsImplementableInterfaceMember(this Symbol symbol)
530internal static bool RequiresInstanceReceiver(this Symbol symbol)
543private static TISymbol? GetPublicSymbol<TISymbol>(this Symbol? symbol)
550internal static ISymbol? GetPublicSymbol(this Symbol? symbol)
675internal static IEnumerable<ISymbol?> GetPublicSymbols(this IEnumerable<Symbol?> symbols)
680private static ImmutableArray<TISymbol> GetPublicSymbols<TISymbol>(this ImmutableArray<Symbol> symbols)
691internal static ImmutableArray<ISymbol> GetPublicSymbols(this ImmutableArray<Symbol> symbols)
698return GetPublicSymbols<IPropertySymbol>(StaticCast<Symbol>.From(symbols));
703return GetPublicSymbols<ITypeSymbol>(StaticCast<Symbol>.From(symbols));
708return GetPublicSymbols<INamedTypeSymbol>(StaticCast<Symbol>.From(symbols));
713return GetPublicSymbols<ILocalSymbol>(StaticCast<Symbol>.From(symbols));
718return GetPublicSymbols<IEventSymbol>(StaticCast<Symbol>.From(symbols));
723return GetPublicSymbols<ITypeParameterSymbol>(StaticCast<Symbol>.From(symbols));
728return GetPublicSymbols<IParameterSymbol>(StaticCast<Symbol>.From(symbols));
733return GetPublicSymbols<IMethodSymbol>(StaticCast<Symbol>.From(symbols));
738return GetPublicSymbols<IAssemblySymbol>(StaticCast<Symbol>.From(symbols));
743return GetPublicSymbols<IFieldSymbol>(StaticCast<Symbol>.From(symbols));
748return GetPublicSymbols<INamespaceSymbol>(StaticCast<Symbol>.From(symbols));
753where TSymbol : Symbol
759internal static Symbol? GetSymbol(this ISymbol? symbol)
761return symbol.GetSymbol<Symbol>();
812internal static bool IsRequired(this Symbol symbol) => symbol is FieldSymbol { IsRequired: true } or PropertySymbol { IsRequired: true };
817internal static int GetOverloadResolutionPriority(this Symbol symbol)
Symbols\Tuples\TupleTypeSymbol.cs (29)
486internal static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember, BindingDiagnosticBag diagnostics, SyntaxNode? syntax)
488Symbol? member = GetWellKnownMemberInType(type, relativeMember);
515static Symbol? GetWellKnownMemberInType(NamedTypeSymbol type, WellKnownMember relativeMember)
564public TMember? GetTupleMemberSymbolForUnderlyingMember<TMember>(TMember? underlyingMemberOpt) where TMember : Symbol
569protected ArrayBuilder<Symbol> MakeSynthesizedTupleMembers(ImmutableArray<Symbol> currentMembers, HashSet<Symbol>? replacedFields = null)
576var members = ArrayBuilder<Symbol>.GetInstance(currentMembers.Length);
590foreach (Symbol member in currentMembers)
798static void collectTargetTupleFields(int arity, ImmutableArray<Symbol> members, ArrayBuilder<FieldSymbol?> fieldsForElements)
809static Symbol? getWellKnownMemberInType(ImmutableArray<Symbol> members, WellKnownMember relativeMember)
818static ImmutableArray<Symbol> getOriginalFields(ImmutableArray<Symbol> members)
820var fields = ArrayBuilder<Symbol>.GetInstance();
821foreach (var member in members)
912private SmallDictionary<Symbol, Symbol>? _lazyUnderlyingDefinitionToMemberMap;
1013foreach (var member in tuple.GetMembers())
1044internal SmallDictionary<Symbol, Symbol> UnderlyingDefinitionToMemberMap
1050SmallDictionary<Symbol, Symbol> computeDefinitionToMemberMap()
1052var map = new SmallDictionary<Symbol, Symbol>(ReferenceEqualityComparer.Instance);
1059var member = members[i];
1099public TMember? GetTupleMemberSymbolForUnderlyingMember<TMember>(TMember? underlyingMemberOpt) where TMember : Symbol
1106Symbol underlyingMemberDefinition = underlyingMemberOpt.OriginalDefinition;
1114if (UnderlyingDefinitionToMemberMap.TryGetValue(underlyingMemberDefinition, out Symbol? result))
Symbols\TypeSymbol.cs (131)
42private ImmutableHashSet<Symbol> _lazyAbstractMembers;
60private ConcurrentDictionary<Symbol, SymbolAndDiagnostics> _implementationForInterfaceMemberMap;
62public ConcurrentDictionary<Symbol, SymbolAndDiagnostics> ImplementationForInterfaceMemberMap
73map = new ConcurrentDictionary<Symbol, SymbolAndDiagnostics>(concurrencyLevel: 1, capacity: 1, comparer: SymbolEqualityComparer.ConsiderEverything);
83internal MultiDictionary<Symbol, Symbol> explicitInterfaceImplementationMap;
146protected sealed override Symbol OriginalSymbolDefinition
298public sealed override bool Equals(Symbol other, TypeCompareKind compareKind)
442public Symbol FindImplementationForInterfaceMember(Symbol interfaceMember)
531internal abstract bool GetUnificationUseSiteDiagnosticRecursive(ref DiagnosticInfo result, Symbol owner, ref HashSet<TypeSymbol> checkedTypes);
720internal SymbolAndDiagnostics FindImplementationForInterfaceMemberInNonInterfaceWithDiagnostics(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
771internal Symbol FindImplementationForInterfaceMemberInNonInterface(Symbol interfaceMember, bool ignoreImplementationInInterfacesIfResultIsNotReady = false)
776private SymbolAndDiagnostics ComputeImplementationAndDiagnosticsForInterfaceMember(Symbol interfaceMember, bool ignoreImplementationInInterfaces, out bool implementationInInterfacesMightChangeResult)
779var implementingMember = ComputeImplementationForInterfaceMember(interfaceMember, this, diagnostics, ignoreImplementationInInterfaces, out implementationInInterfacesMightChangeResult);
802private static Symbol ComputeImplementationForInterfaceMember(Symbol interfaceMember, TypeSymbol implementingType, BindingDiagnosticBag diagnostics,
830Symbol implicitImpl = null;
831Symbol closestMismatch = null;
846MultiDictionary<Symbol, Symbol>.ValueSet explicitImpl = currType.GetExplicitImplementationForInterfaceMember(interfaceMember);
878if (IsExplicitlyImplementedViaAccessors(checkPendingExplicitImplementations, interfaceMember, currType, ref useSiteInfo, out Symbol currTypeExplicitImpl))
916Symbol currTypeImplicitImpl;
917Symbol currTypeCloseMismatch;
954Symbol originalImplicitImpl = implicitImpl;
964Symbol defaultImpl = null;
1054private static Symbol FindMostSpecificImplementationInInterfaces(Symbol interfaceMember, TypeSymbol implementingType,
1069Symbol defaultImpl = FindMostSpecificImplementationInBases(interfaceMember,
1071ref useSiteInfo, out Symbol conflict1, out Symbol conflict2);
1107private static Symbol FindMostSpecificImplementation(Symbol interfaceMember, NamedTypeSymbol implementingInterface, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1109MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1126out var _, out var _);
1129Symbol result = implementingMember.Single();
1148private static Symbol FindMostSpecificImplementationInBases(
1149Symbol interfaceMember,
1152out Symbol conflictingImplementation1,
1153out Symbol conflictingImplementation2)
1177Symbol accessorImpl1 = findMostSpecificImplementationInBases(interfaceAccessor1 ?? interfaceAccessor2, allInterfaces, ref useSiteInfo,
1178out Symbol conflictingAccessorImplementation11, out Symbol conflictingAccessorImplementation12);
1208Symbol accessorImpl2 = findMostSpecificImplementationInBases(interfaceAccessor2, allInterfaces, ref useSiteInfo,
1209out Symbol conflictingAccessorImplementation21, out Symbol conflictingAccessorImplementation22);
1239static Symbol findImplementationInInterface(Symbol interfaceMember, Symbol inplementingAccessor1, Symbol implementingAccessor2 = null)
1249MultiDictionary<Symbol, Symbol>.ValueSet implementingMember = FindImplementationInInterface(interfaceMember, implementingInterface);
1260static Symbol findMostSpecificImplementationInBases(
1261Symbol interfaceMember,
1264out Symbol conflictingImplementation1,
1265out Symbol conflictingImplementation2)
1267var implementations = ArrayBuilder<(MultiDictionary<Symbol, Symbol>.ValueSet MethodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> Bases)>.GetInstance();
1277MultiDictionary<Symbol, Symbol>.ValueSet candidate = FindImplementationInInterface(interfaceMember, interfaceType);
1286(MultiDictionary<Symbol, Symbol>.ValueSet methodSet, MultiDictionary<NamedTypeSymbol, NamedTypeSymbol> bases) = implementations[i];
1287Symbol previous = methodSet.First();
1339Symbol result;
1349MultiDictionary<Symbol, Symbol>.ValueSet methodSet = implementations[0].MethodSet;
1379internal static MultiDictionary<Symbol, Symbol>.ValueSet FindImplementationInInterface(Symbol interfaceMember, NamedTypeSymbol interfaceType)
1393return new MultiDictionary<Symbol, Symbol>.ValueSet(interfaceMember);
1402private static (MethodSymbol interfaceAccessor1, MethodSymbol interfaceAccessor2) GetImplementableAccessors(Symbol interfaceMember)
1463private static bool IsExplicitlyImplementedViaAccessors(bool checkPendingExplicitImplementations, Symbol interfaceMember, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol implementingMember)
1467Symbol associated1;
1468Symbol associated2;
1500private static bool TryGetExplicitImplementationAssociatedPropertyOrEvent(bool checkPendingExplicitImplementations, MethodSymbol interfaceAccessor, TypeSymbol currType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out Symbol associated)
1506MultiDictionary<Symbol, Symbol>.ValueSet set = currType.GetExplicitImplementationForInterfaceMember(interfaceAccessor);
1509Symbol implementation = set.Single();
1545ref Symbol implicitImpl)
1550Symbol associatedInterfacePropertyOrEvent = interfaceMethod.AssociatedSymbol;
1561Symbol implementingPropertyOrEvent = implementingType.FindImplementationForInterfaceMemberInNonInterface(associatedInterfacePropertyOrEvent,
1627private static void ReportDefaultInterfaceImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1675private static void ReportImplicitImplementationMatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol implicitImpl, BindingDiagnosticBag diagnostics)
1730foreach (Symbol member in implicitImpl.ContainingType.GetMembers(implicitImpl.Name))
1770internal static void CheckModifierMismatchOnImplementingMember(TypeSymbol implementingType, Symbol implementingMember, Symbol interfaceMember, bool isExplicit, BindingDiagnosticBag diagnostics)
1968static void checkRefStructInterfacesFeatureAvailabilityOnUnscopedRefAttribute(Symbol implementingSymbol, BindingDiagnosticBag diagnostics)
1987private static void ReportImplicitImplementationMismatchDiagnostics(Symbol interfaceMember, TypeSymbol implementingType, Symbol closestMismatch, BindingDiagnosticBag diagnostics)
2064internal static bool HaveInitOnlyMismatch(Symbol one, Symbol other)
2082private static Location GetInterfaceLocation(Symbol interfaceMember, TypeSymbol implementingType)
2142internal static Location GetImplicitImplementationDiagnosticLocation(Symbol interfaceMember, TypeSymbol implementingType, Symbol member)
2172Symbol interfaceMember,
2175out Symbol implicitImpl,
2176out Symbol closeMismatch)
2188foreach (Symbol member in currType.GetMembers(interfaceMember.Name))
2245private static bool IsInterfaceMemberImplementation(Symbol candidateMember, Symbol interfaceMember, bool implementingTypeIsFromSomeCompilation)
2274protected MultiDictionary<Symbol, Symbol>.ValueSet GetExplicitImplementationForInterfaceMember(Symbol interfaceMember)
2290private MultiDictionary<Symbol, Symbol> MakeExplicitInterfaceImplementationMap()
2292var map = new MultiDictionary<Symbol, Symbol>(ExplicitInterfaceImplementationTargetMemberEqualityComparer.Instance);
2293foreach (var member in this.GetMembersUnordered())
2295foreach (var interfaceMember in member.GetExplicitInterfaceImplementations())
2361protected class ExplicitInterfaceImplementationTargetMemberEqualityComparer : IEqualityComparer<Symbol>
2366public bool Equals(Symbol x, Symbol y)
2372public int GetHashCode(Symbol obj)
2385internal ImmutableHashSet<Symbol> AbstractMembers
2397private ImmutableHashSet<Symbol> ComputeAbstractMembers()
2399var abstractMembers = ImmutableHashSet.Create<Symbol>();
2400var overriddenMembers = ImmutableHashSet.Create<Symbol>();
2402foreach (var member in this.GetMembersUnordered())
2409Symbol overriddenMember = null;
2437foreach (var baseAbstractMember in this.BaseTypeNoUseSiteDiagnostics.AbstractMembers)
2478public static bool operator ==(Symbol left, TypeSymbol right)
2482public static bool operator !=(Symbol left, TypeSymbol right)
2486public static bool operator ==(TypeSymbol left, Symbol right)
2490public static bool operator !=(TypeSymbol left, Symbol right)
Symbols\TypeSymbolExtensions.cs (13)
20public Symbol? Symbol;
557private static bool IsNamespaceName(Symbol symbol, string[] names)
679public static bool IsAtLeastAsVisibleAs(this TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
684public static TypeSymbol? FindTypeLessVisibleThan(this TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
708private static bool IsTypeLessVisibleThan(TypeSymbol type, Symbol sym, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1013internal static bool IsAsRestrictive(this Symbol s1, Symbol sym2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
1022for (Symbol s2 = sym2; s2.Kind != SymbolKind.Namespace; s2 = s2.ContainingSymbol)
1218public static bool ContainsTypeParameter(this TypeSymbol type, Symbol typeParameterContainer)
1226private static readonly Func<TypeSymbol, Symbol, bool, bool> s_isTypeParameterWithSpecificContainerPredicate =
1751internal static TypeParameterSymbol? FindEnclosingTypeParameter(this Symbol methodOrType, string name)
1788var container = type.ContainingSymbol;
2097Symbol declaringSymbol,