4159 references to RefKind
ConfigurationSchemaGenerator (2)
RuntimeSource\Configuration.Binder\ConfigurationBindingGenerator.Parser.cs (1)
704else if (parameter.RefKind is not RefKind.None)
RuntimeSource\Configuration.Binder\Specs\Members\ParameterSpec.cs (1)
30public RefKind RefKind { get; }
GenerateDocumentationAndConfigFiles (75)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
ILLink.RoslynAnalyzer (19)
DataFlow\LocalDataFlowVisitor.cs (1)
291if (propertyRef.Property.RefKind is not RefKind.None)
DynamicallyAccessedMembersAnalyzer.cs (3)
180if (member is IFieldSymbol field && field.GetDynamicallyAccessedMemberTypes() != DynamicallyAccessedMemberTypes.None && !field.Type.IsTypeInterestingForDataflow(isByRef: field.RefKind is not RefKind.None)) 190if (parameter.GetDynamicallyAccessedMemberTypes() != DynamicallyAccessedMemberTypes.None && !parameter.Type.IsTypeInterestingForDataflow(isByRef: parameter.RefKind is not RefKind.None)) 327|| !propertySymbol.Type.IsTypeInterestingForDataflow(isByRef: propertySymbol.RefKind is not RefKind.None)
IOperationExtensions.cs (9)
140case RefKind.RefReadOnly: 143case RefKind.Out: 146case RefKind.Ref: 157RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 158RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 195case RefKind.Ref: 198case RefKind.RefReadOnly: 207public static RefKind GetRefKind(this IReturnOperation operation, ISymbol containingSymbol) 210return containingMethod?.RefKind ?? RefKind.None;
TrimAnalysis\FlowAnnotations.cs (2)
117if (!field.OriginalDefinition.Type.IsTypeInterestingForDataflow(isByRef: field.RefKind is not RefKind.None)) 169bool isByRef = parameter.RefKind is not RefKind.None;
TrimAnalysis\ParameterProxy.cs (4)
29case RefKind.Ref: return ReferenceKind.Ref; 30case RefKind.In: return ReferenceKind.In; 31case RefKind.Out: return ReferenceKind.Out; 32case RefKind.None: return ReferenceKind.None;
Metrics (35)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Metrics.Legacy (35)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.AspNetCore.App.Analyzers (2)
src\Shared\RoslynUtils\ParsabilityHelper.cs (2)
101methodSymbol.Parameters[1].RefKind == RefKind.Out; 112methodSymbol.Parameters[2].RefKind == RefKind.Out;
Microsoft.AspNetCore.Http.RequestDelegateGenerator (2)
src\Shared\RoslynUtils\ParsabilityHelper.cs (2)
101methodSymbol.Parameters[1].RefKind == RefKind.Out; 112methodSymbol.Parameters[2].RefKind == RefKind.Out;
Microsoft.CodeAnalysis (54)
Compilation\Compilation.cs (5)
1121/// * <see cref="RefKind.Out"/> is passed as the returnRefKind. 1129RefKind returnRefKind, 1131ImmutableArray<RefKind> parameterRefKinds, 1140RefKind returnRefKind, 1142ImmutableArray<RefKind> parameterRefKinds,
DiagnosticAnalyzer\SuppressMessageAttributeState.TargetSymbolResolver.cs (1)
796if ((symbol.RefKind == RefKind.None) == parameterInfo.IsRefOrOut)
DocumentationCommentId.cs (2)
501if (p.RefKind != RefKind.None) 1459if ((symbol.RefKind == RefKind.None) == parameterInfo.IsRefOrOut)
Emit\EditAndContinue\DefinitionMap.cs (1)
529if (p.RefKind == RefKind.Ref &&
Operations\ControlFlowGraphBuilder.cs (2)
4663return new SimpleAssignmentOperation(isRef: local.RefKind != RefKind.None, 6825Debug.Assert(outParameterArgument is { Parameter: { RefKind: RefKind.Out, Type.SpecialType: SpecialType.System_Boolean } });
Operations\OperationExtensions.cs (14)
250/// Get an optional argument <see cref="RefKind"/> for an argument at the given <paramref name="index"/> to the given <paramref name="dynamicOperation"/>. 251/// Returns a non-null argument <see cref="RefKind"/> for C#. 252/// Always returns null for VB as <see cref="RefKind"/> cannot be specified for an argument in VB. 256public static RefKind? GetArgumentRefKind(this IDynamicInvocationOperation dynamicOperation, int index) 267/// Get an optional argument <see cref="RefKind"/> for an argument at the given <paramref name="index"/> to the given <paramref name="dynamicOperation"/>. 268/// Returns a non-null argument <see cref="RefKind"/> for C#. 269/// Always returns null for VB as <see cref="RefKind"/> cannot be specified for an argument in VB. 273public static RefKind? GetArgumentRefKind(this IDynamicIndexerAccessOperation dynamicOperation, int index) 284/// Get an optional argument <see cref="RefKind"/> for an argument at the given <paramref name="index"/> to the given <paramref name="dynamicOperation"/>. 285/// Returns a non-null argument <see cref="RefKind"/> for C#. 286/// Always returns null for VB as <see cref="RefKind"/> cannot be specified for an argument in VB. 290public static RefKind? GetArgumentRefKind(this IDynamicObjectCreationOperation dynamicOperation, int index) 300internal static RefKind? GetArgumentRefKind(this HasDynamicArgumentsExpression dynamicOperation, int index) 322return RefKind.None;
Operations\OperationNodes.cs (5)
235protected HasDynamicArgumentsExpression(ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 245public ImmutableArray<RefKind> ArgumentRefKinds { get; } 252public DynamicObjectCreationOperation(IObjectOrCollectionInitializerOperation? initializer, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 334public DynamicInvocationOperation(IOperation operation, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 416public DynamicIndexerAccessOperation(IOperation operation, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) :
Symbols\IFieldSymbol.cs (1)
67RefKind RefKind { get; }
Symbols\ILocalSymbol.cs (1)
41RefKind RefKind { get; }
Symbols\IMethodSymbol.cs (1)
95RefKind RefKind { get; }
Symbols\IParameterSymbol.cs (1)
23RefKind RefKind { get; }
Symbols\IParameterSymbolInternal.cs (1)
10RefKind RefKind { get; }
Symbols\IPropertySymbol.cs (1)
58RefKind RefKind { get; }
Symbols\ISymbolExtensions.cs (1)
146if (enterScopeMethod is not { ReturnsVoid: false, RefKind: RefKind.None })
Symbols\RefKind.cs (17)
52internal static string ToParameterDisplayString(this RefKind kind) 56case RefKind.Out: return "out"; 57case RefKind.Ref: return "ref"; 58case RefKind.In: return "in"; 59case RefKind.RefReadOnlyParameter: return "ref readonly"; 64internal static string ToArgumentDisplayString(this RefKind kind) 68case RefKind.Out: return "out"; 69case RefKind.Ref: return "ref"; 70case RefKind.In: return "in"; 75internal static string ToParameterPrefix(this RefKind kind) 79case RefKind.Out: return "out "; 80case RefKind.Ref: return "ref "; 81case RefKind.In: return "in "; 82case RefKind.RefReadOnlyParameter: return "ref readonly "; 83case RefKind.None: return string.Empty; 93internal const RefKind StrictIn = RefKind.RefReadOnlyParameter + 1;
Microsoft.CodeAnalysis.Analyzers (75)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Microsoft.CodeAnalysis.AnalyzerUtilities (73)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.CopyDataFlowOperationVisitor.cs (2)
319Debug.Assert(operation.Parameter?.RefKind is RefKind.Ref or RefKind.Out);
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.DisposeDataFlowOperationVisitor.cs (7)
182Debug.Assert(parameter.RefKind != RefKind.None); 190Debug.Assert(operation.Parameter!.RefKind is RefKind.Ref or RefKind.Out); 341operation.Parameter?.RefKind == RefKind.Out && 368if (operation.Parameter?.RefKind is RefKind.Out or RefKind.Ref) 379operation.Parameter.RefKind == RefKind.Out)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisHelper.cs (1)
160operation.Parent is IArgumentOperation argument && argument.Parameter?.RefKind == RefKind.Out) &&
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\DefaultPointsToValueGenerator.cs (1)
32analysisEntity.Symbol is IParameterSymbol parameter && parameter.RefKind == RefKind.Out ||
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.PointsToDataFlowOperationVisitor.cs (10)
186analysisEntity.Symbol is IParameterSymbol { RefKind: RefKind.Out }); 252if (parameter.RefKind is RefKind.Ref or RefKind.Out) 289Debug.Assert(operation.Parameter!.RefKind is RefKind.Ref or RefKind.Out); 307if ((operation.Parameter?.RefKind is RefKind.Ref or RefKind.Out) && 319else if (operation.Parameter?.RefKind is RefKind.Ref or RefKind.Out) 321if (operation.Parameter.RefKind == RefKind.Ref)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.TaintedDataOperationVisitor.cs (3)
758&& (a.Parameter.RefKind == RefKind.None 759|| a.Parameter.RefKind == RefKind.Ref 760|| a.Parameter.RefKind == RefKind.In));
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractLocationDataFlowOperationVisitor.cs (4)
44if (parameter.RefKind == RefKind.None) 69Debug.Assert(operation.Parameter!.RefKind is RefKind.Ref or RefKind.Out); 75if (operation.Parameter.RefKind == RefKind.Ref)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AddressSharedEntitiesProvider.cs (1)
46if (parameter.RefKind != RefKind.None &&
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityDataFlowOperationVisitor.cs (5)
66Debug.Assert(operation.Parameter!.RefKind is RefKind.Ref or RefKind.Out); 82Debug.Assert(operation.Parameter!.RefKind is RefKind.Ref or RefKind.Out); 308if (parameter.RefKind != RefKind.None)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (4)
596if (parameter.RefKind == RefKind.None || DataFlowAnalysisContext.InterproceduralAnalysisData == null) 3120if (operation.Parameter?.RefKind is RefKind.Ref or RefKind.Out) 3123if (operation.Parameter.RefKind != RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.CodeAnalysis.BannedApiAnalyzers (75)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Microsoft.CodeAnalysis.CodeStyle (39)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (2)
594if (member is IFieldSymbol { RefKind: RefKind.Ref }) 841methodSymbol.Parameters[0].RefKind == RefKind.None &&
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (2)
544case RefKind.Out: 551case RefKind.Ref:
src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (2)
134RefKind: RefKind.None, 367if (property.RefKind != RefKind.None)
src\Analyzers\Core\Analyzers\UseCompoundAssignment\UseCompoundAssignmentUtilities.cs (1)
120if (isTopLevel && symbol is IPropertySymbol { RefKind: RefKind.None })
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (2)
89syntaxFacts, anyReturn.GetRefKind(containingSymbol) != RefKind.None, 130isRef = anyReturn.GetRefKind(containingSymbol) != RefKind.None;
src\Compilers\Core\Portable\DiagnosticAnalyzer\SuppressMessageAttributeState.TargetSymbolResolver.cs (1)
796if ((symbol.RefKind == RefKind.None) == parameterInfo.IsRefOrOut)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.CodeAnalysis.CodeStyle.Fixes (65)
src\Analyzers\Core\CodeFixes\AddParameter\AbstractAddParameterCodeFixProvider.cs (2)
402private async Task<(ITypeSymbol, RefKind)> GetArgumentTypeAndRefKindAsync(Document invocationDocument, TArgumentSyntax argument, CancellationToken cancellationToken) 407var refKind = syntaxFacts.GetRefKindOfArgument(argument);
src\Analyzers\Core\CodeFixes\AddParameter\AddParameterService.cs (2)
81RefKind refKind, 228RefKind refKind,
src\Analyzers\Core\CodeFixes\GenerateConstructor\AbstractGenerateConstructorService.State.cs (1)
40private ImmutableArray<RefKind> _parameterRefKinds;
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateDeconstructMethodService.State.cs (1)
76refKind: RefKind.None,
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateMethodService.State.cs (1)
254refKind: RefKind.None,
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateParameterizedMemberService.MethodSignatureInfo.cs (2)
25protected override RefKind DetermineRefKind(CancellationToken cancellationToken) 31protected override ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken)
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateParameterizedMemberService.SignatureInfo.cs (2)
43protected abstract RefKind DetermineRefKind(CancellationToken cancellationToken); 58protected abstract ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken);
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.CodeAction.cs (4)
26private readonly RefKind _refKind; 36RefKind refKind) 62var setAccessor = _isReadonly || _refKind != RefKind.None 117return _state.TypeToGenerateIn.TypeKind != TypeKind.Interface && _refKind != RefKind.None
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.cs (8)
144document, state, generateProperty: false, isReadonly: false, isConstant: true, refKind: RefKind.None)); 158document, state, generateProperty: false, isReadonly: true, isConstant: false, refKind: RefKind.None)); 172document, state, generateProperty: false, isReadonly: false, isConstant: false, refKind: RefKind.None)); 220parameter.RefKind is RefKind.Out || 245private static RefKind GetRefKindFromContext(State state) 249return RefKind.Ref; 253return RefKind.RefReadOnly; 257return RefKind.None;
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.GenerateParameterCodeAction.cs (1)
49RefKind.None,
src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator_DisposePattern.cs (1)
198g.Argument(DisposingName, RefKind.None, g.TrueLiteralExpression())))));
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Microsoft.CodeAnalysis.CSharp (1949)
Binder\Binder.IdentifierUsedAsValueFinder.cs (2)
180unboundLambda.HasExplicitReturnType(out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out TypeWithAnnotations returnType); 187ImmutableArray<RefKind>.Empty,
Binder\Binder.QueryUnboundLambdaState.cs (3)
38public override bool HasExplicitReturnType(out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out TypeWithAnnotations returnType) 50public override RefKind RefKind(int index) { return Microsoft.CodeAnalysis.RefKind.None; }
Binder\Binder.ValueChecks.cs (122)
52Method is { RefKind: not RefKind.None, ReturnType: { } returnType } && 128public ImmutableArray<RefKind> ArgumentRefKindsOpt; 262public static MethodInvocationInfo FromInlineArrayConversion(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 308public static MethodInvocationInfo FromInlineArrayAccess(SignatureOnlyMethodSymbol equivalentSignatureMethod, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds, bool hasAnyErrors) 404internal RefKind RefKind { get; } 406internal EscapeArgument(ParameterSymbol? parameter, BoundExpression argument, RefKind refKind, bool isArgList = false) 414public void Deconstruct(out ParameterSymbol? parameter, out BoundExpression argument, out RefKind refKind) 613if (indexerAccess.Indexer.RefKind != RefKind.None) 636var useSetAccessor = coreValueKind == BindValueKind.Assignable && indexerAccess.Indexer.RefKind != RefKind.Ref; 645ArrayBuilder<RefKind>? refKindsBuilderOpt; 648refKindsBuilderOpt = ArrayBuilder<RefKind>.GetInstance(accessorForDefaultArguments.ParameterCount); 1288if (localSymbol.RefKind == RefKind.RefReadOnly || 1289(localSymbol.RefKind == RefKind.None && !localSymbol.IsWritableVariable)) 1297if (localSymbol.RefKind == RefKind.None) 1329if (localSymbol.RefKind == RefKind.None) 1370if (parameterSymbol.RefKind is RefKind.In or RefKind.RefReadOnlyParameter && RequiresAssignableVariable(valueKind)) 1375else if (parameterSymbol.RefKind == RefKind.None && RequiresRefAssignableVariable(valueKind)) 1381Debug.Assert(parameterSymbol.RefKind != RefKind.None || !RequiresRefAssignableVariable(valueKind)); 1385if (parameterSymbol.RefKind == RefKind.None && 1389Debug.Assert(backingField.RefKind == RefKind.None); 1394Debug.Assert(backingField.RefKind == RefKind.None); 1484{ RefKind: RefKind.Out, UseUpdatedEscapeRules: true } => SafeContext.ReturnOnly, 1496{ RefKind: RefKind.None } => SafeContext.CurrentMethod, 1498{ HasUnscopedRefAttribute: true, UseUpdatedEscapeRules: true, RefKind: RefKind.Out } => SafeContext.ReturnOnly, 1531Debug.Assert(parameterSymbol.RefKind == RefKind.None || isRefScoped || refSafeToEscape.IsReturnOnly); 1581if ((fieldSymbol.RefKind == RefKind.None ? RequiresAssignableVariable(valueKind) : RequiresRefAssignableVariable(valueKind)) && 1593case RefKind.None: 1595case RefKind.Ref: 1597case RefKind.RefReadOnly: 1617case RefKind.None: 1620case RefKind.Ref: 1621case RefKind.RefReadOnly: 1641case RefKind.None: 1643case RefKind.Ref: 1644case RefKind.RefReadOnly: 1744if (fieldSymbol.RefKind != RefKind.None) 1768if (fieldSymbol.RefKind != RefKind.None) 1904if (RequiresVariable(valueKind) && methodSymbol.RefKind == RefKind.None) 1919if (RequiresAssignableVariable(valueKind) && methodSymbol.RefKind == RefKind.RefReadOnly) 1950propertySymbol.RefKind == RefKind.None) 1974if (RequiresAssignableVariable(valueKind) && propertySymbol.RefKind == RefKind.RefReadOnly) 1980var requiresSet = RequiresAssignableVariable(valueKind) && propertySymbol.RefKind == RefKind.None; 2049var requiresGet = !RequiresAssignmentOnly(valueKind) || propertySymbol.RefKind != RefKind.None; 2313(param is { RefKind: not RefKind.None, Type: { } type } && type.IsRefLikeOrAllowsRefLikeType())) && 2392result.ArgumentRefKindsOpt = [RefKind.None, .. methodInvocationInfo.ArgumentRefKindsOpt]; 2479var valid = effectiveRefKind != RefKind.None && isRefEscape ? 2541(param is { RefKind: not RefKind.None, Type: { } type } && type.IsRefLikeOrAllowsRefLikeType())) && 2672var refKind = parameter?.RefKind ?? RefKind.None; 2677if (refKind == RefKind.None && 2678parameter?.RefKind is RefKind.In or RefKind.RefReadOnlyParameter) 2713if (getArgument.RefKind == RefKind.Ref) 2719if (setArgument.RefKind == RefKind.Ref) 2735return new EscapeArgument(parameter: null, receiver, RefKind.None); 2738var refKind = RefKind.None; 2758ImmutableArray<RefKind> argRefKindsOpt, 2765var refKind = argRefKindsOpt.IsDefault ? RefKind.None : argRefKindsOpt[argIndex]; 2768if (refKind == RefKind.Ref && mixableArguments is not null) 2907return parameter.RefKind == RefKind.Ref && 2978if (refKind != RefKind.None) 2991if (parameter.Type.IsRefLikeOrAllowsRefLikeType() && parameter.RefKind != RefKind.Out && GetParameterValEscapeLevel(parameter) is { } valEscapeLevel) 2998if (parameter.RefKind != RefKind.None && GetParameterRefEscapeLevel(parameter) is { } refEscapeLevel) 3062if (parameter.RefKind != RefKind.None && !parameter.IsThis) 3332Debug.Assert(underlyingParameter.RefKind != RefKind.Out); // Shouldn't get here for a constructor 3342public override RefKind RefKind 3346if (_underlyingParameter.RefKind is not RefKind.None and var underlyingRefKind) 3353return RefKind.None; 3358return RefKind.Ref; 3568Debug.Assert(field.RefKind == RefKind.None ? RequiresAssignableVariable(kind) : RequiresRefAssignableVariable(kind)); 3770if (methodSymbol.RefKind == RefKind.None) 3785if (methodSymbol.RefKind == RefKind.None) 3830if (methodSymbol.RefKind == RefKind.None) 3850Debug.Assert(GetInlineArrayAccessEquivalentSignatureMethod(elementAccess, out _, out _).RefKind == RefKind.None); 3855ImmutableArray<RefKind> refKinds; 3858Debug.Assert(equivalentSignatureMethod.RefKind != RefKind.None); 3889conversion.Conversion.Method.RefKind == RefKind.None)); 3896unaryMethod.RefKind == RefKind.None)); 3903binaryMethod.RefKind == RefKind.None)); 3909logicalOperator.LogicalOperator.RefKind == RefKind.None)); 3916compoundMethod.RefKind == RefKind.None)); 3923incrementMethod.RefKind == RefKind.None)); 4056if (methodSymbol.RefKind == RefKind.None) 4075if (indexerSymbol.RefKind == RefKind.None) 4099if (indexerSymbol.RefKind == RefKind.None) 4123if (methodSymbol.RefKind == RefKind.None) 4147Debug.Assert(GetInlineArrayAccessEquivalentSignatureMethod(elementAccess, out _, out _).RefKind == RefKind.None); 4152ImmutableArray<RefKind> refKinds; 4155Debug.Assert(equivalentSignatureMethod.RefKind != RefKind.None); 4170if (signature.RefKind == RefKind.None) 4187if (propertySymbol.RefKind == RefKind.None) 4227conversion.Conversion.Method.RefKind == RefKind.None); 4234unaryMethod.RefKind == RefKind.None)); 4241binaryMethod.RefKind == RefKind.None)); 4247logicalOperator.LogicalOperator.RefKind == RefKind.None)); 4254compoundMethod.RefKind == RefKind.None)); 4261incrementMethod.RefKind == RefKind.None)); 4480ImmutableArray<RefKind> refKinds; 4565ImmutableArray<RefKind> refKinds; 4756if (constructMethod is not { Parameters: [{ RefKind: RefKind.None } parameter] }) 4914var accessorKind = property.RefKind == RefKind.None ? AccessorKind.Set : AccessorKind.Get; 5174ImmutableArray<RefKind> refKinds; 5298ImmutableArray<RefKind> refKinds; 5605private SignatureOnlyMethodSymbol GetInlineArrayAccessEquivalentSignatureMethod(BoundInlineArrayAccess elementAccess, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5607RefKind resultRefKind; 5608RefKind parameterRefKind; 5619resultRefKind = RefKind.None; 5620parameterRefKind = RefKind.None; 5624resultRefKind = elementAccess.GetItemOrSliceHelper is WellKnownMember.System_ReadOnlySpan_T__get_Item ? RefKind.In : RefKind.Ref; 5633resultRefKind = RefKind.None; 5634parameterRefKind = elementAccess.GetItemOrSliceHelper is WellKnownMember.System_ReadOnlySpan_T__Slice_Int_Int ? RefKind.In : RefKind.Ref; 5667private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundConversion conversion, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5673private SignatureOnlyMethodSymbol GetInlineArrayConversionEquivalentSignatureMethod(BoundExpression inlineArray, TypeSymbol resultType, out ImmutableArray<BoundExpression> arguments, out ImmutableArray<RefKind> refKinds) 5679RefKind parameterRefKind = resultType.OriginalDefinition.Equals(_compilation.GetWellKnownType(WellKnownType.System_ReadOnlySpan_T), TypeCompareKind.AllIgnoreOptions) ? RefKind.In : RefKind.Ref; 5694RefKind.None,
Binder\Binder_AnonymousTypes.cs (1)
96RefKind.None,
Binder\Binder_Attributes.cs (4)
252if (attributeConstructor.Parameters.Any(static p => p.RefKind is RefKind.In or RefKind.RefReadOnlyParameter)) 484BindArgumentExpression(diagnostics, argument.Expression, RefKind.None, allowArglist: false), 486refKind: RefKind.None);
Binder\Binder_Conversions.cs (8)
1530parameterRefKinds: out ImmutableArray<RefKind> parameterRefKinds); 1881if (method.Parameters is not [{ RefKind: RefKind.None, Type: var parameterType }] 2890{ RefKind: RefKind.None, ReturnsVoid: true } => method.ReturnsVoid, 2934RefKind sourceRefKind, RefKind destinationRefKind, bool checkingReturns, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 2939: (sourceRefKind == RefKind.None) != (destinationRefKind == RefKind.None)) 2944if (sourceRefKind != RefKind.None)
Binder\Binder_Crefs.cs (7)
282refKind: RefKind.None, 313refKind: RefKind.None, 995refKind: RefKind.None, 1012refKind: RefKind.None, 1136RefKind refKind = parameter.RefKindKeyword.Kind().GetRefKind(); 1137if (refKind == RefKind.Ref && parameter.ReadOnlyKeyword.IsKind(SyntaxKind.ReadOnlyKeyword)) 1140refKind = RefKind.RefReadOnlyParameter;
Binder\Binder_Deconstruct.cs (2)
647analyzedArguments.RefKinds.Add(RefKind.Out); 688if (parameters[i].RefKind != RefKind.Out)
Binder\Binder_Expressions.cs (65)
485if (field is { IsStatic: false, RefKind: RefKind.None, ContainingSymbol: SourceMemberContainerTypeSymbol { PrimaryConstructor: { } primaryConstructor } } && 497RefKind refKind, 2032private bool IsBadLocalOrParameterCapture(Symbol symbol, TypeSymbol type, RefKind refKind) 2034if (refKind != RefKind.None || type.IsRestrictedType()) 2105if (parameter.RefKind != RefKind.None) 2125(parameter.RefKind != RefKind.None || parameter.Type.IsRestrictedType()) && 2128if (parameter.RefKind != RefKind.None) 2142else if (primaryCtor is { ThisParameter.RefKind: not RefKind.None } && 2295if (localSymbol.RefKind == RefKind.None && type.IsRestrictedType(ignoreSpanLikeTypes: true)) 2601if (thisSymbol is not null && thisSymbol.ContainingSymbol != ContainingMemberOrLambda && thisSymbol.RefKind != RefKind.None) 3155RefKind origRefKind = argumentSyntax.RefOrOutKeyword.Kind().GetRefKind(); 3159RefKind refKind = origRefKind == RefKind.None || RefMustBeObeyed(isDelegateCreation, argumentSyntax) ? origRefKind : RefKind.None; 3172if (!hadError && isDelegateCreation && origRefKind != RefKind.None && result.Arguments.Count == 1) 3179var requiredValueKind = origRefKind == RefKind.In ? BindValueKind.ReadonlyRef : BindValueKind.RefOrOut; 3191private BoundExpression BindArgumentValue(BindingDiagnosticBag diagnostics, ArgumentSyntax argumentSyntax, bool allowArglist, RefKind refKind) 3392RefKind refKind) 3400if (refKind != RefKind.None) 3410result.RefKinds.Add(RefKind.None); 3458private BoundExpression BindArgumentExpression(BindingDiagnosticBag diagnostics, ExpressionSyntax argumentExpression, RefKind refKind, bool allowArglist) 3461refKind == RefKind.None ? 3463refKind == RefKind.In ? 3831var argumentRefKindsBuilder = ArrayBuilder<RefKind>.GetInstance(handlerArgumentIndexes.Length); 3841RefKind refKind; 3847refKind = RefKind.None; 3933argumentRefKindsBuilder.Add(refKind == RefKind.RefReadOnlyParameter ? RefKind.In : refKind); 3956private void CheckArgumentRefKind(RefKind argRefKind, BoundExpression argument, int arg, ParameterSymbol parameter, 3968if (argRefKind is RefKind.None or RefKind.In && parameter.RefKind == RefKind.RefReadOnlyParameter) 3980if (argRefKind == RefKind.Ref) 3982if (parameter.RefKind == RefKind.In) 3992else if (argRefKind == RefKind.None && parameter.RefKind == RefKind.RefReadOnlyParameter) 5098if (analyzedArguments.RefKind(i) is (RefKind.Ref or RefKind.Out)) 5621ArrayBuilder<RefKind> refKinds, 5814var rhsExpr = initializer.Right.CheckAndUnwrapRefExpression(diagnostics, out RefKind refKind); 5815bool isRef = refKind == RefKind.Ref; 5988ImmutableArray<RefKind> argumentRefKindsOpt = default; 8466extensionMethodArguments.RefKinds.Add(RefKind.None); 8616RefKind returnRefKind, 8698RefKind returnRefKind, 8808RefKind returnRefKind, 9071fieldSymbol.RefKind != RefKind.None) 10052RefKind refKind = analyzedArguments.RefKind(i); 10053if (refKind != RefKind.None) 10152default(ImmutableArray<RefKind>), 10270ImmutableArray<RefKind> argumentRefKinds = analyzedArguments.RefKinds.ToImmutableOrNull(); 10521original.Parameters[0] is { Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.None }) 10622original.Parameters[0] is { Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.None } && 10623original.Parameters[1] is { Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.None }; 10686getMethod.RefKind == RefKind.None && 10730RefKind returnRefKind = default, 10754RefKind returnRefKind = default, 10786RefKind returnRefKind = default, 10857RefKind returnRefKind = default, 11323RefKind? returnRefKindOverride = null, 11330var returnRefKind = returnRefKindOverride ?? methodSymbol.RefKind; 11348if (returnsVoid && returnRefKind != RefKind.None) 11362returnRefKind == RefKind.None && 11364(parameterRefKinds.IsDefault || parameterRefKinds.All(refKind => refKind == RefKind.None)) && 11398parameterRefKinds.IsDefault ? RefKind.None : parameterRefKinds[i],
Binder\Binder_InterpolatedString.cs (8)
560ImmutableArray<RefKind> additionalConstructorRefKinds = default) 580ImmutableArray<RefKind> additionalConstructorRefKinds = default) 606ImmutableArray<RefKind> additionalConstructorRefKinds) 639ImmutableArray<RefKind> additionalConstructorRefKinds) 715var refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(constructorArgumentLength); 716refKindsBuilder.Add(RefKind.None); 717refKindsBuilder.Add(RefKind.None); 727refKindsBuilder.Add(RefKind.Out);
Binder\Binder_Invocation.cs (15)
301else if (analyzedArguments.RefKind(i) == RefKind.None) 308case RefKind.None: 309case RefKind.Ref: 320ImmutableArray<RefKind> refKinds = analyzedArguments.RefKinds.ToImmutableOrNull(); 555ImmutableArray<RefKind> refKinds, 574if (refKinds[argIndex] == RefKind.In) 1271if (receiverParameter.RefKind == RefKind.Ref) 1284analyzedArguments.RefKinds[0] = RefKind.Ref; 1287else if (receiverParameter.RefKind == RefKind.In) 1290Debug.Assert(analyzedArguments.RefKind(0) == RefKind.None); 1372CheckArgumentRefKind(RefKind.None, receiver, arg: 0, extensionParameter, invokedAsExtensionMethod: true, diagnostics); 1374if (extensionParameter.RefKind == RefKind.Ref) 1533ArrayBuilder<RefKind>? argumentRefKindsBuilder, 1618argumentRefKindsBuilder.Add(RefKind.None); 1643argumentRefKindsBuilder.Add(RefKind.None);
Binder\Binder_Lambda.cs (9)
47ImmutableArray<RefKind> refKinds = default; 51RefKind returnRefKind = RefKind.None; 129var refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(); 182var refKind = ParameterHelpers.GetModifiers(p.Modifiers, ignoreParams: false, out _, out var paramsKeyword, out _, out var scope); 222if (refKindsBuilder.Any(r => r != RefKind.None)) 292private (RefKind, ImmutableArray<CustomModifier> refCustomModifiers, TypeWithAnnotations) BindExplicitLambdaReturnType(TypeSyntax syntax, BindingDiagnosticBag diagnostics) 297syntax = syntax.SkipScoped(out _).SkipRefInLocalOrReturn(diagnostics, out RefKind refKind); 316if (refKind == RefKind.RefReadOnly)
Binder\Binder_Operators.cs (15)
453analyzedArguments.RefKinds.Add(RefKind.Ref); 454analyzedArguments.RefKinds.Add(RefKind.None); 3546analyzedArguments.RefKinds.Add(RefKind.Ref); 3847(parameterCount == 0 || method.Parameters[0].RefKind is RefKind.None or RefKind.In); 3909if (!((extensionParameter.Type.IsValueType && extensionParameter.RefKind == RefKind.Ref) || 3910(extensionParameter.Type.IsReferenceType && extensionParameter.RefKind == RefKind.None))) 4244if (parameterSymbol.RefKind != RefKind.None) 4275return localSymbol.RefKind != RefKind.None; 5877var whenTrue = node.WhenTrue.CheckAndUnwrapRefExpression(diagnostics, out var whenTrueRefKind); 5878var whenFalse = node.WhenFalse.CheckAndUnwrapRefExpression(diagnostics, out var whenFalseRefKind); 5880var isRef = whenTrueRefKind == RefKind.Ref && whenFalseRefKind == RefKind.Ref; 5883if (whenFalseRefKind == RefKind.Ref) 5888if (whenTrueRefKind == RefKind.Ref)
Binder\Binder_Query.cs (3)
707return lambdaBodyBinder.CreateBlockFromExpression(node, ImmutableArray<LocalSymbol>.Empty, RefKind.None, construction, null, d); 787return this.CreateBlockFromExpression(expression, locals, RefKind.None, result, expression, diagnostics); 829new AnonymousTypeField(fieldName, fieldValue.Syntax.Location, TypeWithAnnotations.Create(TypeOrError(fieldValue)), RefKind.None, ScopedKind.None);
Binder\Binder_Statements.cs (48)
868internal BoundExpression BindInferredVariableInitializer(BindingDiagnosticBag diagnostics, RefKind refKind, EqualsValueClauseSyntax initializer, 917RefKind variableRefKind, 922RefKind expressionRefKind = RefKind.None; 924if (variableRefKind == RefKind.None) 927if (expressionRefKind == RefKind.Ref) 935valueKind = variableRefKind == RefKind.RefReadOnly 944else if (expressionRefKind != RefKind.Ref) 1005if (localSymbol.RefKind != RefKind.None) 1071localSymbol.RefKind != RefKind.None ? ConversionForAssignmentFlags.RefAssignment : ConversionForAssignmentFlags.None); 1420var rhsExpr = node.Right.CheckAndUnwrapRefExpression(diagnostics, out var refKind); 1421var isRef = refKind == RefKind.Ref; 1450var lhsRefKind = boundLeft.GetRefKind(); 1451if (lhsRefKind is RefKind.Ref or RefKind.Out) 2184var delegateRefKind = delegateParameters[i].RefKind; 2185var lambdaRefKind = anonymousFunction.RefKind(i); 2193if (delegateRefKind == RefKind.None) 2242var lambdaRefKind = anonymousFunction.RefKind(i); 2244var delegateRefKind = delegateParameters[i].RefKind; 3012protected virtual TypeSymbol GetCurrentReturnType(out RefKind refKind) 3029refKind = RefKind.None; 3035var refKind = RefKind.None; 3053RefKind sigRefKind; 3064if (refKind != RefKind.None) 3076else if ((object)retType != null && (refKind != RefKind.None) != (sigRefKind != RefKind.None)) 3078var errorCode = refKind != RefKind.None 3176RefKind returnRefKind, 3186Debug.Assert(returnRefKind == RefKind.None); 3208if (returnRefKind != RefKind.None) 3224RefKind unusedRefKind; 3494internal BoundBlock CreateBlockFromExpression(CSharpSyntaxNode node, ImmutableArray<LocalSymbol> locals, RefKind refKind, BoundExpression expression, ExpressionSyntax expressionSyntax, BindingDiagnosticBag diagnostics) 3496RefKind returnRefKind; 3501if (IsInAsyncMethod() && refKind != RefKind.None) 3510if ((refKind != RefKind.None) != (returnRefKind != RefKind.None) && expression.Kind != BoundKind.ThrowExpression) 3512var errorCode = refKind != RefKind.None 3517statement = new BoundReturnStatement(syntax, RefKind.None, expression, @checked: CheckOverflowAtRuntime) { WasCompilerGenerated = true }; 3621RefKind refKind; 3637RefKind refKind; 3650return bodyBinder.CreateBlockFromExpression(body, bodyBinder.GetDeclaredLocalsForScope(body), RefKind.None, expression, body, diagnostics); 3653private BindValueKind GetRequiredReturnValueKind(RefKind refKind) 3656if (refKind != RefKind.None) 3658GetCurrentReturnType(out var sigRefKind); 3659requiredValueKind = sigRefKind == RefKind.Ref ? 4010argumentRefKindsOpt: ImmutableArray<RefKind>.Empty,
Binder\ExecutableCodeBinder.cs (3)
115if (parameter.RefKind != RefKind.None) 141RefKind refKind = iterator.RefKind; 146if (refKind != RefKind.None)
Binder\ForEachLoopBinder.cs (13)
246if (getEnumeratorMethod.ParameterRefKinds is { IsDefault: false } refKinds && refKinds[0] == RefKind.Ref) 252else if (getEnumeratorMethod.IsExtensionBlockMember() && getEnumeratorMethod.ContainingType.ExtensionParameter.RefKind == RefKind.Ref) 333if (local.RefKind != RefKind.None) 346case RefKind.None: 349case RefKind.Ref: 352case RefKind.RefReadOnly: 484if (elementConversionClassification.Kind != ConversionKind.Identity && IterationVariable.RefKind is RefKind.Ref or RefKind.RefReadOnly) 884builder.CurrentPropertyGetter?.RefKind == (wellKnownSpan == WellKnownType.System_ReadOnlySpan_T ? RefKind.RefReadOnly : RefKind.Ref)) || 1211patternDisposeMethod.ParameterRefKinds.All(static refKind => refKind is RefKind.None or RefKind.In or RefKind.RefReadOnlyParameter));
Binder\InMethodBinder.cs (5)
128RefKind refKind = _methodSymbol.RefKind; 147RefKind refKind, TypeSymbol returnType, Location errorLocation, BindingDiagnosticBag diagnostics) 149if (refKind == RefKind.None && returnType.Kind == SymbolKind.NamedType) 178internal static bool IsAsyncStreamInterface(CSharpCompilation compilation, RefKind refKind, TypeSymbol returnType) 180if (refKind == RefKind.None && returnType.Kind == SymbolKind.NamedType)
Binder\LockBinder.cs (1)
80if (enterScopeMethod is not { ReturnsVoid: false, RefKind: RefKind.None })
Binder\RefSafetyAnalysis.cs (5)
553Debug.Assert(localSymbol.RefKind == RefKind.None || 567if (localSymbol.RefKind != RefKind.None) 584ValidateEscape(expr, SafeContext.ReturnOnly, node.RefKind != RefKind.None, _diagnostics); 1257ImmutableArray<RefKind> refKinds; 1278AddLocalScopes(local, refEscapeScope: local.RefKind == RefKind.None ? _localScopeDepth : collectionEscape, valEscapeScope: collectionEscape);
Binder\Semantics\Conversions\ConversionsBase.cs (4)
1485if (anonymousFunction.HasExplicitReturnType(out var refKind, refCustomModifiers: out _, out var returnType)) 1569if (delegateParameters[p].RefKind == RefKind.Out) 3413bool hasConversion(RefKind refKind, TypeWithAnnotations sourceType, TypeWithAnnotations destinationType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) 3417case RefKind.None:
Binder\Semantics\Operators\BinaryOperatorOverloadResolution.cs (8)
1333if (op1.LeftRefKind == RefKind.None && op2.LeftRefKind == RefKind.In) 1337else if (op2.LeftRefKind == RefKind.None && op1.LeftRefKind == RefKind.In) 1346if (op1.RightRefKind == RefKind.None && op2.RightRefKind == RefKind.In) 1357else if (op2.RightRefKind == RefKind.None && op1.RightRefKind == RefKind.In)
Binder\Semantics\Operators\BinaryOperatorSignature.cs (4)
92public RefKind LeftRefKind 108return RefKind.None; 112public RefKind RightRefKind 130return RefKind.None;
Binder\Semantics\Operators\UnaryOperatorOverloadResolution.cs (4)
486if (op1.RefKind == RefKind.None && op2.RefKind == RefKind.In) 490else if (op2.RefKind == RefKind.None && op1.RefKind == RefKind.In)
Binder\Semantics\Operators\UnaryOperatorSignature.cs (2)
46public RefKind RefKind 62return RefKind.None;
Binder\Semantics\OverloadResolution\AnalyzedArguments.cs (6)
17public readonly ArrayBuilder<RefKind> RefKinds; 25this.RefKinds = new ArrayBuilder<RefKind>(32); 76public RefKind RefKind(int i) 78return RefKinds.Count > 0 ? RefKinds[i] : Microsoft.CodeAnalysis.RefKind.None; 101if ((object?)argument.Type != null && argument.Type.IsDynamic() && (!hasRefKinds || RefKinds[i] == Microsoft.CodeAnalysis.RefKind.None)) 149ImmutableArray<RefKind> argumentRefKindsOpt,
Binder\Semantics\OverloadResolution\MethodTypeInference.cs (10)
139private readonly ImmutableArray<RefKind> _formalParameterRefKinds; 277ImmutableArray<RefKind> formalParameterRefKinds, // Optional; assume all value if missing. 330ImmutableArray<RefKind> formalParameterRefKinds, 441private RefKind GetRefKind(int index) 444return _formalParameterRefKinds.IsDefault ? RefKind.None : _formalParameterRefKinds[index]; 1507RefKind delegateRefKind, 2451if ((sourceParam.Type.IsReferenceType || sourceParam.Type.IsFunctionPointer()) && sourceParam.RefKind == RefKind.None) 2461if ((sourceSignature.ReturnType.IsReferenceType || sourceSignature.ReturnType.IsFunctionPointer()) && sourceSignature.RefKind == RefKind.None) 2801if ((sourceParam.Type.IsReferenceType || sourceParam.Type.IsFunctionPointer()) && sourceParam.RefKind == RefKind.None) 2811if ((sourceSignature.ReturnType.IsReferenceType || sourceSignature.ReturnType.IsFunctionPointer()) && sourceSignature.RefKind == RefKind.None)
Binder\Semantics\OverloadResolution\OverloadResolution.cs (83)
145RefKind returnRefKind = default, 193RefKind returnRefKind = default, 434RefKind returnRefKind, 850RefKind? returnRefKind, 875else if (returnRefKind == RefKind.None) 2177var type1 = getParameterTypeAndRefKind(i, m1.Result, m1LeastOverriddenParameters, m1.Result.ParamsElementTypeOpt, m1.LeastOverriddenMember, out RefKind parameter1RefKind); 2179var type2 = getParameterTypeAndRefKind(i, m2.Result, m2LeastOverriddenParameters, m2.Result.ParamsElementTypeOpt, m2.LeastOverriddenMember, out RefKind parameter2RefKind); 2569TypeWithAnnotations paramsElementTypeOpt, TMember member, out RefKind parameterRefKind) 2634RefKind refKind1 = GetParameterBetternessRefKind(p1, m1.Member); 2635RefKind refKind2 = GetParameterBetternessRefKind(p2, m2.Member); 2637if (refKind1 == RefKind.None && isAcceptableRefMismatch(refKind2, isInterpolatedStringHandlerConversion)) 2648else if (refKind2 == RefKind.None && isAcceptableRefMismatch(refKind1, isInterpolatedStringHandlerConversion)) 2665static bool isAcceptableRefMismatch(RefKind refKind, bool isInterpolatedStringHandlerConversion) 2669RefKind.In or RefKind.RefReadOnlyParameter => true, 2670RefKind.Ref when isInterpolatedStringHandlerConversion => true, 2676private static RefKind GetParameterBetternessRefKind<TMember>(ParameterSymbol parameter, TMember member) where TMember : Symbol 2683return isExtensionParameterOfStaticExtensionMember ? RefKind.None : parameter.RefKind; 2881RefKind refKind1, 2884RefKind refKind2, 2909Debug.Assert(refKind1 == RefKind.None || refKind1 == RefKind.Ref); 2910Debug.Assert(refKind2 == RefKind.None || refKind2 == RefKind.Ref); 2914if (refKind1 == RefKind.None) 2923else if (refKind1 == RefKind.Ref) 3847ArrayBuilder<RefKind> argumentRefKinds, 3853out ImmutableArray<RefKind> parameterRefKinds) 3869internal readonly ImmutableArray<RefKind> ParameterRefKinds; 3872internal EffectiveParameters(ImmutableArray<TypeWithAnnotations> types, ImmutableArray<RefKind> refKinds, int firstParamsElementIndex) 3886ArrayBuilder<RefKind> argumentRefKinds, 3907hasSomeRefKinds |= member.ContainingType.ExtensionParameter.RefKind != RefKind.None; 3918ArrayBuilder<RefKind> refs = null; 3932RefKind argRefKind = hasAnyRefArg ? argumentRefKinds[arg] : RefKind.None; 3933RefKind paramRefKind = GetEffectiveParameterRefKind(parameter, argRefKind, options, binder, ref hasAnyRefOmittedArgument); 3937if (paramRefKind != RefKind.None) 3939refs = ArrayBuilder<RefKind>.GetInstance(arg, RefKind.None); 3949var refKinds = refs != null ? refs.ToImmutableAndFree() : default(ImmutableArray<RefKind>); 3953private static RefKind GetEffectiveParameterRefKind( 3955RefKind argRefKind, 3960var paramRefKind = parameter.RefKind; 3969if (paramRefKind == RefKind.In) 3971if (argRefKind == RefKind.None) 3973return RefKind.None; 3976if (argRefKind == RefKind.Ref && binder.Compilation.IsFeatureEnabled(MessageID.IDS_FeatureRefReadonlyParameters)) 3978return RefKind.Ref; 3981else if (paramRefKind == RefKind.RefReadOnlyParameter && argRefKind is RefKind.None or RefKind.Ref or RefKind.In) 3994if ((options & Options.AllowRefOmittedArguments) != 0 && paramRefKind == RefKind.Ref && argRefKind == RefKind.None && !binder.InAttributeArgument) 3997return RefKind.None; 4006internal static bool AreRefsCompatibleForMethodConversion(RefKind candidateMethodParameterRefKind, RefKind delegateParameterRefKind, CSharpCompilation compilation) 4016(RefKind.RefReadOnlyParameter, RefKind.Ref) or 4017(RefKind.RefReadOnlyParameter, RefKind.In) or 4018(RefKind.In, RefKind.RefReadOnlyParameter)) 4024(candidateMethodParameterRefKind, delegateParameterRefKind) is (RefKind.In, RefKind.Ref)) 4036ArrayBuilder<RefKind> argumentRefKinds, 4047ArrayBuilder<RefKind> argumentRefKinds, 4055var refs = ArrayBuilder<RefKind>.GetInstance(); 4085var argRefKind = hasAnyRefArg ? argumentRefKinds[arg] : RefKind.None; 4086var paramRefKind = GetEffectiveParameterRefKind(parameter, argRefKind, options, binder, ref hasAnyRefOmittedArgument); 4089if (paramRefKind != RefKind.None) 4095var refKinds = anyRef ? refs.ToImmutable() : default(ImmutableArray<RefKind>); 4567RefKind argumentRefKind = arguments.RefKind(argumentPosition); 4568RefKind parameterRefKind = parameters.ParameterRefKinds.IsDefault ? RefKind.None : parameters.ParameterRefKinds[argumentPosition]; 4573if (argumentRefKind == RefKind.None) 4575if (parameterRefKind == RefKind.Ref) 4594&& parameterRefKind == RefKind.Ref 4690RefKind argRefKind, 4692RefKind parRefKind, 4729Debug.Assert(argRefKind != RefKind.None); 4735if (argRefKind == RefKind.None || hasInterpolatedStringRefMismatch)
Binder\Semantics\OverloadResolution\OverloadResolutionResult.cs (21)
219RefKind? returnRefKind = null, 1152if (parameters[i].RefKind != RefKind.None) 1221RefKind refArg = arguments.RefKind(arg); 1222RefKind refParameter = parameter.RefKind; 1226Debug.Assert(refArg == RefKind.None); 1227if (refParameter == RefKind.Ref || refParameter == RefKind.In) 1285!(refArg == RefKind.None && refParameter == RefKind.In) && 1286!(refArg == RefKind.Ref && refParameter == RefKind.In && binder.Compilation.IsFeatureEnabled(MessageID.IDS_FeatureRefReadonlyParameters)) && 1287!(refParameter == RefKind.RefReadOnlyParameter && refArg is RefKind.None or RefKind.Ref or RefKind.In)) 1292refParameter != RefKind.Out) 1297else if (refArg == RefKind.Ref && refParameter == RefKind.In && !binder.Compilation.IsFeatureEnabled(MessageID.IDS_FeatureRefReadonlyParameters)) 1308else if (refParameter is RefKind.None or RefKind.In or RefKind.RefReadOnlyParameter)
Binder\WithLambdaParametersBinder.cs (1)
47protected override TypeSymbol GetCurrentReturnType(out RefKind refKind)
BoundTree\BoundExpression.cs (1)
547ImmutableArray<RefKind> newRefKinds,
BoundTree\BoundExpressionExtensions.cs (8)
20public static RefKind GetRefKind(this BoundExpression node) 54return RefKind.Ref; 56return RefKind.RefReadOnly; 60return RefKind.None; 66return RefKind.None; 72EventSymbol => RefKind.None, 77return RefKind.None; 146delegateType is { DelegateInvokeMethod.OriginalDefinition: SynthesizedDelegateInvokeMethod { RefKind: RefKind.RefReadOnly } })
BoundTree\BoundNewT.cs (1)
15public override ImmutableArray<RefKind> ArgumentRefKindsOpt => default;
BoundTree\BoundNoPiaObjectCreationExpression.cs (1)
15public override ImmutableArray<RefKind> ArgumentRefKindsOpt => default;
BoundTree\BoundObjectCreationExpression.cs (3)
13ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, 18public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, 25ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt,
BoundTree\BoundObjectCreationExpressionBase.cs (1)
15public abstract ImmutableArray<RefKind> ArgumentRefKindsOpt { get; }
BoundTree\BoundReturnStatement.cs (2)
13Debug.Assert(RefKind is RefKind.None or RefKind.Ref); // We assume that 'ref readonly' cannot be result of a return inference for a lambda.
BoundTree\Constructors.cs (28)
63fieldSymbol.RefKind != RefKind.None || 93ImmutableArray<RefKind> argumentRefKindsOpt, 111ImmutableArray<RefKind> argumentRefKindsOpt, 127ImmutableArray<RefKind> refKinds, 190public static BoundCall Synthesized(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt = default) 199var parameterRefKind = method.ParameterRefKinds.IsDefault ? RefKind.None : method.ParameterRefKinds[i]; 200var argumentRefKind = argumentRefKindsOpt.IsDefault ? RefKind.None : argumentRefKindsOpt[i]; 201Debug.Assert(argumentRefKind is RefKind.None or RefKind.Ref or RefKind.In or RefKind.Out or RefKindExtensions.StrictIn && 205RefKind.In => argumentRefKind == RefKindExtensions.StrictIn, 206RefKind.RefReadOnlyParameter => argumentRefKind is RefKind.In or RefKindExtensions.StrictIn, 237static ImmutableArray<RefKind> getArgumentRefKinds(MethodSymbol method) 241if (!result.IsDefaultOrEmpty && result.Contains(RefKind.RefReadOnlyParameter)) 243var builder = ArrayBuilder<RefKind>.GetInstance(result.Length); 245foreach (var refKind in result) 247builder.Add(refKind == RefKind.RefReadOnlyParameter ? RefKind.In : refKind); 261: this(syntax, constructor, ImmutableArray.Create<BoundExpression>(arguments), default(ImmutableArray<string?>), default(ImmutableArray<RefKind>), false, default(ImmutableArray<int>), default(BitVector), null, null, constructor.ContainingType) 265: this(syntax, constructor, arguments, default(ImmutableArray<string?>), default(ImmutableArray<RefKind>), false, default(ImmutableArray<int>), default(BitVector), null, null, constructor.ContainingType) 278ImmutableArray<RefKind> refKinds, 304ImmutableArray<RefKind> argumentRefKindsOpt, 319ImmutableArray<RefKind> argumentRefKindsOpt, 567public static BoundReturnStatement Synthesized(SyntaxNode syntax, RefKind refKind, BoundExpression expression, bool hasErrors = false)
BoundTree\UnboundLambda.cs (52)
43internal readonly RefKind RefKind; 54RefKind refKind, 181ImmutableArray<RefKind> parameterRefKinds, 182RefKind refKind, 188parameterRefKinds.IsDefault ? Enumerable.Repeat(RefKind.None, parameterTypes.Length).ToImmutableArray() : parameterRefKinds, 219RefKind refKind = RefKind.None; 222RefKind rk = returnStatement.RefKind; 223if (rk != RefKind.None) 244Debug.Assert(refKind != RefKind.RefReadOnly); 410RefKind returnRefKind, 414ImmutableArray<RefKind> refKinds, 480public bool HasExplicitReturnType(out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out TypeWithAnnotations returnType) 505public RefKind RefKind(int index) { return Data.RefKind(index); } 595public abstract bool HasExplicitReturnType(out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out TypeWithAnnotations returnType); 602public abstract RefKind RefKind(int index); 677private static TypeWithAnnotations DelegateReturnTypeWithAnnotations(MethodSymbol? invokeMethod, out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers) 681refKind = CodeAnalysis.RefKind.None; 690internal (ImmutableArray<RefKind>, ArrayBuilder<ScopedKind>, ImmutableArray<TypeWithAnnotations>, bool) CollectParameterProperties() 692var parameterRefKindsBuilder = ArrayBuilder<RefKind>.GetInstance(ParameterCount); 699var refKind = RefKind(i); 757if (!HasExplicitReturnType(out var returnRefKind, refCustomModifiers: out _, out var returnType)) 821var returnType = DelegateReturnTypeWithAnnotations(invokeMethod, out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers); 840refKind == CodeAnalysis.RefKind.None && 861if (lambdaSymbol.RefKind == CodeAnalysis.RefKind.RefReadOnly) 928ImmutableArray<RefKind> parameterRefKinds, 929RefKind refKind, 945var returnType = DelegateReturnTypeWithAnnotations(invokeMethod, out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers); 978ImmutableArray<RefKind> parameterRefKinds) 980bool hasExplicitReturnType = HasExplicitReturnType(out var refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out var returnType); 1008Debug.Assert(refKind != CodeAnalysis.RefKind.RefReadOnly); 1034Debug.Assert(refKind != CodeAnalysis.RefKind.RefReadOnly); 1044ImmutableArray<RefKind> parameterRefKinds, 1046RefKind refKind, 1083public readonly ImmutableArray<RefKind> ParameterRefKinds; 1086public static readonly ReturnInferenceCacheKey Empty = new ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations>.Empty, ImmutableArray<RefKind>.Empty, null); 1088private ReturnInferenceCacheKey(ImmutableArray<TypeWithAnnotations> parameterTypes, ImmutableArray<RefKind> parameterRefKinds, NamedTypeSymbol? taskLikeReturnTypeOpt) 1149out ImmutableArray<RefKind> parameterRefKinds, 1155parameterRefKinds = ImmutableArray<RefKind>.Empty; 1164var refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(parameterCount); 1240?? rebind(ReallyInferReturnType(delegateType: null, ImmutableArray<TypeWithAnnotations>.Empty, ImmutableArray<RefKind>.Empty)); 1257ImmutableArray<RefKind> parameterRefKinds) 1260var refKind = inferredReturnType.RefKind; 1274refKind = CodeAnalysis.RefKind.None; 1488private readonly RefKind _returnRefKind; 1495private readonly ImmutableArray<RefKind> _parameterRefKinds; 1504RefKind returnRefKind, 1511ImmutableArray<RefKind> parameterRefKinds, 1537public override bool HasExplicitReturnType(out RefKind refKind, out ImmutableArray<CustomModifier> refCustomModifiers, out TypeWithAnnotations returnType) 1598public override RefKind RefKind(int index) 1601return _parameterRefKinds.IsDefault ? Microsoft.CodeAnalysis.RefKind.None : _parameterRefKinds[index]; 1635statements[0] is BoundReturnStatement { RefKind: Microsoft.CodeAnalysis.RefKind.None, ExpressionOpt: BoundExpression expr })
CodeGen\CodeGenerator.cs (1)
172var slotConstraints = _method.RefKind == RefKind.None
CodeGen\CodeGenerator_HasHome.cs (17)
88((BoundParameter)expression).ParameterSymbol.RefKind is not (RefKind.In or RefKind.RefReadOnlyParameter); 94return !((CodeGenerator.IsStackLocal(local, stackLocalsOpt) && local.RefKind == RefKind.None) || 95(!IsAnyReadOnly(addressKind) && local.RefKind == RefKind.RefReadOnly)); 98var methodRefKind = ((BoundCall)expression).Method.RefKind; 99return methodRefKind == RefKind.Ref || 100(IsAnyReadOnly(addressKind) && methodRefKind == RefKind.RefReadOnly); 104var dupRefKind = ((BoundDup)expression).RefKind; 105return dupRefKind == RefKind.Ref || 106(IsAnyReadOnly(addressKind) && dupRefKind == RefKind.RefReadOnly); 120var lhsRefKind = assignment.Left.GetRefKind(); 121return lhsRefKind == RefKind.Ref || 122(IsAnyReadOnly(addressKind) && lhsRefKind is RefKind.RefReadOnly or RefKind.RefReadOnlyParameter); 188if (field.RefKind is RefKind.Ref) 211if (field.RefKind == RefKind.RefReadOnly) 216Debug.Assert(field.RefKind == RefKind.None);
CodeGen\CodeGenerator_RefSafety.cs (7)
12/// <inheritdoc cref="MightEscapeTemporaryRefs(bool, TypeSymbol, RefKind, ParameterSymbol?, ImmutableArray{ParameterSymbol})"/> 23/// <inheritdoc cref="MightEscapeTemporaryRefs(bool, TypeSymbol, RefKind, ParameterSymbol?, ImmutableArray{ParameterSymbol})"/> 29returnRefKind: RefKind.None, 34/// <inheritdoc cref="MightEscapeTemporaryRefs(bool, TypeSymbol, RefKind, ParameterSymbol?, ImmutableArray{ParameterSymbol})"/> 64RefKind returnRefKind, 73if (used && (returnRefKind != RefKind.None || returnType.IsRefLikeOrAllowsRefLikeType())) 105else if (parameter.RefKind != RefKind.None && parameter.EffectiveScope == ScopedKind.None)
CodeGen\EmitAddress.cs (11)
36Debug.Assert(((BoundDup)expression).RefKind != RefKind.None, "taking address of a stack value?"); 123var funcPtrRefKind = funcPtrInvocation.FunctionPointer.Signature.RefKind; 124if (funcPtrRefKind == RefKind.Ref || 125(IsAnyReadOnly(addressKind) && funcPtrRefKind == RefKind.RefReadOnly)) 179var methodRefKind = call.Method.RefKind; 180return methodRefKind == RefKind.Ref || 181(IsAnyReadOnly(addressKind) && methodRefKind == RefKind.RefReadOnly); 274if (local.RefKind != RefKind.None) 480if (parameterSymbol.RefKind == RefKind.None) 554field.RefKind == RefKind.None ? 558_builder.EmitOpCode(field.RefKind == RefKind.None ? ILOpCode.Ldflda : ILOpCode.Ldfld);
CodeGen\EmitExpression.cs (59)
710RefKind refKind = expression.ArgumentRefKindsOpt.IsDefaultOrEmpty ? RefKind.None : expression.ArgumentRefKindsOpt[i]; 715private void EmitArgument(BoundExpression argument, RefKind refKind) 719case RefKind.None: 724Debug.Assert(refKind is RefKind.In or RefKind.Ref or RefKind.Out or RefKindExtensions.StrictIn); 730Debug.Assert(refKind is RefKind.In || argument.Type.IsDynamic() || argument is BoundFieldAccess { FieldSymbol.RefKind: not RefKind.None }, "passing args byref should not clone them into temps"); 738internal static AddressKind GetArgumentAddressKind(RefKind refKind) 742case RefKind.None: 745case RefKind.In: 749Debug.Assert(refKind is RefKind.Ref or RefKind.Out or RefKindExtensions.StrictIn); 790if (expression.RefKind == RefKind.None) 957private void EmitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 962Debug.Assert(parameters.All(p => p.RefKind == RefKind.None) || !argRefKindsOpt.IsDefault, "there are nontrivial parameters, so we must have argRefKinds"); 969RefKind argRefKind = GetArgumentRefKind(arguments, parameters, argRefKindsOpt, i); 978internal static RefKind GetArgumentRefKind(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt, int i) 980RefKind argRefKind; 991RefKind.In => argRefKind == RefKindExtensions.StrictIn, 992RefKind.RefReadOnlyParameter => argRefKind is RefKind.In or RefKindExtensions.StrictIn, 999Debug.Assert(parameters[i].RefKind != RefKind.RefReadOnlyParameter, 1005RefKind.RefReadOnlyParameter => RefKind.In, // should not happen, asserted above 1014argRefKind = RefKind.None; 1143if (!field.IsVolatile && !field.IsStatic && fieldAccess.ReceiverOpt.Type.IsVerifierValue() && field.RefKind == RefKind.None) 1155if (field.RefKind != RefKind.None) 1299return ((BoundParameter)receiver).ParameterSymbol.RefKind != RefKind.None; 1303return ((BoundLocal)receiver).LocalSymbol.RefKind != RefKind.None; 1312if (field.IsStatic || field.RefKind != RefKind.None) 1403bool isRefLocal = local.LocalSymbol.RefKind != RefKind.None; 1435if (parameter.ParameterSymbol.RefKind != RefKind.None) 1758var methodRefKind = call.Method.RefKind; 2241return ((BoundLocal)receiver).LocalSymbol.RefKind != RefKind.None; 2244return ((BoundParameter)receiver).ParameterSymbol.RefKind != RefKind.None; 2247return ((BoundCall)receiver).Method.RefKind != RefKind.None; 2250return ((BoundFunctionPointerInvocation)receiver).FunctionPointer.Signature.RefKind != RefKind.None; 2253return ((BoundDup)receiver).RefKind != RefKind.None; 2665if (System.Linq.ImmutableArrayExtensions.All(ctor.Parameters, p => p.RefKind == RefKind.None) && 2796return ((BoundParameter)left).ParameterSymbol.RefKind == RefKind.None; 2801return ((BoundLocal)left).LocalSymbol.RefKind == RefKind.None; 2821if (left.FieldSymbol.RefKind != RefKind.None && 2839if (left.ParameterSymbol.RefKind != RefKind.None && 2871if (left.LocalSymbol.RefKind != RefKind.None && !assignmentOperator.IsRef) 2970Debug.Assert(left.Method.RefKind != RefKind.None); 2981Debug.Assert(left.FunctionPointer.Signature.RefKind != RefKind.None); 3033LocalDefinition temp = EmitAddress(assignmentOperator.Right, lhs.GetRefKind() is RefKind.RefReadOnly or RefKindExtensions.StrictIn or RefKind.RefReadOnlyParameter ? AddressKind.ReadOnlyStrict : AddressKind.Writeable); 3116if (local.LocalSymbol.RefKind != RefKind.None && !assignment.IsRef) 3149Debug.Assert(((BoundDup)expression).RefKind != RefKind.None); 3172Debug.Assert(((BoundCall)expression).Method.RefKind != RefKind.None); 3177Debug.Assert(((BoundFunctionPointerInvocation)expression).FunctionPointer.Signature.RefKind != RefKind.None); 3321if (field.RefKind != RefKind.None && !refAssign) 3336if (parameter.ParameterSymbol.RefKind != RefKind.None && !refAssign) 4133if (useKind == UseKind.UsedAsValue && method.RefKind != RefKind.None) 4139Debug.Assert(method.RefKind != RefKind.None);
CodeGen\EmitStatement.cs (10)
759Debug.Assert(local.RefKind == RefKind.None || local.SynthesizedKind.IsLongLived(), 875if (boundReturnStatement.RefKind == RefKind.None) 883var unexpectedTemp = this.EmitAddress(expressionOpt, this._method.RefKind == RefKind.RefReadOnly ? AddressKind.ReadOnlyStrict : AddressKind.Writeable); 1170Debug.Assert(exceptionSourceLocal.LocalSymbol.RefKind == RefKind.None); 1182Debug.Assert(left.FieldSymbol.RefKind == RefKind.None); 1310if (local.RefKind == RefKind.None && !IsStackLocal(local)) 1319if (parameter.ParameterSymbol.RefKind == RefKind.None) 1793CSharpCompilation.DynamicTransformsEncoder.Encode(local.Type, RefKind.None, 0) : 1823Debug.Assert(local.RefKind == RefKind.None); 1839(local.RefKind != RefKind.None ? LocalSlotConstraints.ByRef : LocalSlotConstraints.None);
CodeGen\Optimizer.cs (24)
857if (node.LocalSymbol.RefKind != RefKind.None) 877if (node.LocalSymbol.RefKind != RefKind.None) 985if (localSymbol.RefKind is RefKind.RefReadOnly or RefKindExtensions.StrictIn && 1004else if (localSymbol.RefKind != RefKind.None && 1040(lhs.Kind is BoundKind.Local or BoundKind.Parameter or BoundKind.FieldAccess && lhs.GetRefKind() != RefKind.None), 1050if (((BoundParameter)lhs).ParameterSymbol.RefKind != RefKind.None) 1058if (((BoundLocal)lhs).LocalSymbol.RefKind != RefKind.None) 1066Debug.Assert(((BoundCall)lhs).Method.RefKind == RefKind.Ref, "only ref returning methods are assignable"); 1070Debug.Assert(((BoundFunctionPointerInvocation)lhs).FunctionPointer.Signature.RefKind == RefKind.Ref, "only ref returning function pointers are assignable"); 1230if (unwrappedSequence is BoundLocal { LocalSymbol: { RefKind: not RefKind.None } localSymbol }) 1264private ImmutableArray<BoundExpression> VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<ParameterSymbol> parameters, ImmutableArray<RefKind> argRefKindsOpt) 1274RefKind argRefKind = CodeGenerator.GetArgumentRefKind(arguments, parameters, argRefKindsOpt, i); 1281private void VisitArgument(ImmutableArray<BoundExpression> arguments, ref ArrayBuilder<BoundExpression> rewrittenArguments, int i, RefKind argRefKind) 1283ExprContext context = (argRefKind == RefKind.None) ? ExprContext.Value : ExprContext.Address; 1305ImmutableArray<RefKind> argRefKindsOpt = node.ArgumentRefKindsOpt; 1309RefKind refKind = argRefKindsOpt.IsDefaultOrEmpty ? RefKind.None : argRefKindsOpt[i]; 1437if (localSym.RefKind == RefKind.None) 1885Debug.Assert(local.RefKind == RefKind.None, "cannot take a ref of a ref"); 1946return top.Item2 == (local.RefKind == RefKind.None ? ExprContext.Value : ExprContext.Address) && 2174var isIndirectLocalStore = left.LocalSymbol.RefKind != RefKind.None && !node.IsRef; 2203left.LocalSymbol.RefKind == RefKind.Ref && 2440public override RefKind RefKind 2442get { return RefKind.None; }
Compilation\CSharpCompilation.cs (5)
2308if (method.RefKind != RefKind.None) 4158RefKind returnRefKind, 4160ImmutableArray<RefKind> parameterRefKinds, 4193if (returnRefKind == RefKind.Out) 4333fields.Add(new AnonymousTypeField(name, location, TypeWithAnnotations.Create(type, nullableAnnotation), RefKind.None, ScopedKind.None));
Compiler\ClsComplianceChecker.cs (2)
1327ImmutableArray<RefKind> xRefKinds; 1328ImmutableArray<RefKind> yRefKinds;
Compiler\MethodBodySynthesizer.cs (5)
50argumentRefKindsOpt: ImmutableArray<RefKind>.Empty, 193statement = new BoundReturnStatement(accessor.SyntaxNode, RefKind.None, fieldAccess, @checked: false); 311BoundStatement returnStatement = BoundReturnStatement.Synthesized(syntax, RefKind.None, processHandlerCall); 321BoundStatement returnStatement = new BoundReturnStatement(syntax, RefKind.None, expressionOpt: null, @checked: false); 358refKind: RefKind.None,
DocumentationComments\DocumentationCommentIDVisitor.PartVisitor.cs (1)
249if (symbol.RefKind != RefKind.None)
Emitter\EditAndContinue\CSharpSymbolMatcher.cs (8)
671return parameter.RefKind is RefKind.None == other.RefKind is RefKind.None && 708private static void ValidateFunctionPointerParamOrReturn(TypeWithAnnotations type, RefKind refKind, ImmutableArray<CustomModifier> refCustomModifiers, bool allowOut) 713static bool verifyRefModifiers(ImmutableArray<CustomModifier> modifiers, RefKind refKind, bool allowOut) 715Debug.Assert(RefKind.RefReadOnly == RefKind.In); 718case RefKind.RefReadOnly: 719case RefKind.Out when allowOut:
Emitter\Model\FieldSymbolAdapter.cs (1)
56bool Cci.IFieldReference.IsByReference => AdaptedFieldSymbol.RefKind != RefKind.None;
Emitter\Model\ParameterSymbolAdapter.cs (1)
41return AdaptedParameterSymbol.RefKind != RefKind.None;
Emitter\Model\ParameterTypeInformation.cs (1)
39return _underlyingParameter.RefKind != RefKind.None;
Emitter\Model\PEModuleBuilder.cs (1)
1380!optArgList.ArgumentRefKindsOpt.IsDefaultOrEmpty && optArgList.ArgumentRefKindsOpt[i] != RefKind.None,
Emitter\Model\SpecializedFieldReference.cs (1)
80bool Cci.IFieldReference.IsByReference => _underlyingField.RefKind != RefKind.None;
FlowAnalysis\AbstractFlowPass.cs (37)
1131VisitArguments(node.Arguments, default(ImmutableArray<RefKind>), null, default, false); 1292VisitRvalue(node.InitializerOpt, isKnownToBeAnLvalue: node.LocalSymbol.RefKind != RefKind.None); 1295if (node.LocalSymbol.RefKind != RefKind.None) 1436WriteArgument(receiverOpt, RefKind.Ref, method: null); 1442var thisRefKind = thisParameter.RefKind; 1516protected virtual void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1523private void VisitArgumentsBeforeCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt) 1528RefKind refKind = GetRefKind(refKindsOpt, i); 1529if (refKind != RefKind.Out) 1531VisitRvalue(arguments[i], isKnownToBeAnLvalue: refKind != RefKind.None); 1544private void VisitArgumentsAfterCall(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol? method, ImmutableArray<int> argsToParamsOpt, bool expanded) 1548RefKind refKind = GetRefKind(refKindsOpt, i); 1551case RefKind.None: 1552case RefKind.In: 1553case RefKind.RefReadOnlyParameter: 1556case RefKind.Ref: 1559goto case RefKind.Out; 1562case RefKind.Out: 1573protected static RefKind GetRefKind(ImmutableArray<RefKind> refKindsOpt, int index) 1575return refKindsOpt.IsDefault || refKindsOpt.Length <= index ? RefKind.None : refKindsOpt[index]; 1578protected virtual void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 2032VisitRvalue(node.ExpressionOpt, isKnownToBeAnLvalue: node.RefKind != RefKind.None); 2035if (node.RefKind != RefKind.None) 2145if (property.RefKind == RefKind.None) 2163var refKind = node.Left.Kind == BoundKind.BadExpression 2164? RefKind.Ref 2200if (property.RefKind == RefKind.None) 2219if (property.RefKind == RefKind.None) 2836if (property.RefKind == RefKind.None) 3338WriteArgument(operand, RefKind.Ref, method: null); 3524this.WriteArgument(operand, RefKind.Out, null); //Out because we know it will definitely be assigned. 3565VisitArguments(node.Arguments, default(ImmutableArray<RefKind>), node.Constructor, default, false); 3649VisitArguments(node.Arguments, default(ImmutableArray<RefKind>), node.AddMethod, node.ArgsToParamsOpt, node.Expanded); 3655VisitArguments(node.Arguments, default(ImmutableArray<RefKind>), node.AddMethod, node.ArgsToParamsOpt, node.Expanded); 3663VisitArguments(node.Arguments, default(ImmutableArray<RefKind>), method: null, default, false); 3745property.RefKind == RefKind.None)
FlowAnalysis\AlwaysAssignedWalker.cs (2)
73protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 76if (refKind == RefKind.Out)
FlowAnalysis\DataFlowsOutWalker.cs (1)
233((param.RefKind != RefKind.None && !param.IsImplicitlyDeclared && !RegionContains(param.GetFirstLocation().SourceSpan)) ||
FlowAnalysis\DefiniteAssignment.cs (21)
350NoteWrite(parameter, value: null, read: true, isRef: parameter.RefKind != RefKind.None); 811write: field.RefKind == RefKind.None || isRef); 923write: field.RefKind == RefKind.None || isRef); 1186((ParameterSymbol)symbol).RefKind == RefKind.Out) 1286if (fieldSymbol.RefKind != RefKind.None) 1470if (!isRef && node is BoundFieldAccess { FieldSymbol.RefKind: not RefKind.None } fieldAccess) 1523if (local.LocalSymbol.RefKind != RefKind.None && !isRef) 1574if (isRef && param.RefKind == RefKind.Out) 1592write: field.RefKind == RefKind.None || isRef); 1766if (parameter.RefKind != RefKind.Out) 1778if (thisParameter.RefKind != RefKind.Out) 1790if (extensionParameter.RefKind != RefKind.Out) 1813if (current is not MethodSymbol && parameter.RefKind == RefKind.Out) 1843if (parameter.RefKind == RefKind.Out && !(this.CurrentSymbol is MethodSymbol currentMethod && currentMethod.IsAsync)) // out parameters not allowed in async 1851NoteWrite(parameter, value: null, read: true, isRef: parameter.RefKind != RefKind.None); 1909if (!parameter.IsThis && parameter.RefKind != RefKind.Out && parameter.ContainingSymbol is SynthesizedPrimaryConstructor primaryCtor) 1921if (parameter.RefKind != RefKind.None) 2523protected override void WriteArgument(BoundExpression arg, RefKind refKind, MethodSymbol method) 2525if (refKind == RefKind.Ref) 2539if (refKind != RefKind.None && ((object)method == null || method.IsExtern) && arg.Type is TypeSymbol type) 2731NoteWrite(iterationVariable, null, read: true, isRef: iterationVariable.RefKind != RefKind.None);
FlowAnalysis\FlowAnalysisPass.cs (3)
85var newStatements = block.Statements.Add(new BoundReturnStatement(trailingExpression.Syntax, RefKind.None, trailingExpression, @checked: false)); 141if (field.RefKind == RefKind.None) 205: BoundReturnStatement.Synthesized(syntax, RefKind.None, null);
FlowAnalysis\NullableWalker.cs (66)
1365var refKind = parameter.RefKind; 1366if (refKind != RefKind.Out && refKind != RefKind.Ref) 2492RefKind refKind, 2502if (refKind == RefKind.Ref) 2505return AreParameterAnnotationsCompatible(RefKind.None, overriddenType, overriddenAnnotations, overridingType, overridingAnnotations, forRef: true) && 2506AreParameterAnnotationsCompatible(RefKind.Out, overriddenType, overriddenAnnotations, overridingType, overridingAnnotations); 2509if (refKind is RefKind.None or RefKind.In or RefKind.RefReadOnlyParameter) 2539if (refKind == RefKind.Out) 3003if (parameter.RefKind != RefKind.Out) 3076if (node.RefKind == RefKind.None && 3085if (node.RefKind == RefKind.None) 6575var refKind = isNewExtensionMethod ? GetExtensionReceiverRefKind(node.Method) : GetRefKind(node.ArgumentRefKindsOpt, 0); 6706ImmutableArray<RefKind> refKindsOpt, 6762internal static ImmutableArray<RefKind> GetArgumentRefKinds(ImmutableArray<RefKind> argumentRefKindsOpt, bool adjustForNewExtension, 6771RefKind receiverRefKind = GetExtensionReceiverRefKind(method); 6775if (receiverRefKind == RefKind.None) 6780var builder = ArrayBuilder<RefKind>.GetInstance(argumentCount + 1, fillWithValue: RefKind.None); 6788private static RefKind GetExtensionReceiverRefKind(MethodSymbol method) 6795return extensionParameter.RefKind == RefKind.Ref ? RefKind.Ref : RefKind.None; 7228protected override void VisitArguments(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKindsOpt, MethodSymbol method, ImmutableArray<int> argsToParamsOpt, bool expanded) 7237ImmutableArray<RefKind> refKindsOpt, 7250ImmutableArray<RefKind> refKindsOpt, 7263ImmutableArray<RefKind> refKindsOpt, 7285ImmutableArray<RefKind> refKindsOpt, 7327ImmutableArray<RefKind> refKindsOpt, 7516ImmutableArray<RefKind> refKindsOpt, 7534static void expandParamsCollection(ref ImmutableArray<BoundExpression> arguments, ref ImmutableArray<RefKind> refKindsOpt, ImmutableArray<ParameterSymbol> parametersOpt, ref ImmutableArray<int> argsToParamsOpt, ref BitVector defaultArguments) 7594var refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(refKindsOpt.Length + elements.Length - 1); 7596refKindsBuilder.AddMany(RefKind.None, elements.Length); 7769ImmutableArray<RefKind> refKindsOpt, 7830private VisitResult VisitArgumentEvaluate(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 7842private VisitResult VisitArgumentEvaluateEpilogue(BoundExpression argument, RefKind refKind, FlowAnalysisAnnotations annotations) 7848case RefKind.Ref: 7851case RefKind.None: 7852case RefKind.In: 7874case RefKind.Out: 7897RefKind refKind, 7912case RefKind.None: 7913case RefKind.In: 7951case RefKind.Ref: 7971case RefKind.Out: 8034RefKind refKind, 8047case RefKind.None: 8048case RefKind.In: 8054case RefKind.Ref: 8081case RefKind.Out: 8287ImmutableArray<RefKind> refKindsOpt) 8298RefKind refKind = GetRefKind(refKindsOpt, i); 8301if (refKind == RefKind.None) 8369ImmutableArray<RefKind> argumentRefKindsOpt, 8379var refKinds = ArrayBuilder<RefKind>.GetInstance(); 8400parameterRefKinds: out ImmutableArray<RefKind> parameterRefKinds); 10758case BoundLocal { LocalSymbol.RefKind: RefKind.None }: 10759case BoundParameter { ParameterSymbol: { RefKind: RefKind.None } parameter } when 11480ImmutableArray<RefKind> refKindsOpt = extensionParameter.RefKind == RefKind.Ref ? [RefKind.Ref] : default; 12953TypeWithAnnotations elementType = InMethodBinder.GetIteratorElementTypeFromReturnType(compilation, RefKind.None, 12995VisitArguments(node, node.ConstructorArguments, ImmutableArray<RefKind>.Empty, node.Constructor, argsToParamsOpt: node.ConstructorArgumentsToParamsOpt, defaultArguments: node.ConstructorDefaultArguments,
FlowAnalysis\NullableWalker.PlaceholderLocal.cs (2)
59public override RefKind RefKind => RefKind.None;
FlowAnalysis\ReadWriteWalker.cs (3)
87if (p.RefKind != RefKind.None) _readOutside.Add(p); 90if (_symbol.TryGetInstanceExtensionParameter(out ParameterSymbol extensionParameter) && extensionParameter.RefKind != RefKind.None) 100if ((object)thisParameter != null && thisParameter.RefKind != RefKind.None)
Generated\BoundNodes.xml.Generated.cs (37)
900public BoundDup(SyntaxNode syntax, RefKind refKind, TypeSymbol? type, bool hasErrors) 906public BoundDup(SyntaxNode syntax, RefKind refKind, TypeSymbol? type) 912public RefKind RefKind { get; } 917public BoundDup Update(RefKind refKind, TypeSymbol? type) 1440public BoundFunctionPointerInvocation(SyntaxNode syntax, BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type, bool hasErrors = false) 1457public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 1463public BoundFunctionPointerInvocation Update(BoundExpression invokedExpression, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, LookupResultKind resultKind, TypeSymbol type) 3084public BoundArgListOperator(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type, bool hasErrors = false) 3096public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 3101public BoundArgListOperator Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt, TypeSymbol? type) 3590public BoundReturnStatement(SyntaxNode syntax, RefKind refKind, BoundExpression? expressionOpt, bool @checked, bool hasErrors = false) 3602public RefKind RefKind { get; } 3609public BoundReturnStatement Update(RefKind refKind, BoundExpression? expressionOpt, bool @checked) 5916public BoundDynamicInvocation(SyntaxNode syntax, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type, bool hasErrors = false) 5932public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 5938public BoundDynamicInvocation Update(ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<MethodSymbol> applicableMethods, BoundExpression expression, ImmutableArray<BoundExpression> arguments, TypeSymbol type) 6166public BoundCall(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type, bool hasErrors = false) 6199public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 6211public BoundCall Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool isDelegateCall, bool expanded, bool invokedAsExtensionMethod, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalMethodsOpt, TypeSymbol type) 6309public BoundUnconvertedObjectCreationExpression(SyntaxNode syntax, ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder, bool hasErrors = false) 6326public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 6333public BoundUnconvertedObjectCreationExpression Update(ImmutableArray<BoundExpression> arguments, ImmutableArray<(string Name, Location Location)?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, InitializerExpressionSyntax? initializerOpt, Binder binder) 6368public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 6394public override ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 6405public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type) 6648public BoundDynamicObjectCreationExpression(SyntaxNode syntax, string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false) 6669public override ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 6677public BoundDynamicObjectCreationExpression Update(string name, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, ImmutableArray<MethodSymbol> applicableMethods, bool wasTargetTyped, TypeSymbol type) 6770public 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) 6794public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 6805public 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) 7438public BoundIndexerAccess(SyntaxNode syntax, BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, AccessorKind accessorKind, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type, bool hasErrors = false) 7465public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 7475public BoundIndexerAccess Update(BoundExpression? receiverOpt, ThreeState initialBindingReceiverIsSubjectToCloning, PropertySymbol indexer, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, AccessorKind accessorKind, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ImmutableArray<PropertySymbol> originalIndexersOpt, TypeSymbol type) 7579public BoundDynamicIndexerAccess(SyntaxNode syntax, BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type, bool hasErrors = false) 7599public ImmutableArray<RefKind> ArgumentRefKindsOpt { get; } 7605public BoundDynamicIndexerAccess Update(BoundExpression receiver, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<PropertySymbol> applicableIndexers, TypeSymbol type)
Lowering\AsyncRewriter\AsyncExceptionHandlerRewriter.cs (1)
372unpendReturn = new BoundReturnStatement(_F.Syntax, RefKind.None, pendingValue, @checked: false);
Lowering\AsyncRewriter\AsyncMethodBuilderMemberCollection.cs (1)
488method.RefKind == RefKind.None &&
Lowering\AsyncRewriter\AsyncMethodToStateMachineRewriter.cs (1)
444refKinds: ImmutableArray<RefKind>.Empty,
Lowering\AsyncRewriter\RuntimeAsyncRewriter.cs (2)
56if (thisParameter is { Type.IsValueType: true, RefKind: not RefKind.None }) 312Debug.Assert(thisParameter is not { Type.IsValueType: true, RefKind: RefKind.Ref });
Lowering\ClosureConversion\ClosureConversion.cs (7)
567new BoundReturnStatement(syntax, RefKind.None, null, @checked: false)); 879ref ImmutableArray<RefKind> argRefKinds) 920var refkindsBuilder = ArrayBuilder<RefKind>.GetInstance(argumentsBuilder.Count); 927refkindsBuilder.AddMany(RefKind.None, arguments.Length); 930refkindsBuilder.AddMany(RefKind.Ref, frameCount); 1344var argRefKinds = default(ImmutableArray<RefKind>); 1371ImmutableArray<RefKind> argRefKinds = default;
Lowering\ClosureConversion\LambdaCapturedVariable.cs (2)
139public override RefKind RefKind => RefKind.None;
Lowering\ClosureConversion\SynthesizedClosureMethod.cs (1)
119if (RefKind == RefKind.RefReadOnly)
Lowering\DiagnosticsPass_ExpressionTrees.cs (5)
308ImmutableArray<RefKind> argumentRefKindsOpt, 356else if (method.RefKind != RefKind.None) 553VisitCall(node.AddMethod, null, node.Arguments, default(ImmutableArray<RefKind>), default(ImmutableArray<string>), default(ImmutableArray<int>), node.DefaultArguments, node); 577if (_inExpressionLambda && property.RefKind != RefKind.None) 619if (p.RefKind != RefKind.None && p.TryGetFirstLocation() is Location location)
Lowering\DiagnosticsPass_Warnings.cs (5)
21private void CheckArguments(ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<BoundExpression> arguments, Symbol method) 28if (argumentRefKindsOpt[i] != RefKind.None) 235private static bool IsComCallWithRefOmitted(MethodSymbol method, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKindsOpt) 244if (method.Parameters[i].RefKind != RefKind.None && (argumentRefKindsOpt.IsDefault || argumentRefKindsOpt[i] == RefKind.None)) return true;
Lowering\ExtensionMethodReferenceRewriter.cs (7)
96ImmutableArray<RefKind> argumentRefKinds, 105var receiverRefKind = method.Parameters[0].RefKind; 109if (receiverRefKind != RefKind.None) 111var builder = ArrayBuilder<RefKind>.GetInstance(method.ParameterCount, RefKind.None); 147public static RefKind ReceiverArgumentRefKindFromReceiverRefKind(RefKind receiverRefKind)
Lowering\Extensions.cs (3)
17public static RefKind RefKinds(this ImmutableArray<RefKind> ArgumentRefKinds, int index) 25return RefKind.None;
Lowering\InitializerRewriter.cs (2)
68boundStatements.Add(new BoundReturnStatement(lastStatement.Syntax, RefKind.None, trailingExpression, @checked: false)); 106isRef: field.RefKind != RefKind.None)
Lowering\Instrumentation\CompoundInstrumenter.cs (1)
168ref ImmutableArray<RefKind> argumentRefKindsOpt)
Lowering\Instrumentation\Instrumenter.cs (1)
242ref ImmutableArray<RefKind> argumentRefKindsOpt)
Lowering\Instrumentation\LocalStateTracingInstrumenter.cs (6)
307if (parameter.RefKind == RefKind.Out || parameter.IsDiscard) 453Debug.Assert(parameter.RefKind == RefKind.None); 553ImmutableArray<RefKind> argumentRefKindsOpt = NullableWalker.GetArgumentRefKinds(original.ArgumentRefKindsOpt, adjustForNewExtension, method, arguments.Length); 570private BoundExpression InstrumentCall(BoundExpression invocation, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> refKinds) 596if (refKinds[i] is not (RefKind.Ref or RefKind.Out))
Lowering\Instrumentation\ModuleCancellationInstrumenter.cs (4)
122ref ImmutableArray<RefKind> argumentRefKindsOpt) 131(argumentRefKindsOpt.IsDefault || argumentRefKindsOpt is [.., RefKind.None]) && 145argumentRefKindsOpt = argumentRefKindsOpt.IsDefault ? default : [.. argumentRefKindsOpt, RefKind.None]; 186member is MethodSymbol { Parameters: [.., { RefKind: RefKind.None, Type: { } lastParamType }] parametersWithCancellationToken } overload &&
Lowering\IteratorRewriter\IteratorConstructor.cs (1)
28SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 0, RefKind.None, GeneratedNames.MakeStateMachineStateFieldName()));
Lowering\IteratorRewriter\IteratorFinallyMethodSymbol.cs (2)
140public override RefKind RefKind 142get { return RefKind.None; }
Lowering\LocalRewriter\LocalRewriter.cs (4)
1092return ((BoundCall)expr).Method.RefKind != RefKind.None; 1095return ((BoundPropertyAccess)expr).PropertySymbol.RefKind != RefKind.None; 1098return ((BoundIndexerAccess)expr).Indexer.RefKind != RefKind.None; 1133symbol.Parameters.Any(static p => p.RefKind == RefKind.In))
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (5)
163var refKindBuilder = ArrayBuilder<RefKind>.GetInstance(); 166void addArg(RefKind refKind, BoundExpression expression) 190Debug.Assert(parameter.RefKind == RefKind.Out); 192addArg(RefKind.Out, _tempAllocator.GetTemp(outputTemp)); 524&& loweredInput.GetRefKind() == RefKind.None &&
Lowering\LocalRewriter\LocalRewriter_AnonymousObjectCreation.cs (1)
28argumentRefKindsOpt: default(ImmutableArray<RefKind>),
Lowering\LocalRewriter\LocalRewriter_AssignmentOperator.cs (7)
153ImmutableArray<RefKind> refKinds, 201default(ImmutableArray<RefKind>), 234Debug.Assert(!isRef || rewrittenLeft.GetRefKind() != RefKind.None); 296ImmutableArray<RefKind> argumentRefKindsOpt, 328(arguments.Length != 0 || !IsSafeForReordering(rewrittenRight, RefKind.None))) 367if (!IsSafeForReordering(rewrittenRight, RefKind.None)) 369BoundLocal capturedRight = _factory.StoreToTemp(rewrittenRight, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None);
Lowering\LocalRewriter\LocalRewriter_Call.cs (88)
140ref ImmutableArray<RefKind> argumentRefKindsOpt, 300var thisRefKind = methodThisParameter.RefKind; 303if (thisRefKind != RefKind.None 306thisRefKind == RefKind.Ref ? CodeGenerator.AddressKind.Writeable : CodeGenerator.AddressKind.ReadOnlyStrict, 320if (argumentRefKindsOpt.IsDefault && thisRefKind != RefKind.None) 381ImmutableArray<RefKind> argRefKindsOpt = node.ArgumentRefKindsOpt; 461ImmutableArray<RefKind> argumentRefKinds, 548argumentRefKinds: default(ImmutableArray<RefKind>), 553private static bool IsSafeForReordering(BoundExpression expression, RefKind kind) 579return kind != RefKind.None; 667ImmutableArray<RefKind> argumentRefKindsOpt, 688RefKind refKind; 706refKind = rewrittenReceiver.Type.IsValueType || rewrittenReceiver.Type.Kind == SymbolKind.TypeParameter ? RefKind.Ref : RefKind.None; 712refKind = RefKind.None; 718if (refKind == RefKind.None && 725refKind = RefKind.Ref; 731receiverTemp = _factory.StoreToTemp(rewrittenReceiver, out assignmentToTemp, refKind is RefKind.RefReadOnlyParameter ? RefKind.In : refKind); 898RefKind argRefKind = argumentRefKindsOpt.RefKinds(argIndex); 899RefKind paramRefKind = parameters[paramIndex].RefKind; 901local = _factory.StoreToTemp(visitedArgument, out var store, refKind: paramRefKind is RefKind.In or RefKind.RefReadOnlyParameter ? RefKind.In : argRefKind); 949private RefKind GetNewExtensionMemberReceiverCaptureRefKind(BoundExpression rewrittenReceiver, Symbol methodOrIndexer) 954RefKind receiverRefKind = methodOrIndexer.ContainingType.ExtensionParameter.RefKind; 955bool isReceiverTakenByValue = receiverRefKind == RefKind.None; 960return RefKind.None; 974return RefKind.None; 977RefKind refKind = ExtensionMethodReferenceRewriter.ReceiverArgumentRefKindFromReceiverRefKind(receiverRefKind); 988return RefKind.None; 1063ref ImmutableArray<RefKind> argumentRefKindsOpt, 1146ArrayBuilder<RefKind> refKinds = ArrayBuilder<RefKind>.GetInstance(parameters.Length, RefKind.None); 1216private static ImmutableArray<RefKind> GetEffectiveArgumentRefKinds(ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<ParameterSymbol> parameters) 1218ArrayBuilder<RefKind>? refKindsBuilder = null; 1221var paramRefKind = parameters[i].RefKind; 1222var currentArgRefKind = argumentRefKindsOpt.IsDefault ? RefKind.None : argumentRefKindsOpt[i]; 1223var effectiveArgRefKind = GetEffectiveRefKind(paramRefKind, currentArgRefKind, parameters[i].Type, comRefKindMismatchPossible: false); 1241static void fillRefKindsBuilder(ImmutableArray<RefKind> argumentRefKindsOpt, ImmutableArray<ParameterSymbol> parameters, [NotNull] ref ArrayBuilder<RefKind>? refKindsBuilder) 1248refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(parameters.Length); 1253refKindsBuilder = ArrayBuilder<RefKind>.GetInstance(parameters.Length, fillWithValue: RefKind.None); 1259internal static RefKind GetEffectiveRefKind(RefKind paramRefKind, RefKind initialArgRefKind, TypeSymbol paramType, bool comRefKindMismatchPossible) 1267if (paramRefKind is RefKind.In or RefKind.RefReadOnlyParameter) 1269Debug.Assert(initialArgRefKind is RefKind.None or RefKind.In or RefKind.Ref); 1270return initialArgRefKind == RefKind.None ? RefKind.In : RefKindExtensions.StrictIn; 1272else if (paramRefKind == RefKind.Ref && initialArgRefKind == RefKind.None) 1278return RefKind.Ref; 1340private static ImmutableArray<RefKind> GetRefKindsOrNull(ArrayBuilder<RefKind> refKinds) 1342foreach (var refKind in refKinds) 1344if (refKind != RefKind.None) 1349return default(ImmutableArray<RefKind>); 1402ImmutableArray<RefKind> argumentRefKinds, 1406/* out */ ArrayBuilder<RefKind> refKinds, 1418RefKind argRefKind = argumentRefKinds.RefKinds(a); 1419RefKind paramRefKind = parameters[p].RefKind; 1427Debug.Assert(argRefKind == RefKind.None); 1443arg.rewriter.StoreArgumentToTempIfNecessary(arg.forceLambdaSpilling, arg.storesToTemps, element, RefKind.None, RefKind.None), 1459private BoundExpression StoreArgumentToTempIfNecessary(bool forceLambdaSpilling, ArrayBuilder<BoundAssignmentOperator> storesToTemps, BoundExpression argument, RefKind argRefKind, RefKind paramRefKind) 1471refKind: paramRefKind is RefKind.In or RefKind.RefReadOnlyParameter 1472? (argRefKind == RefKind.None ? RefKind.In : RefKindExtensions.StrictIn) 1526default(ImmutableArray<RefKind>), 1686ArrayBuilder<RefKind> argsRefKindsBuilder, 1699RefKind paramRefKind = parameters[argIndex].RefKind; 1700RefKind argRefKind = argsRefKindsBuilder[argIndex]; 1704if (argRefKind != RefKind.None || paramRefKind != RefKind.Ref) 1712var localRefKind = ((BoundLocal)argument).LocalSymbol.RefKind; 1713if (localRefKind == RefKind.Ref) 1719Debug.Assert(localRefKind == RefKind.None); 1731argsRefKindsBuilder[argIndex] = RefKind.Ref;
Lowering\LocalRewriter\LocalRewriter_CollectionExpression.cs (1)
626var call = _factory.New(constructor, arguments: [temp], argumentRefKinds: [asReadOnlySpan ? RefKindExtensions.StrictIn : RefKind.Ref]);
Lowering\LocalRewriter\LocalRewriter_CompoundAssignmentOperator.cs (26)
233BoundLocal binaryResult = _factory.StoreToTemp(opFinal, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None); 258return symbol.IsExtensionBlockMember() && !symbol.IsStatic && symbol.ContainingType.ExtensionParameter is { RefKind: RefKind.None, Type.IsReferenceType: false }; 295RefKind refKind; 313refKind = variableRepresentsLocation ? RefKind.Ref : RefKind.None; 326refKind: refKind is RefKind.RefReadOnlyParameter ? RefKind.In : refKind, 444ImmutableArray<RefKind> argumentRefKinds = indexerAccess.ArgumentRefKindsOpt; 476ref ImmutableArray<RefKind> argumentRefKinds, 483ArrayBuilder<RefKind> refKinds = ArrayBuilder<RefKind>.GetInstance(parameters.Length, RefKind.None); 556Debug.Assert(implicitIndexerAccess.IndexerOrSliceAccess.GetRefKind() == RefKind.None); 579var variableTemp = _factory.StoreToTemp(arrayAccess, out assignmentToTemp, refKind: RefKind.Ref); 657var temp = _factory.StoreToTemp(VisitExpression(arguments[i]), out assignmentToTemp, indexerAccess.ArgumentRefKindsOpt.RefKinds(i) != RefKind.None ? RefKind.Ref : RefKind.None); 728if (propertyAccess.PropertySymbol.RefKind == RefKind.None) 743if (indexerAccess.GetRefKind() == RefKind.None) 756if (implicitIndexerAccess.GetRefKind() == RefKind.None) 809Debug.Assert(originalLHS.GetRefKind() == RefKind.Ref); 830Debug.Assert(((BoundCall)originalLHS).Method.RefKind != RefKind.None); 834Debug.Assert(((BoundFunctionPointerInvocation)originalLHS).FunctionPointer.Signature.RefKind != RefKind.None); 885var variableTemp = _factory.StoreToTemp(rewrittenVariable, out assignmentToTemp2, refKind: RefKind.Ref); 985((BoundParameter)expression).ParameterSymbol.RefKind != RefKind.None || 989return localsMayBeAssignedOrCaptured || ((BoundLocal)expression).LocalSymbol.RefKind != RefKind.None;
Lowering\LocalRewriter\LocalRewriter_DeconstructionAssignmentOperator.cs (2)
168case BoundLocal { LocalSymbol: { RefKind: RefKind.None } localSymbol }: 171case BoundParameter { ParameterSymbol: { RefKind: RefKind.None } parameterSymbol }:
Lowering\LocalRewriter\LocalRewriter_FixedStatement.cs (3)
36if (pinnedTemp.RefKind == RefKind.None) 264refKind: RefKind.RefReadOnly, 326refKind: RefKind.RefReadOnly,
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (5)
610RefKind collectionTempRefKind = RefKind.None; 698private delegate BoundStatement? GetForEachStatementAsForPreamble(LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind); 737return static (LocalRewriter rewriter, SyntaxNode syntax, ForEachEnumeratorInfo enumeratorInfo, ref BoundExpression rewrittenExpression, out LocalSymbol? preambleLocal, out RefKind collectionTempRefKind) => 751collectionTempRefKind = enumeratorInfo.InlineArraySpanType == WellKnownType.System_Span_T ? RefKind.Ref : RefKindExtensions.StrictIn;
Lowering\LocalRewriter\LocalRewriter_IndexerAccess.cs (11)
54ImmutableArray<RefKind> refKinds) 107ImmutableArray<RefKind> argumentRefKindsOpt, 118if (isLeftOfAssignment && indexer.RefKind == RefKind.None) 312possiblyRefCapturedReceiver = _factory.StoreToTemp(possiblyRefCapturedReceiver, out var refCapture, createSpan.Parameters[0].RefKind == RefKind.In ? RefKindExtensions.StrictIn : RefKind.Ref); 487Debug.Assert(!isLeftOfAssignment || node.IndexerOrSliceAccess.GetRefKind() == RefKind.Ref); 544receiver.Type.IsReferenceType ? RefKind.None : RefKind.Ref); 609if (isLeftOfAssignment && indexerAccess.GetRefKind() == RefKind.None) 847receiver.Type.IsReferenceType ? RefKind.None : RefKind.Ref);
Lowering\LocalRewriter\LocalRewriter_Literal.cs (2)
137argumentNamesOpt: default(ImmutableArray<string?>), argumentRefKindsOpt: default(ImmutableArray<RefKind>), expanded: false, 157argumentNamesOpt: default(ImmutableArray<string?>), argumentRefKindsOpt: default(ImmutableArray<RefKind>), expanded: false,
Lowering\LocalRewriter\LocalRewriter_NullCoalescingAssignmentOperator.cs (1)
47BoundLocal rightResult = _factory.StoreToTemp(loweredRight, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None);
Lowering\LocalRewriter\LocalRewriter_NullCoalescingOperator.cs (1)
146if (unwrappedRight is { ConstantValueOpt: not null } or BoundLocal { LocalSymbol.IsRef: false } or BoundParameter { ParameterSymbol.RefKind: RefKind.None } &&
Lowering\LocalRewriter\LocalRewriter_ObjectCreationExpression.cs (2)
43ImmutableArray<RefKind> argumentRefKindsOpt = node.ArgumentRefKindsOpt; 352default(ImmutableArray<RefKind>),
Lowering\LocalRewriter\LocalRewriter_ObjectOrCollectionInitializerExpression.cs (13)
171default(ImmutableArray<RefKind>), 186.All(p => p.RefKind is RefKind.None or RefKind.In or RefKind.RefReadOnlyParameter)); 202var argumentRefKindsOpt = default(ImmutableArray<RefKind>); 203if (initializer.InvokedAsExtensionMethod && addMethod.Parameters[0].RefKind == RefKind.Ref) 208var builder = ArrayBuilder<RefKind>.GetInstance(addMethod.Parameters.Length, RefKind.None); 209builder[0] = RefKind.Ref; 340memberInit.MemberSymbol?.GetParameterRefKinds() ?? default(ImmutableArray<RefKind>), 622ImmutableArray<RefKind> paramRefKindsOpt, 642elementArg.rewriter.EvaluateSideEffects(element, RefKind.None, elementArg.sideeffects, ref elementArg.temps), 670private BoundExpression EvaluateSideEffects(BoundExpression arg, RefKind refKind, ArrayBuilder<BoundExpression> sideeffects, ref ArrayBuilder<LocalSymbol>? temps)
Lowering\LocalRewriter\LocalRewriter_PropertyAccess.cs (2)
52if (isLeftOfAssignment && propertySymbol.RefKind == RefKind.None) 78ImmutableArray<RefKind> argumentRefKindsOpt,
Lowering\LocalRewriter\LocalRewriter_StringConcat.cs (4)
490readOnlySpanCtorRefParamGeneric.Parameters[0].RefKind != RefKind.Out) 528Debug.Assert(readOnlySpanCtorRefParamChar.Parameters[0].RefKind != RefKind.Out); 535argumentRefKindsOpt: [readOnlySpanCtorRefParamChar.Parameters[0].RefKind == RefKind.Ref ? RefKind.Ref : RefKindExtensions.StrictIn],
Lowering\LocalRewriter\LocalRewriter_StringInterpolation.cs (2)
46if (construction.ArgumentRefKindsOpt[i] == RefKind.Out) 51Debug.Assert(construction.ArgumentRefKindsOpt[i] == RefKind.None);
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (3)
637return ((BoundLocal)expression).LocalSymbol.RefKind != RefKind.None; 641return ((BoundParameter)expression).ParameterSymbol.RefKind != RefKind.None; 669BoundLocal incrementResult = _factory.StoreToTemp(newValue, out BoundAssignmentOperator assignmentToTemp, refKind: RefKind.None);
Lowering\LocalRewriter\LocalRewriter_UsingStatement.cs (7)
500Debug.Assert(method.Parameters.AsSpan()[1..].All(static (p) => (p.IsOptional || p.IsParams) && p.RefKind is RefKind.None or RefKind.In or RefKind.RefReadOnlyParameter)); 507Debug.Assert(method.ParameterRefKinds.IsDefaultOrEmpty || method.ParameterRefKinds.All(static refKind => refKind is RefKind.In or RefKind.RefReadOnlyParameter or RefKind.None)); 512ImmutableArray<RefKind> argumentRefKindsOpt = default;
Lowering\LocalRewriter\LoweredDynamicOperationFactory.cs (54)
112return MakeDynamicOperation(binderConstruction, null, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), null, resultType); 148return MakeDynamicOperation(binderConstruction, null, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), null, resultType); 191return MakeDynamicOperation(binderConstruction, null, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), null, resultType); 200ImmutableArray<RefKind> refKinds, 224RefKind receiverRefKind; 229receiverRefKind = RefKind.None; 293return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), loweredHandler, resultType); 300ImmutableArray<RefKind> refKinds, 330return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, refKinds, null, resultType); 338ImmutableArray<RefKind> refKinds) 357return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, refKinds, null, type); 392return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), null, resultType); 433return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, default(ImmutableArray<RefKind>), loweredRight, AssemblySymbol.DynamicType); 440ImmutableArray<RefKind> refKinds) 459return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, loweredArguments, refKinds, null, resultType); 466ImmutableArray<RefKind> refKinds, 482var loweredReceiverRefKind = GetReceiverRefKind(loweredReceiver); 517return MakeDynamicOperation(binderConstruction, loweredReceiver, RefKind.None, ImmutableArray<BoundExpression>.Empty, default(ImmutableArray<RefKind>), null, resultType); 543internal RefKind GetReceiverRefKind(BoundExpression loweredReceiver) 548return RefKind.None; 556return hasHome ? RefKind.Ref : RefKind.None; 563ImmutableArray<RefKind> refKinds = default(ImmutableArray<RefKind>), 565RefKind receiverRefKind = RefKind.None, 572Debug.Assert(!receiverIsStaticType || receiverRefKind == RefKind.None); 587refKinds.IsDefault ? RefKind.None : refKinds[i], 593infos[j++] = GetArgumentInfo(argumentInfoFactory, loweredRight, NoName, RefKind.None, isStaticType: false); 602RefKind receiverRefKind, 604ImmutableArray<RefKind> refKinds, 721RefKind receiverRefKind, 723ImmutableArray<RefKind> refKinds, 737bool hasByRefs = receiverRefKind != RefKind.None || !refKinds.IsDefaultOrEmpty; 777byRefs[j++] = RefKind.None; 792static RefKind getRefKind(RefKind refKind) 794Debug.Assert(refKind != RefKind.RefReadOnlyParameter); 795return refKind == RefKind.None ? RefKind.None : RefKind.Ref; 803RefKind refKind, 818Debug.Assert(refKind == RefKind.None || refKind == RefKind.Ref || refKind == RefKind.Out, "unexpected refKind in dynamic"); 821if (refKind == RefKind.Out) 825else if (refKind == RefKind.Ref)
Lowering\MethodToClassRewriter.cs (1)
268if (leftLocal.LocalSymbol.RefKind != RefKind.None &&
Lowering\SpillSequenceSpiller.cs (42)
305RefKind refKind = RefKind.None, 317Debug.Assert(refKind == RefKind.None); 324Debug.Assert(refKind == RefKind.None); 337if (refKind != RefKind.None || expression.Type?.IsRefLikeOrAllowsRefLikeType() == true) 370var left = Spill(builder, assignment.Left, RefKind.Ref); 371var right = Spill(builder, assignment.Right, RefKind.Ref); 380if (refKind != RefKind.None || expression.Type.IsReferenceType) 388if (refKind != RefKind.None) 397if (local.LocalSymbol.SynthesizedKind == SynthesizedLocalKind.Spill || refKind != RefKind.None) 410if (refKind != RefKind.None || fieldSymbol.IsReadOnly) 417if (refKind == RefKind.None) goto default; 419var receiver = Spill(builder, field.ReceiverOpt, fieldSymbol.ContainingType.IsValueType ? refKind : RefKind.None); 437if (refKind != RefKind.None) 482if (refKind == RefKind.None && 489[Spill(builder, objectCreationExpression.Arguments[0], argRefKinds.IsDefault ? RefKind.None : argRefKinds[0])], 538Left: BoundLocal { LocalSymbol: { SynthesizedKind: SynthesizedLocalKind.LoweringTemp, RefKind: not RefKind.None } receiverRefLocal }, 541ValueTypeReceiver: BoundLocal { LocalSymbol: { SynthesizedKind: SynthesizedLocalKind.LoweringTemp, RefKind: not RefKind.None } } valueTypeReceiver, 550Left: BoundLocal { LocalSymbol: { SynthesizedKind: SynthesizedLocalKind.LoweringTemp, RefKind: RefKind.None } referenceTypeClone }, 551Right: BoundLocal { LocalSymbol: { SynthesizedKind: SynthesizedLocalKind.LoweringTemp, RefKind: not RefKind.None } originalReceiverReference } 554Value: BoundLocal { LocalSymbol: { SynthesizedKind: SynthesizedLocalKind.LoweringTemp, RefKind: RefKind.None } } referenceTypeReceiver 587ImmutableArray<RefKind> refKinds = default(ImmutableArray<RefKind>), 635var refKind = refKinds.IsDefault ? RefKind.None : refKinds[i]; 903expression = Spill(leftBuilder, expression, RefKind.None); 918left = Spill(leftBuilder, VisitExpression(ref leftBuilder, left), RefKind.Ref); 950expression = Spill(leftBuilder, expression, RefKind.None); 965receiver = Spill(leftBuilder, VisitExpression(ref leftBuilder, field.ReceiverOpt), RefKind.Ref); 1045RefKind refKind = ReceiverSpillRefKind(receiver); 1047Debug.Assert(refKind == RefKind.None || !receiver.Type.IsReferenceType); 1051if (refKind != RefKind.None && 1084private static RefKind ReceiverSpillRefKind(BoundExpression receiver) 1086var result = RefKind.None; 1089result = receiver.Type.IsReadOnly ? RefKind.In : RefKind.Ref; 1278var receiverRefKind = ReceiverSpillRefKind(node.Receiver); 1299if (receiver.Type.IsReferenceType || receiver.Type.IsValueType || receiverRefKind == RefKind.None) 1302receiver = Spill(receiverBuilder, receiver, RefKind.None); 1317receiver = Spill(receiverBuilder, receiver, RefKind.Ref); 1319var clone = _F.SynthesizedLocal(receiver.Type, _F.Syntax, refKind: RefKind.None, kind: SynthesizedLocalKind.Spill);
Lowering\StateMachineRewriter\IteratorAndAsyncCaptureWalker.cs (6)
98Debug.Assert(local.RefKind != RefKind.None); 222case ParameterSymbol { RefKind: RefKind.None }: 223case LocalSymbol { RefKind: RefKind.None }: 224case FieldSymbol { RefKind: RefKind.None }: 232(variable is LocalSymbol { RefKind: not RefKind.None } refLocal && !canRefLocalBeHoisted(refLocal))) 270Debug.Assert(parameter.IsThis || parameter.RefKind == RefKind.None);
Lowering\StateMachineRewriter\MethodToStateMachineRewriter.cs (1)
317if (local.RefKind != RefKind.None)
Lowering\StateMachineRewriter\RefInitializationHoister.cs (21)
97var sacrificialTemp = _factory.SynthesizedLocal(type, refKind: RefKind.Ref); 137RefKind refKind, 155refKind: RefKind.None, 171refKind: RefKind.None, 192if (refKind != RefKind.None || field.FieldSymbol.IsReadOnly) return expr; 197if (refKind == RefKind.None) 207refKind: isFieldOfStruct ? refKind : RefKind.None, 238if (refKind != RefKind.None && refKind != RefKind.In) 240Debug.Assert(refKind is RefKindExtensions.StrictIn or RefKind.Ref or RefKind.Out); 241if (call.Method.RefKind != RefKind.None) 248refKind = RefKind.None; 259if (refKind != RefKind.None && refKind != RefKind.RefReadOnly) 261Debug.Assert(refKind is RefKindExtensions.StrictIn or RefKind.Ref or RefKind.In); 267refKind = RefKind.None; 276if (refKind != RefKind.None) 286Debug.Assert(_reportedError || expr is BoundLocal { LocalSymbol.RefKind: RefKind.None } 287or BoundParameter { ParameterSymbol.RefKind: RefKind.None });
Lowering\StateMachineRewriter\StateMachineFieldSymbol.cs (2)
64public override RefKind RefKind => RefKind.None;
Lowering\StateMachineRewriter\StateMachineRewriter.cs (2)
171if (local.RefKind != RefKind.None) 179Debug.Assert(local.RefKind == RefKind.None);
Lowering\StateMachineRewriter\SynthesizedStateMachineProperty.cs (2)
41public override RefKind RefKind 43get { return RefKind.None; }
Lowering\SynthesizedMethodBaseSymbol.cs (1)
141builder.Add(SynthesizedParameterSymbol.Create(this, this.TypeMap.SubstituteType(extra), ordinal++, RefKind.Ref));
Lowering\SyntheticBoundNodeFactory.cs (30)
574Debug.Assert(CurrentFunction.RefKind == RefKind.None); 579return new BoundReturnStatement(Syntax, CurrentFunction.RefKind != RefKind.None ? RefKind.Ref : RefKind.None, expression, @checked: false) { WasCompilerGenerated = true }; 599RefKind refKind = RefKind.None, 639return SynthesizedParameterSymbol.Create(container, TypeWithAnnotations.Create(type), ordinal, RefKind.None, name); 762public BoundObjectCreationExpression New(MethodSymbol constructor, ImmutableArray<BoundExpression> arguments, ImmutableArray<RefKind> argumentRefKinds) 872public static ImmutableArray<RefKind> ArgumentRefKindsFromParameterRefKinds(MethodSymbol method, bool useStrictArgumentRefKinds) 876if (!result.IsDefaultOrEmpty && (result.Contains(RefKind.RefReadOnlyParameter) || 877(useStrictArgumentRefKinds && result.Contains(RefKind.In)))) 879var builder = ArrayBuilder<RefKind>.GetInstance(result.Length); 881foreach (var refKind in result) 892public static RefKind ArgumentRefKindFromParameterRefKind(RefKind refKind, bool useStrictArgumentRefKinds) 896RefKind.In or RefKind.RefReadOnlyParameter when useStrictArgumentRefKinds => RefKindExtensions.StrictIn, 897RefKind.RefReadOnlyParameter => RefKind.In, 902public BoundCall Call(BoundExpression? receiver, MethodSymbol method, ImmutableArray<RefKind> refKinds, ImmutableArray<BoundExpression> args) 1651RefKind refKind = RefKind.None, 1668case RefKind.Out: 1669refKind = RefKind.Ref; 1672case RefKind.In: 1681Debug.Assert(argument.GetRefKind() != RefKind.In); 1682refKind = RefKind.None; 1686case RefKind.None: 1687case RefKind.Ref: 1718isRef: refKind != RefKind.None);
Operations\CSharpOperationFactory.cs (6)
752ImmutableArray<RefKind> argumentRefKinds = boundDynamicObjectCreationExpression.ArgumentRefKindsOpt.NullToEmpty(); 781ImmutableArray<RefKind> argumentRefKinds = boundDynamicInvocation.ArgumentRefKindsOpt.NullToEmpty(); 824ImmutableArray<RefKind> argumentRefKinds = boundDynamicIndexerAccess.ArgumentRefKindsOpt.NullToEmpty(); 863ImmutableArray<RefKind> argumentRefKinds = boundObjectInitializerMember.ArgumentRefKindsOpt.NullToEmpty(); 884MethodSymbol? accessor = isObjectOrCollectionInitializer || property.RefKind != RefKind.None 981return new DynamicInvocationOperation(operation, arguments, argumentNames: ImmutableArray<string?>.Empty, argumentRefKinds: ImmutableArray<RefKind>.Empty, _semanticModel, syntax, type, isImplicit);
SymbolDisplay\SymbolDisplayVisitor.cs (1)
254if (symbol.RefKind == RefKind.RefReadOnly)
SymbolDisplay\SymbolDisplayVisitor.Members.cs (9)
39case RefKind.Ref: 42case RefKind.RefReadOnly: 852symbol.RefKind != RefKind.Out && 873symbol.RefKind == RefKind.None && 1134private void AddParameterRefKind(RefKind refKind) 1138case RefKind.Out: 1142case RefKind.Ref: 1146case RefKind.In: 1150case RefKind.RefReadOnlyParameter:
Symbols\AnonymousTypes\AnonymousTypeField.cs (2)
23public readonly RefKind RefKind; 40RefKind refKind,
Symbols\AnonymousTypes\AnonymousTypeManager.Templates.cs (1)
253if (fields.Any(static f => f.RefKind != RefKind.None))
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.ConstructorSymbol.cs (3)
33paramsArr.Add(SynthesizedParameterSymbol.Create(this, property.TypeWithAnnotations, index, RefKind.None, property.Name)); 53public override RefKind RefKind 55get { return RefKind.None; }
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.DelegateTemplateSymbol.cs (5)
61new SynthesizedDelegateInvokeMethod.ParameterDescription(TypeWithAnnotations.Create(typeParams[i]), refKinds.IsNull ? RefKind.None : refKinds[i], ScopedKind.None, defaultValue: null, isParams: false, hasUnscopedRefAttribute: false)); 66var returnRefKind = (refKinds.IsNull || voidReturnTypeOpt is { }) ? RefKind.None : refKinds[parameterCount]; 147var returnRefKind = returnParameter.RefKind; 208var returnRefKind = returnParameter.RefKind;
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.EqualsMethodSymbol.cs (3)
25SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(this.Manager.System_Object), 0, RefKind.None, "value")); 38public override RefKind RefKind 40get { return RefKind.None; }
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.FieldSymbol.cs (2)
35public override RefKind RefKind => RefKind.None;
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.GetHashCodeMethodSymbol.cs (2)
42public override RefKind RefKind 44get { return RefKind.None; }
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.PropertyAccessorSymbol.cs (2)
39public override RefKind RefKind 41get { return RefKind.None; }
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.PropertySymbol.cs (2)
64public override RefKind RefKind 66get { return RefKind.None; }
Symbols\AnonymousTypes\SynthesizedSymbols\AnonymousType.ToStringMethodSymbol.cs (2)
42public override RefKind RefKind 44get { return RefKind.None; }
Symbols\BaseTypeAnalysis.cs (1)
203if (field.RefKind != RefKind.None)
Symbols\Compilation_WellKnownMembers.cs (13)
793internal SynthesizedAttributeData? SynthesizeDynamicAttribute(TypeSymbol type, int customModifiersCount, RefKind refKindOpt = RefKind.None) 798if (type.IsDynamic() && refKindOpt == RefKind.None && customModifiersCount == 0) 907internal static ImmutableArray<TypedConstant> Encode(TypeSymbol type, RefKind refKind, int customModifiersCount, TypeSymbol booleanType) 919internal static ImmutableArray<bool> Encode(TypeSymbol type, RefKind refKind, int customModifiersCount) 926internal static ImmutableArray<bool> EncodeWithoutCustomModifierFlags(TypeSymbol type, RefKind refKind) 933internal static void Encode(TypeSymbol type, int customModifiersCount, RefKind refKind, ArrayBuilder<bool> transformFlagsBuilder, bool addCustomModifierFlags) 937if (refKind != RefKind.None) 1028void handle(RefKind refKind, ImmutableArray<CustomModifier> customModifiers, TypeWithAnnotations twa) 1035if (refKind != RefKind.None) 1190return parameter.RefKind != RefKind.None; 1195return method.RefKind != RefKind.None; 1200return property.RefKind != RefKind.None;
Symbols\ErrorMethodSymbol.cs (2)
160public override RefKind RefKind 162get { return RefKind.None; }
Symbols\ErrorPropertySymbol.cs (2)
44public override RefKind RefKind { get { return RefKind.None; } }
Symbols\Extensions\SynthesizedExtensionMarker.cs (6)
25MethodKind.Ordinary, RefKind.None, GetDeclarationModifiers(), returnsVoid: false, returnsVoidIsSet: false, 91RefKind parameterRefKind = parameter.RefKind; 100else if (parameterRefKind == RefKind.Ref && !parameterType.IsValueType) 104else if (parameterRefKind is RefKind.In or RefKind.RefReadOnlyParameter 110if (parameter.Name is "" && parameterRefKind != RefKind.None)
Symbols\FieldSymbol.cs (2)
66public abstract RefKind RefKind { get; } 356if (DeriveUseSiteInfoFromType(ref result, this.TypeWithAnnotations, RefKind == RefKind.None ? AllowedRequiredModifierType.System_Runtime_CompilerServices_Volatile : AllowedRequiredModifierType.None) ||
Symbols\FunctionPointers\FunctionPointerMethodSymbol.cs (48)
28RefKind refKind = RefKind.None; 44case SyntaxKind.RefKeyword when refKind == RefKind.None: 48refKind = RefKind.RefReadOnly; 53refKind = RefKind.Ref; 59Debug.Assert(refKind != RefKind.None); 73if (returnType.IsVoidType() && refKind != RefKind.None) 88if (refKind != RefKind.None) 247RefKind returnRefKind, 250ImmutableArray<RefKind> parameterRefKinds, 271RefKind returnRefKind, 273ImmutableArray<RefKind> parameterRefKinds, 285if (returnRefKind == RefKind.None) 310private static CustomModifier? GetCustomModifierForRefKind(RefKind refKind, CSharpCompilation compilation) 312Debug.Assert(refKind is RefKind.None or RefKind.In or RefKind.Ref or RefKind.Out); 316RefKind.In => compilation.GetWellKnownType(WellKnownType.System_Runtime_InteropServices_InAttribute), 317RefKind.Out => compilation.GetWellKnownType(WellKnownType.System_Runtime_InteropServices_OutAttribute), 323Debug.Assert(refKind != RefKind.Out && refKind != RefKind.In); 351var returnVariance = RefKind == RefKind.None ? variance : VarianceKind.None; 366(VarianceKind.In, RefKind.None) => VarianceKind.Out, 367(VarianceKind.Out, RefKind.None) => VarianceKind.In, 443RefKind refKind, 488RefKind refKind, 493ImmutableArray<RefKind> parameterRefKinds, 496Debug.Assert(refKind != RefKind.Out); 497Debug.Assert(refCustomModifiers.IsDefaultOrEmpty || refKind != RefKind.None); 509Debug.Assert(refCustomModifiers.IsEmpty || refKind != RefKind.None); 513static ImmutableArray<CustomModifier> getCustomModifierArrayForRefKind(RefKind refKind, CSharpCompilation compilation) 519RefKind refKind, 553RefKind = getRefKind(retInfo, RefCustomModifiers, RefKind.RefReadOnly, RefKind.Ref, requiresLocationAllowed: false); 554Debug.Assert(RefKind != RefKind.Out); 569RefKind paramRefKind = getRefKind(param, paramRefCustomMods, RefKind.In, RefKind.Out, requiresLocationAllowed: true); 581static RefKind getRefKind(ParamInfo<TypeSymbol> param, ImmutableArray<CustomModifier> paramRefCustomMods, RefKind hasInRefKind, RefKind hasOutRefKind, bool requiresLocationAllowed) 585false => RefKind.None, 588true when requiresLocationAllowed && CustomModifierUtils.HasRequiresLocationAttributeModifier(paramRefCustomMods) => RefKind.RefReadOnlyParameter, 589true => RefKind.Ref, 648var modifiersToSearch = RefKind != RefKind.None ? RefCustomModifiers : ReturnTypeWithAnnotations.CustomModifiers; 671var modifiersToSearch = RefKind != RefKind.None ? RefCustomModifiers : ReturnTypeWithAnnotations.CustomModifiers; 767public override RefKind RefKind { get; }
Symbols\FunctionPointers\FunctionPointerParameterSymbol.cs (5)
16public FunctionPointerParameterSymbol(TypeWithAnnotations typeWithAnnotations, RefKind refKind, int ordinal, FunctionPointerMethodSymbol containingSymbol, ImmutableArray<CustomModifier> refCustomModifiers) 27public override RefKind RefKind { get; } 81internal override bool IsMetadataIn => RefKind is RefKind.In or RefKind.RefReadOnlyParameter; 82internal override bool IsMetadataOut => RefKind == RefKind.Out;
Symbols\FunctionPointers\FunctionPointerTypeSymbol.cs (13)
36RefKind returnRefKind, 39ImmutableArray<RefKind> parameterRefKinds, 50RefKind returnRefKind, 52ImmutableArray<RefKind> parameterRefKinds, 190internal static bool RefKindEquals(TypeCompareKind compareKind, RefKind refKind1, RefKind refKind2) 192? (refKind1 == RefKind.None) == (refKind2 == RefKind.None) 201internal static RefKind GetRefKindForHashCode(RefKind refKind) 202=> refKind == RefKind.None ? RefKind.None : RefKind.Ref;
Symbols\LocalSymbol.cs (2)
375public bool IsRef => RefKind != RefKind.None; 377public abstract RefKind RefKind
Symbols\MemberSignatureComparer.cs (14)
251/// the difference between <see cref="RefKind.Out"/> and <see cref="RefKind.Ref"/>. 553RefKind refKind1; 558RefKind refKind2; 783var refKind1 = param1.RefKind; 784var refKind2 = param2.RefKind; 799if ((refKind1 == RefKind.None) != (refKind2 == RefKind.None)) 808static bool areRefKindsCompatible(RefKindCompareMode refKindCompareMode, RefKind refKind1, RefKind refKind2) 817return (refKind1, refKind2) is (RefKind.RefReadOnlyParameter, RefKind.In) or (RefKind.In, RefKind.RefReadOnlyParameter);
Symbols\MemberSymbolExtensions.cs (2)
323internal static ImmutableArray<RefKind> GetParameterRefKinds(this Symbol member) 332return default(ImmutableArray<RefKind>);
Symbols\Metadata\PE\DynamicTypeDecoder.cs (7)
69RefKind targetSymbolRefKind = RefKind.None) 89RefKind targetSymbolRefKind, 107RefKind targetSymbolRefKind, 209private bool HandleRefKind(RefKind refKind) 212return refKind == RefKind.None || !ConsumeFlag(); 398static (TypeWithAnnotations, bool madeChanges) handle(ref DynamicTypeDecoder decoder, RefKind refKind, ImmutableArray<CustomModifier> refCustomModifiers, TypeWithAnnotations typeWithAnnotations)
Symbols\Metadata\PE\MemberRefMetadataDecoder.cs (2)
183(field.RefKind != RefKind.None) == fieldInfo.IsByRef && 254if ((candidateParam.RefKind != RefKind.None) != targetParam.IsByRef)
Symbols\Metadata\PE\PEFieldSymbol.cs (9)
88public void SetRefKind(RefKind refKind) 95public RefKind RefKind => (RefKind)((_bits >> RefKindOffset) & RefKindMask); 325RefKind refKind = fieldInfo.IsByRef ? 326moduleSymbol.Module.HasIsReadOnlyAttribute(_handle) ? RefKind.RefReadOnly : RefKind.Ref : 327RefKind.None; 377public override RefKind RefKind 636if (RefKind != RefKind.None &&
Symbols\Metadata\PE\PEMethodSymbol.cs (11)
666public override RefKind RefKind => Signature.ReturnParam.RefKind; 1134case RefKind.None: 1135case RefKind.Ref: 1136case RefKind.In: 1137case RefKind.RefReadOnlyParameter: 1161foreach (var kind in this.ParameterRefKinds) 1165case RefKind.None: 1166case RefKind.In: 1168case RefKind.Out: 1169case RefKind.Ref: 1170case RefKind.RefReadOnlyParameter:
Symbols\Metadata\PE\PEParameterSymbol.cs (20)
73public RefKind RefKind 75get { return (RefKind)((_bits >> RefKindOffset) & RefKindMask); } 98Debug.Assert(EnumUtilities.ContainsAllValues<RefKind>(RefKindMask)); 104public PackedFlags(RefKind refKind, bool attributesAreComplete, bool hasNameInMetadata, ScopedKind scope, bool hasUnscopedRefAttribute) 258RefKind refKind = RefKind.None; 264refKind = isByRef ? RefKind.Ref : RefKind.None; 292refKind = RefKind.Out; 296refKind = RefKind.RefReadOnlyParameter; 300refKind = RefKind.In; 304refKind = RefKind.Ref; 333Debug.Assert(refKind != RefKind.None); 419Debug.Assert(parameter.RefKind != RefKind.RefReadOnlyParameter); 420isBad |= (parameter.RefKind == RefKind.RefReadOnly) != hasInAttributeModifier; 422else if (parameter.RefKind is RefKind.In or RefKind.RefReadOnlyParameter) 469public override RefKind RefKind 1117bool filterIsReadOnlyAttribute = this.RefKind == RefKind.In; 1118bool filterRequiresLocationAttribute = this.RefKind == RefKind.RefReadOnlyParameter;
Symbols\Metadata\PE\PEPropertySymbol.cs (8)
34private readonly RefKind _refKind; 210var isBad = (result.RefKind == RefKind.In) != result.RefCustomModifiers.HasInAttributeModifier(); 281_refKind = RefKind.RefReadOnly; 285_refKind = RefKind.Ref; 290_refKind = RefKind.None; 376if (this.RefKind != RefKind.None && _setMethod != null) 680public override RefKind RefKind 739this.RefKind == RefKind.RefReadOnly ? AttributeDescription.IsReadOnlyAttribute : default,
Symbols\MethodSymbol.cs (5)
220return this.RefKind == RefKind.Ref; 231Debug.Assert(this.RefKind != RefKind.Out); 232return this.RefKind == RefKind.RefReadOnly; 239public abstract RefKind RefKind { get; } 921internal ImmutableArray<RefKind> ParameterRefKinds
Symbols\NamedTypeSymbol.cs (3)
398if (thisParam.RefKind == RefKind.Ref && !thisParam.Type.IsValueType) 403if (thisParam.RefKind is RefKind.In or RefKind.RefReadOnlyParameter
Symbols\ParameterSignature.cs (10)
19internal readonly ImmutableArray<RefKind> parameterRefKinds; 22new ParameterSignature(ImmutableArray<TypeWithAnnotations>.Empty, default(ImmutableArray<RefKind>)); 25ImmutableArray<RefKind> parameterRefKinds) 39ArrayBuilder<RefKind> refs = null; 46var refKind = parameter.RefKind; 49if (refKind != RefKind.None) 51refs = ArrayBuilder<RefKind>.GetInstance(parm, RefKind.None); 61ImmutableArray<RefKind> refKinds = refs != null ? refs.ToImmutableAndFree() : default(ImmutableArray<RefKind>);
Symbols\ParameterSymbol.cs (7)
59public abstract RefKind RefKind { get; } 165RefKind refKind; 167((refKind = RefKind) == RefKind.None || 168(refKind is RefKind.In or RefKind.RefReadOnlyParameter) || 169(refKind == RefKind.Ref && ContainingSymbol.ContainingType.IsComImport)); 473RefKind IParameterSymbolInternal.RefKind => RefKind;
Symbols\PropertySymbol.cs (4)
71public bool ReturnsByRef { get { return this.RefKind == RefKind.Ref; } } 76public bool ReturnsByRefReadonly { get { return this.RefKind == RefKind.RefReadOnly; } } 81public abstract RefKind RefKind { get; } 126internal ImmutableArray<RefKind> ParameterRefKinds
Symbols\PropertySymbolExtensions.cs (2)
73if (param.RefKind == RefKind.Ref || param.RefKind == RefKind.Out)
Symbols\PublicModel\FieldSymbol.cs (1)
34RefKind IFieldSymbol.RefKind => _underlying.RefKind;
Symbols\PublicModel\LocalSymbol.cs (1)
52RefKind ILocalSymbol.RefKind => _underlying.RefKind;
Symbols\PublicModel\MethodSymbol.cs (1)
341RefKind IMethodSymbol.RefKind => _underlying.RefKind;
Symbols\PublicModel\ParameterSymbol.cs (1)
59RefKind IParameterSymbol.RefKind => _underlying.RefKind;
Symbols\PublicModel\PropertySymbol.cs (1)
110RefKind IPropertySymbol.RefKind => _underlying.RefKind;
Symbols\ReducedExtensionMethodSymbol.cs (3)
489public override RefKind RefKind 541internal override bool IsEffectivelyReadOnly => _reducedFrom.Parameters[0].RefKind is RefKind.In or RefKind.RefReadOnlyParameter;
Symbols\RefKindExtensions.cs (14)
14public static bool IsManagedReference(this RefKind refKind) 16Debug.Assert(refKind <= RefKind.RefReadOnly); 18return refKind != RefKind.None; 21public static RefKind GetRefKind(this SyntaxKind syntaxKind) 26return RefKind.Ref; 28return RefKind.Out; 30return RefKind.In; 32return RefKind.None; 38public static bool IsWritableReference(this RefKind refKind) 42case RefKind.Ref: 43case RefKind.Out: 45case RefKind.None: 46case RefKind.In: 47case RefKind.RefReadOnlyParameter:
Symbols\Retargeting\RetargetingFieldSymbol.cs (1)
73public override RefKind RefKind => _underlyingField.RefKind;
Symbols\SignatureOnlyMethodSymbol.cs (3)
27private readonly RefKind _refKind; 41RefKind refKind, 75public override RefKind RefKind { get { return _refKind; } }
Symbols\SignatureOnlyParameterSymbol.cs (3)
21private readonly RefKind _refKind; 28RefKind refKind) 50public override RefKind RefKind { get { return _refKind; } }
Symbols\SignatureOnlyPropertySymbol.cs (3)
24private readonly RefKind _refKind; 34RefKind refKind, 50public override RefKind RefKind { get { return _refKind; } }
Symbols\Source\CustomModifierUtils.cs (4)
43destinationMethod.RefKind != RefKind.None ? constructedSourceMethod.RefCustomModifiers : ImmutableArray<CustomModifier>.Empty; 73const RefKind refKind = RefKind.None; 146destinationParameter.RefKind != RefKind.None ? sourceParameter.RefCustomModifiers : ImmutableArray<CustomModifier>.Empty,
Symbols\Source\FieldSymbolWithAttributesAndModifiers.cs (1)
394if (this.RefKind == RefKind.RefReadOnly)
Symbols\Source\GlobalExpressionVariable.cs (2)
69public sealed override RefKind RefKind => RefKind.None;
Symbols\Source\LambdaParameterSymbol.cs (1)
23RefKind refKind,
Symbols\Source\LambdaSymbol.cs (8)
23private RefKind _refKind; 49ImmutableArray<RefKind> parameterRefKinds, 50RefKind refKind, 149public override RefKind RefKind 168internal void SetInferredReturnType(RefKind refKind, TypeWithAnnotations inferredReturnType) 172Debug.Assert(refKind != RefKind.RefReadOnly); 331ImmutableArray<RefKind> parameterRefKinds) 354var refKind = unboundLambda.RefKind(p);
Symbols\Source\LocalFunctionSymbol.cs (5)
23private readonly RefKind _refKind; 244public override RefKind RefKind => _refKind; 268if (_refKind == RefKind.RefReadOnly) 294Debug.Assert(_refKind == RefKind.None 358(_refKind == RefKind.RefReadOnly && DeclaringCompilation is { } compilation) ?
Symbols\Source\ParameterHelpers.cs (37)
42ParameterSyntax syntax, RefKind refKind, int ordinal, 71ParameterSyntax syntax, RefKind refKind, int ordinal, 134FunctionPointerParameterSyntax syntax, RefKind refKind, int ordinal, 144RefKind.In => CreateInModifiers(binder, diagnostics, syntax), 145RefKind.RefReadOnlyParameter => CreateRefReadonlyParameterModifiers(binder, diagnostics, syntax), 146RefKind.Out => CreateOutModifiers(binder, diagnostics, syntax), 177Func<Binder, TOwningSymbol, TypeWithAnnotations, TParameterSyntax, RefKind, int, SyntaxToken, SyntaxToken, bool, ScopedKind, BindingDiagnosticBag, TParameterSymbol> parameterCreationFunc, 257Func<Binder, TOwningSymbol, TypeWithAnnotations, TParameterSyntax, RefKind, int, SyntaxToken, SyntaxToken, bool, ScopedKind, BindingDiagnosticBag, TParameterSymbol> parameterCreationFunc, 269var refKind = GetModifiers(parameterSyntax.Modifiers, ignoreParams: inExtension, out SyntaxToken refnessKeyword, out SyntaxToken paramsKeyword, out SyntaxToken thisKeyword, out ScopedKind scope); 310if (!allowRefOrOut && (refKind == RefKind.Ref || refKind == RefKind.Out)) 348if (parameter.RefKind == RefKind.In) 359else if (parameter.RefKind == RefKind.RefReadOnlyParameter) 452internal static bool IsRefScopedByDefault(bool useUpdatedEscapeRules, RefKind refKind) 454return useUpdatedEscapeRules && refKind == RefKind.Out; 839RefKind refKind, 886else if (refKind != RefKind.None && 943var refKind = GetModifiers(parameterSyntax.Modifiers, ignoreParams: inExtension, out SyntaxToken refnessKeyword, out SyntaxToken paramsKeyword, out SyntaxToken thisKeyword, out _); 949if (refKind == RefKind.Ref || refKind == RefKind.Out) 1058if (refKind == RefKind.RefReadOnlyParameter) 1124internal static RefKind GetModifiers(SyntaxTokenList modifiers, bool ignoreParams, out SyntaxToken refnessKeyword, out SyntaxToken paramsKeyword, out SyntaxToken thisKeyword, out ScopedKind scope) 1126var refKind = RefKind.None; 1138if (refKind == RefKind.None) 1141refKind = RefKind.Out; 1145if (refKind == RefKind.None) 1148refKind = RefKind.Ref; 1152if (refKind == RefKind.None) 1155refKind = RefKind.In; 1168Debug.Assert(refKind == RefKind.None); 1172if (refKind == RefKind.Ref && refnessKeyword.GetNextToken() == modifier) 1174refKind = RefKind.RefReadOnlyParameter; 1182scope = (refKind == RefKind.None) ? ScopedKind.ScopedValue : ScopedKind.ScopedRef; 1192internal static ImmutableArray<CustomModifier> ConditionallyCreateInModifiers(RefKind refKind, bool addRefReadOnlyModifier, Binder binder, BindingDiagnosticBag diagnostics, SyntaxNode syntax) 1194if (addRefReadOnlyModifier && refKind is RefKind.In or RefKind.RefReadOnlyParameter)
Symbols\Source\SourceAssemblySymbol.cs (1)
2744else if (field.RefKind != RefKind.None)
Symbols\Source\SourceClonedParameterSymbol.cs (1)
97public override RefKind RefKind
Symbols\Source\SourceComplexParameterSymbol.cs (10)
46RefKind refKind, 910return RefKind != RefKind.None || (HasParamsModifier && Type.IsRefLikeOrAllowsRefLikeType()); 935if (this.RefKind == RefKind.RefReadOnlyParameter && this.IsOptional && this.ParameterSyntax.Default is null) 1464case RefKind.Ref: 1471case RefKind.Out: 1478case RefKind.In: 1485case RefKind.RefReadOnlyParameter: 1756RefKind refKind, 1782RefKind refKind, 1798Debug.Assert(refKind != RefKind.None || _refCustomModifiers.IsEmpty);
Symbols\Source\SourceConstructorSymbol.cs (1)
112methodKind, RefKind.None, declarationModifiers, returnsVoid: true, returnsVoidIsSet: true, hasAnyBody: hasAnyBody,
Symbols\Source\SourceDelegateMethodSymbol.cs (13)
28RefKind refKind, 56returnTypeSyntax = returnTypeSyntax.SkipScoped(out _).SkipRefInLocalOrReturn(diagnostics, out RefKind refKind); 218: base(delegateType, voidType, syntax, MethodKind.Constructor, RefKind.None, DeclarationModifiers.Public) 221SynthesizedParameterSymbol.Create(this, objectType, 0, RefKind.None, "object"), 222SynthesizedParameterSymbol.Create(this, intPtrType, 1, RefKind.None, "method"))); 260RefKind refKind, 283if (this.RefKind == RefKind.RefReadOnly) 322if (this.RefKind == RefKind.RefReadOnly) 358: base((SourceNamedTypeSymbol)invoke.ContainingType, iAsyncResultType, syntax, MethodKind.Ordinary, RefKind.None, DeclarationModifiers.Virtual | DeclarationModifiers.Public) 368parameters.Add(SynthesizedParameterSymbol.Create(this, asyncCallbackType, paramCount, RefKind.None, GetUniqueParameterName(parameters, "callback"))); 369parameters.Add(SynthesizedParameterSymbol.Create(this, objectType, paramCount + 1, RefKind.None, GetUniqueParameterName(parameters, "object"))); 407if (p.RefKind != RefKind.None) 414parameters.Add(SynthesizedParameterSymbol.Create(this, iAsyncResultType, ordinal++, RefKind.None, GetUniqueParameterName(parameters, "result")));
Symbols\Source\SourceDestructorSymbol.cs (1)
69MethodKind.Destructor, RefKind.None, declarationModifiers, returnsVoid: true, returnsVoidIsSet: true,
Symbols\Source\SourceEnumConstantSymbol.cs (2)
59public sealed override RefKind RefKind => RefKind.None;
Symbols\Source\SourceEventAccessorSymbol.cs (1)
37RefKind.None,
Symbols\Source\SourceFieldSymbol.cs (1)
139if (RefKind == RefKind.RefReadOnly)
Symbols\Source\SourceLocalSymbol.cs (3)
33private readonly RefKind _refKind; 100_scope = _refKind != RefKind.None 578public override RefKind RefKind
Symbols\Source\SourceMemberContainerSymbol.cs (18)
2237var refKind1 = method1.Parameters[i].RefKind; 2238var refKind2 = method2.Parameters[i].RefKind; 4473if (methodParam.RefKind != RefKind.None) 4496methodParams[0].RefKind == RefKind.None && 4889RefKind.Out 4891RefKind.None, 4937RefKind.None 4939RefKind.None, 4990RefKind.None)), 4991RefKind.None, 5046RefKind.None, 5125RefKind.None, 5220RefKind.None, 5251RefKind.None, 5317RefKind.None 5319RefKind.None, 5518_ = fieldSyntax.Declaration.Type.SkipScoped(out _).SkipRefInField(out var refKind); 5527var modifiers = SourceMemberFieldSymbol.MakeModifiers(this, fieldSyntax.Declaration.Variables[0].Identifier, fieldSyntax.Modifiers, isRefField: refKind != RefKind.None, diagnostics, out modifierErrors);
Symbols\Source\SourceMemberContainerSymbol_ImplementationChecks.cs (19)
1283overrideMethod.RefKind == RefKind.Ref ? RefKind.Ref : RefKind.Out, 1349RefKind refKind, 1355case RefKind.Ref: 1361case RefKind.Out: 1396p is { EffectiveScope: ScopedKind.None, RefKind: RefKind.Ref } or { EffectiveScope: ScopedKind.ScopedRef, RefKind: RefKind.Out } && 1407if ((overrideThisParameter is { RefKind: RefKind.Ref or RefKind.Out } && overrideThisParameter.Type.IsRefLikeOrAllowsRefLikeType()) || 1409(method.RefKind is RefKind.Ref or RefKind.RefReadOnly)) 1413else if (parameters.Any(p => (p.RefKind is RefKind.Ref or RefKind.Out) && p.Type.IsRefLikeOrAllowsRefLikeType())) 1424int nRefParameters = parameters.Count(p => p.RefKind is RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter or RefKind.Out); 1429else if (parameters.Any(p => p.RefKind == RefKind.None && p.Type.IsRefLikeOrAllowsRefLikeType()))
Symbols\Source\SourceMemberFieldSymbol.cs (13)
337internal readonly RefKind RefKind; 340internal TypeAndRefKind(RefKind refKind, TypeWithAnnotations type) 432public sealed override RefKind RefKind => GetTypeAndRefKind(ConsList<FieldSymbol>.Empty).RefKind; 462RefKind refKind = RefKind.None; 500Debug.Assert(refKind is RefKind.None or RefKind.Ref or RefKind.RefReadOnly); 502if (refKind != RefKind.None) 518type = binder.BindTypeOrVarKeyword(typeSyntax.SkipScoped(out _).SkipRefInField(out RefKind refKindToAssert), diagnostics, out isVar); 519Debug.Assert(refKindToAssert == RefKind.None); // Otherwise we might need to report an error 550var initializerOpt = executableBinder.BindInferredVariableInitializer(diagnostics, RefKind.None, syntaxNode, declarator); 579if (refKind != RefKind.None)
Symbols\Source\SourceMemberMethodSymbol.cs (7)
131public RefKind RefKind 133get { return (RefKind)((_flags >> RefKindOffset) & RefKindMask); } 177Debug.Assert(EnumUtilities.ContainsAllValues<RefKind>(RefKindMask)); 189RefKind refKind, 235RefKind refKind, 423RefKind refKind, 1083public sealed override RefKind RefKind => this.flags.RefKind;
Symbols\Source\SourceMethodSymbol.cs (1)
71if (parameter.RefKind != RefKind.None)
Symbols\Source\SourceMethodSymbolWithAttributes.cs (4)
779if (param.RefKind == RefKind.Out) 1413static void checkAndReportManagedTypes(TypeSymbol type, RefKind refKind, SyntaxNode syntax, bool isParam, BindingDiagnosticBag diagnostics) 1415if (refKind != RefKind.None) 1538if (this.RefKind != RefKind.None)
Symbols\Source\SourceNamedTypeSymbol_Extension.cs (9)
316if (signature.RefKind != RefKind.None) 334if (parameter.RefKind != RefKind.None) 748static void appendRefKind(RefKind refKind, StringBuilder builder, bool forParameter = false) 752RefKind.None => "", 753RefKind.Ref => "ref ", 754RefKind.Out => "out ", 755RefKind.In when forParameter => "in ", 756RefKind.RefReadOnly => "ref readonly ", 757RefKind.RefReadOnlyParameter => "ref readonly ",
Symbols\Source\SourceOrdinaryMethodOrUserDefinedOperatorSymbol.cs (2)
118else if (RefKind == RefKind.RefReadOnly) 242if (RefKind == RefKind.RefReadOnly)
Symbols\Source\SourceOrdinaryMethodSymbol.cs (6)
155Debug.Assert(this.RefKind == RefKind.None || !returnType.IsVoidType() || returnTypeSyntax.HasErrors); 212var parameter0RefKind = this.Parameters[0].RefKind; 221else if (parameter0RefKind == RefKind.Ref && !parameter0Type.Type.IsValueType) 225else if (parameter0RefKind is RefKind.In or RefKind.RefReadOnlyParameter 865else if (IsPartial && !HasExplicitAccessModifier && Parameters.Any(static p => p.RefKind == RefKind.Out))
Symbols\Source\SourceParameterSymbol.cs (7)
26private readonly RefKind _refKind; 35RefKind refKind, 105RefKind refKind, 215public sealed override RefKind RefKind 295internal override bool IsMetadataIn => RefKind is RefKind.In or RefKind.RefReadOnlyParameter; 297internal override bool IsMetadataOut => RefKind == RefKind.Out;
Symbols\Source\SourceParameterSymbolBase.cs (2)
121case RefKind.In: 124case RefKind.RefReadOnlyParameter:
Symbols\Source\SourcePropertySymbolBase.cs (10)
59private readonly RefKind _refKind; 98RefKind refKind, 251_lazyRefCustomModifiers = _refKind != RefKind.None ? overriddenOrImplementedProperty.RefCustomModifiers : ImmutableArray<CustomModifier>.Empty; 270else if (_refKind == RefKind.RefReadOnly) 359public sealed override RefKind RefKind 881if (RefKind != RefKind.None && IsRequired) 905if (this.RefKind != RefKind.None) 942if (_refKind != RefKind.None) 969else if (RefKind != RefKind.None) 1041if (_refKind == RefKind.RefReadOnly)
Symbols\Source\SourceSimpleParameterSymbol.cs (2)
24RefKind refKind, 36RefKind refKind,
Symbols\Source\SourceUserDefinedOperatorSymbolBase.cs (8)
41methodKind, RefKind.None, declarationModifiers, 401case RefKind.Out: // 'out' is disallowed in general 402case RefKind.Ref: // 'ref' receivers are disallowed for types not known to be a struct 405case RefKind.In: 406case RefKind.RefReadOnlyParameter: 415case RefKind.None: 473if (p.RefKind != RefKind.None && p.RefKind != RefKind.In)
Symbols\Source\ThisParameterSymbol.cs (5)
153public override RefKind RefKind 159return RefKind.None; 164return RefKind.Out; 169return RefKind.In; 172return RefKind.Ref;
Symbols\SubstitutedFieldSymbol.cs (1)
106public override RefKind RefKind => _underlyingField.RefKind;
Symbols\SymbolExtensions.cs (4)
474internal static void GetTypeOrReturnType(this Symbol symbol, out RefKind refKind, out TypeWithAnnotations returnType, 481refKind = RefKind.None; 499refKind = RefKind.None; 516refKind = RefKind.None;
Symbols\Synthesized\ReadOnlyListType\SynthesizedReadOnlyListConstructor.cs (1)
15SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(parameterType), ordinal: 0, RefKind.None, parameterName));
Symbols\Synthesized\ReadOnlyListType\SynthesizedReadOnlyListEnumeratorConstructor.cs (1)
15SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(parameterType), ordinal: 0, RefKind.None, "item"));
Symbols\Synthesized\ReadOnlyListType\SynthesizedReadOnlyListProperty.cs (2)
33public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\Records\SynthesizedPrimaryConstructor.cs (1)
44RefKind.None,
Symbols\Synthesized\Records\SynthesizedPrimaryConstructorParameterBackingFieldSymbol.cs (2)
48public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\Records\SynthesizedRecordBaseEquals.cs (1)
33ordinal: 0, RefKind.None, "other", Locations)));
Symbols\Synthesized\Records\SynthesizedRecordClone.cs (1)
124if (ctor.ParameterCount == 1 && ctor.Parameters[0].RefKind == RefKind.None &&
Symbols\Synthesized\Records\SynthesizedRecordCopyCtor.cs (2)
30RefKind.None, 148method.Parameters[0].RefKind == RefKind.None;
Symbols\Synthesized\Records\SynthesizedRecordDeconstruct.cs (1)
41RefKind.Out,
Symbols\Synthesized\Records\SynthesizedRecordEqualityContractProperty.cs (1)
42RefKind.None,
Symbols\Synthesized\Records\SynthesizedRecordEqualityOperator.cs (1)
45if (member is MethodSymbol candidate && candidate.ParameterCount == 1 && candidate.Parameters[0].RefKind == RefKind.None &&
Symbols\Synthesized\Records\SynthesizedRecordEqualityOperatorBase.cs (2)
75ordinal: 0, RefKind.None, "left", Locations), 78ordinal: 1, RefKind.None, "right", Locations)));
Symbols\Synthesized\Records\SynthesizedRecordEquals.cs (1)
41ordinal: 0, RefKind.None, "other", Locations)));
Symbols\Synthesized\Records\SynthesizedRecordObjEquals.cs (1)
36ordinal: 0, RefKind.None, "obj", Locations)));
Symbols\Synthesized\Records\SynthesizedRecordOrdinaryMethod.cs (1)
17MethodKind.Ordinary, RefKind.None, declarationModifiers, returnsVoid: false, returnsVoidIsSet: false,
Symbols\Synthesized\Records\SynthesizedRecordPrintMembers.cs (1)
98ordinal: 0, RefKind.None, "builder", Locations)));
Symbols\Synthesized\Records\SynthesizedRecordPropertySymbol.cs (1)
40RefKind.None,
Symbols\Synthesized\RefKindVector.cs (11)
39internal RefKind this[int index] 46(false, false, false) => RefKind.None, 47(false, false, true) => RefKind.Ref, 48(false, true, false) => RefKind.Out, 49(false, true, true) => RefKind.RefReadOnly, 50(true, false, false) => RefKind.RefReadOnlyParameter, 59RefKind.None => (false, false, false), 60RefKind.Ref => (false, false, true), 61RefKind.Out => (false, true, false), 62RefKind.RefReadOnly => (false, true, true), 63RefKind.RefReadOnlyParameter => (true, false, false),
Symbols\Synthesized\SynthesizedAccessorValueParameterSymbol.cs (1)
24: base(accessor, ordinal, RefKind.None, ParameterSymbol.ValueParameterName, accessor.TryGetFirstLocation(),
Symbols\Synthesized\SynthesizedBackingFieldSymbol.cs (4)
96Debug.Assert(property.RefKind is RefKind.None or RefKind.Ref or RefKind.RefReadOnly); 122public override RefKind RefKind => _property.RefKind;
Symbols\Synthesized\SynthesizedDelegateSymbol.cs (7)
21SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(objectType), 0, RefKind.None, "object"), 22SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intPtrType), 1, RefKind.None, "method")); 35internal ParameterDescription(TypeWithAnnotations type, RefKind refKind, ScopedKind scope, ConstantValue? defaultValue, bool isParams, bool hasUnscopedRefAttribute) 46internal readonly RefKind RefKind; 59RefKind refKind) 68RefCustomModifiers = refKind == RefKind.RefReadOnly ? 166public override RefKind RefKind { get; }
Symbols\Synthesized\SynthesizedEmbeddedExtensionMarkerNameAttributeSymbol.cs (5)
43return [SynthesizedParameterSymbol.Create(ctor, TypeWithAnnotations.Create(systemStringType), ordinal: 0, RefKind.None, name: "name")]; 99public override RefKind RefKind => RefKind.None; 167public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\SynthesizedEmbeddedNativeIntegerAttributeSymbol.cs (1)
53m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, boolArrayType, 0, RefKind.None)),
Symbols\Synthesized\SynthesizedEmbeddedNullableAttributeSymbol.cs (2)
53m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, annotatedByteType, 0, RefKind.None)), 57m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, byteArrayType, 0, RefKind.None)),
Symbols\Synthesized\SynthesizedEmbeddedNullableContextAttributeSymbol.cs (1)
41m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, TypeWithAnnotations.Create(systemByteType), 0, RefKind.None)),
Symbols\Synthesized\SynthesizedEmbeddedNullablePublicOnlyAttributeSymbol.cs (1)
41m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, TypeWithAnnotations.Create(systemBooleanType), 0, RefKind.None)),
Symbols\Synthesized\SynthesizedEmbeddedRefSafetyRulesAttributeSymbol.cs (1)
39m => ImmutableArray.Create(SynthesizedParameterSymbol.Create(m, TypeWithAnnotations.Create(int32Type), 0, RefKind.None)),
Symbols\Synthesized\SynthesizedEntryPointSymbol.cs (11)
115public override RefKind RefKind 117get { return RefKind.None; } 302default(ImmutableArray<RefKind>), 368argumentRefKindsOpt: default(ImmutableArray<RefKind>), 394argumentRefKindsOpt: default(ImmutableArray<RefKind>), 447refKind: RefKind.None, 465refKind: RefKind.None, 559RefKind.None, 578TypeWithAnnotations.Create(submissionArrayType), 0, RefKind.None, "submissionArray")); 629argumentRefKindsOpt: default(ImmutableArray<RefKind>), 650RefKind.None,
Symbols\Synthesized\SynthesizedEnumValueFieldSymbol.cs (2)
29public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\SynthesizedFieldSymbol.cs (2)
36public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\SynthesizedGlobalMethodSymbol.cs (2)
206public override RefKind RefKind 208get { return RefKind.None; }
Symbols\Synthesized\SynthesizedHotReloadExceptionConstructorSymbol.cs (3)
19SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(stringType), ordinal: 0, RefKind.None), 20SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), ordinal: 1, RefKind.None) 58delegateInvoke.GetParameters() is not [{ RefKind: RefKind.None } parameter] ||
Symbols\Synthesized\SynthesizedImplementationMethod.cs (1)
96public sealed override RefKind RefKind
Symbols\Synthesized\SynthesizedInlineArrayAsReadOnlySpanMethod.cs (2)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.In, "buffer"), 18SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 1, RefKind.None, "length")));
Symbols\Synthesized\SynthesizedInlineArrayAsSpanMethod.cs (2)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.Ref, "buffer"), 18SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 1, RefKind.None, "length")));
Symbols\Synthesized\SynthesizedInlineArrayElementRefMethod.cs (4)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.Ref, "buffer"), 18SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 1, RefKind.None, "index"))); 21public override RefKind RefKind => RefKind.Ref;
Symbols\Synthesized\SynthesizedInlineArrayElementRefReadOnlyMethod.cs (4)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.In, "buffer"), 18SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(intType), 1, RefKind.None, "index"))); 21public override RefKind RefKind => RefKind.RefReadOnly;
Symbols\Synthesized\SynthesizedInlineArrayFirstElementRefMethod.cs (3)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.Ref, "buffer"))); 20public override RefKind RefKind => RefKind.Ref;
Symbols\Synthesized\SynthesizedInlineArrayFirstElementRefReadOnlyMethod.cs (3)
17this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(TypeParameters[0]), 0, RefKind.In, "buffer"))); 20public override RefKind RefKind => RefKind.RefReadOnly;
Symbols\Synthesized\SynthesizedInstanceConstructor.cs (2)
149public override RefKind RefKind 151get { return RefKind.None; }
Symbols\Synthesized\SynthesizedInteractiveInitializerMethod.cs (2)
114public override RefKind RefKind 116get { return RefKind.None; }
Symbols\Synthesized\SynthesizedIntrinsicOperatorSymbol.cs (6)
217public override RefKind RefKind 221return RefKind.None; 471) : base(container, TypeWithAnnotations.Create(type), ordinal, RefKind.None, ScopedKind.None, name) 475internal override bool IsMetadataIn => RefKind is RefKind.In or RefKind.RefReadOnlyParameter; 477internal override bool IsMetadataOut => RefKind == RefKind.Out;
Symbols\Synthesized\SynthesizedLambdaCacheFieldSymbol.cs (2)
36public override RefKind RefKind => RefKind.None;
Symbols\Synthesized\SynthesizedLocal.cs (5)
27private readonly RefKind _refKind; 41RefKind refKind = RefKind.None 51Debug.Assert(refKind != RefKind.Out); 98public sealed override RefKind RefKind
Symbols\Synthesized\SynthesizedParameterSymbol.cs (14)
22private readonly RefKind _refKind; 29RefKind refKind, 47public override RefKind RefKind => _refKind; 184case RefKind.In: 187case RefKind.RefReadOnlyParameter: 244RefKind refKind, 251internal sealed override bool IsMetadataIn => RefKind is RefKind.In or RefKind.RefReadOnlyParameter; 253internal sealed override bool IsMetadataOut => RefKind == RefKind.Out; 261RefKind refKind, 352RefKind refKind, 413internal override bool IsMetadataIn => RefKind is RefKind.In or RefKind.RefReadOnlyParameter || _baseParameterForAttributes?.IsMetadataIn == true; 415internal override bool IsMetadataOut => RefKind == RefKind.Out || _baseParameterForAttributes?.IsMetadataOut == true;
Symbols\Synthesized\SynthesizedSealedPropertyAccessor.cs (1)
181public override RefKind RefKind
Symbols\Synthesized\SynthesizedSimpleProgramEntryPointSymbol.cs (2)
59TypeWithAnnotations.Create(Binder.GetSpecialType(compilation, SpecialType.System_String, NoLocation.Singleton, diagnostics)))), 0, RefKind.None, "args")); 73RefKind.None,
Symbols\Synthesized\SynthesizedStaticConstructor.cs (2)
127public override RefKind RefKind 131return RefKind.None;
Symbols\Synthesized\SynthesizedStringHashFunctionSymbol.cs (2)
21this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(paramType), 0, RefKind.None, "s"))); 31this.SetParameters(ImmutableArray.Create<ParameterSymbol>(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(paramType), 0, RefKind.None, "s")));
Symbols\Synthesized\SynthesizedSubmissionConstructor.cs (1)
29SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(submissionArrayType), 0, RefKind.None, "submissionArray"));
Symbols\Synthesized\SynthesizedThrowSwitchExpressionExceptionMethod.cs (1)
19this.SetParameters(ImmutableArray.Create(SynthesizedParameterSymbol.Create(this, TypeWithAnnotations.Create(paramType), 0, RefKind.None, "unmatchedValue")));
Symbols\Synthesized\TypeSubstitutedLocalSymbol.cs (1)
113public override RefKind RefKind
Symbols\Tuples\TupleErrorFieldSymbol.cs (2)
157public override RefKind RefKind => RefKind.None;
Symbols\Tuples\TupleFieldSymbol.cs (1)
125public sealed override RefKind RefKind => _underlyingField.RefKind;
Symbols\TypeSymbol.cs (3)
2008RefKind interfaceMemberRefKind = RefKind.None; 2568return elementField is { RefKind: RefKind.None, IsFixedSizeBuffer: false };
Symbols\UpdatedContainingSymbolLocal.cs (1)
79public override RefKind RefKind => _underlyingLocal.RefKind;
Symbols\VarianceSafety.cs (3)
166requireInputSafety: method.RefKind != RefKind.None, 202requireInputSafety: hasSetter || !(property.GetMethod?.RefKind == RefKind.None), 245requireOutputSafety: param.RefKind != RefKind.None,
Symbols\Wrapped\WrappedMethodSymbol.cs (1)
56public override RefKind RefKind
Symbols\Wrapped\WrappedParameterSymbol.cs (1)
44public sealed override RefKind RefKind
Symbols\Wrapped\WrappedPropertySymbol.cs (1)
47public override RefKind RefKind
Syntax\SyntaxNodeExtensions.cs (11)
222internal static RefKind GetRefKindInLocalOrReturn(this TypeSyntax syntax, BindingDiagnosticBag diagnostics) 224syntax.SkipRefInLocalOrReturn(diagnostics, out var refKind); 238internal static TypeSyntax SkipRefInField(this TypeSyntax syntax, out RefKind refKind) 245internal static TypeSyntax SkipRefInLocalOrReturn(this TypeSyntax syntax, BindingDiagnosticBag? diagnostics, out RefKind refKind) 248private static TypeSyntax SkipRefWorker(TypeSyntax syntax, BindingDiagnosticBag? diagnostics, out RefKind refKind) 254? RefKind.RefReadOnly 255: RefKind.Ref; 283refKind = RefKind.None; 320out RefKind refKind) 324refKind = RefKind.None; 330refKind = RefKind.Ref;
Microsoft.CodeAnalysis.CSharp.CodeStyle (14)
src\Analyzers\CSharp\Analyzers\UsePrimaryConstructor\CSharpUsePrimaryConstructorDiagnosticAnalyzer.cs (2)
318if (primaryConstructor.Parameters.Any(static p => p.RefKind is RefKind.Ref or RefKind.Out))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ArgumentSyntaxExtensions.cs (7)
24public static RefKind GetRefKind(this ArgumentSyntax? argument) 27SyntaxKind.RefKeyword => RefKind.Ref, 28SyntaxKind.OutKeyword => RefKind.Out, 29SyntaxKind.InKeyword => RefKind.In, 30_ => RefKind.None, 82parameter.RefKind != RefKind.Out) 88parameter.RefKind != RefKind.Ref)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ExpressionSyntaxExtensions.cs (1)
373ReducedFrom.Parameters: [{ RefKind: RefKind.Ref }, ..],
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Services\SyntaxFacts\CSharpSyntaxFacts.cs (1)
591public RefKind GetRefKindOfArgument(SyntaxNode node)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (3)
718if (castedSymbol is not IFieldSymbol and not ILocalSymbol and not IParameterSymbol and not IParameterSymbol { RefKind: RefKind.Ref }) 1552if (operation is IPropertyReferenceOperation { Property.RefKind: not RefKind.Ref }) 1556if (operation is IInvocationOperation { TargetMethod.RefKind: not RefKind.Ref })
Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes (24)
src\Analyzers\CSharp\CodeFixes\AssignOutParameters\AbstractAssignOutParametersCodeFixProvider.cs (1)
114.WhereAsArray(p => p.RefKind == RefKind.Out);
src\Analyzers\CSharp\CodeFixes\GenerateConstructor\CSharpGenerateConstructorService.cs (1)
74refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateConversionService.cs (1)
209refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateDeconstructMethodService.cs (2)
51refKind: RefKind.Out, 63attributes: default, RefKind.Out, isParams: false, element.Type, element.Name));
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateParameterizedMemberService.cs (4)
34protected override RefKind DetermineRefKind(CancellationToken cancellationToken) 35=> _invocationExpression.IsParentKind(SyntaxKind.RefExpression) ? RefKind.Ref : RefKind.None; 124protected override ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken)
src\Analyzers\CSharp\CodeFixes\ImplementInterface\CSharpImplementInterfaceService.cs (1)
110g.Argument(DisposingName, RefKind.None, g.FalseLiteralExpression()))));
src\Analyzers\CSharp\CodeFixes\MakeLocalFunctionStatic\MakeLocalFunctionStaticCodeFixHelper.cs (1)
215refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\RemoveInKeyword\RemoveInKeywordCodeFixProvider.cs (1)
43if (argumentSyntax == null || argumentSyntax.GetRefKind() != RefKind.In)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpSyntaxGeneratorInternal.cs (9)
149bool isScoped, RefKind refKind, bool isParams, bool forFunctionPointerReturnParameter = false) 161case RefKind.Out: 165case RefKind.Ref: 172case RefKind.In when !forFunctionPointerReturnParameter: 176case RefKind.RefReadOnly when forFunctionPointerReturnParameter: 181case RefKind.RefReadOnlyParameter: 296public override SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind) 301RefKind.Ref => SyntaxFactory.RefType(type), 302RefKind.RefReadOnly => SyntaxFactory.RefType(RefKeyword, ReadOnlyKeyword, type),
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpTypeInferenceService.TypeInferrer.cs (3)
731return InferTypeInArgument(index, parameterizedSymbols, name, RefKind.None); 764var refKind = argumentOpt.GetRefKind(); 773RefKind refKind)
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (207)
CodeGen\CodeGenFunctionPointersTests.cs (63)
102(RefKind.None, IsSpecialType(SpecialType.System_Int32)), 103(RefKind.None, IsSpecialType(SpecialType.System_String))); 146(RefKind.Ref, IsArrayType(IsSpecialType(SpecialType.System_Int32))), 147(RefKind.Ref, IsTypeName("C")), 148(RefKind.Ref, IsSpecialType(SpecialType.System_String))); 170(RefKind.Ref, IsArrayType(IsSpecialType(SpecialType.System_Int32))), 171(RefKind.Out, IsTypeName("C")), 172(RefKind.Out, IsSpecialType(SpecialType.System_String))); 197(RefKind.None, IsVoidType()), 198(RefKind.None, IsFunctionPointerTypeSymbol(CallingConvention.Standard, 199(RefKind.None, IsVoidType()), 200(RefKind.None, IsSpecialType(SpecialType.System_Int32))) 205(RefKind.None, IsFunctionPointerTypeSymbol(CallingConvention.Default, 206(RefKind.None, IsTypeName("S")))), 207(RefKind.None, IsTypeName("C"))); 229(RefKind.RefReadOnly, IsSpecialType(SpecialType.System_Boolean)), 230(RefKind.In, IsSpecialType(SpecialType.System_String)), 231(RefKind.In, IsSpecialType(SpecialType.System_Int32))); 565(RefKind.RefReadOnly, IsSpecialType(SpecialType.System_Int32))); 569(RefKind.RefReadOnly, IsSpecialType(SpecialType.System_Int32))); 573(RefKind.None, IsVoidType()), 574(RefKind.Out, IsSpecialType(SpecialType.System_Int32))); 578(RefKind.None, IsVoidType()), 579(RefKind.In, IsSpecialType(SpecialType.System_Int32))); 583(RefKind.None, IsVoidType()), 584(RefKind.Out, IsSpecialType(SpecialType.System_Int32))); 588(RefKind.None, IsVoidType()), 589(RefKind.In, IsSpecialType(SpecialType.System_Int32))); 649(RefKind.None, IsVoidType()), 650(RefKind.Ref, 652(RefKind.RefReadOnly, IsSpecialType(SpecialType.System_String))))); 655(RefKind.None, 657(RefKind.None, IsSpecialType(SpecialType.System_Int32)))), 658(RefKind.In, 660(RefKind.None, 662(RefKind.None, IsVoidType())))))); 690(RefKind.RefReadOnly, IsSpecialType(SpecialType.System_Boolean)), 691(RefKind.In, IsSpecialType(SpecialType.System_Int32))); 746(RefKind.Ref, IsSpecialType(SpecialType.System_Boolean)), 747(RefKind.Ref, IsSpecialType(SpecialType.System_Int32))); 790(RefKind.None, IsVoidType()), 791(RefKind.None, IsSpecialType(SpecialType.System_String)))); 794(RefKind.None, IsSpecialType(SpecialType.System_Int32)))); 820(RefKind.None, IsTypeName("C")), 821(RefKind.None, IsTypeName("C"))); 988(RefKind.None, IsVoidType())); 996(RefKind.None, IsVoidType())); 7672returnRefKind: RefKind.None, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7676parameterRefCustomModifiers: default, returnRefKind: RefKind.Ref, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7681parameterRefCustomModifiers: default, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7685parameterRefCustomModifiers: default, returnRefKind: RefKind.Ref, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7757returnRefKind: RefKind.None, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7761returnRefKind: RefKind.Ref, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7766returnRefKind: RefKind.None, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, 7770returnRefKind: RefKind.Ref, parameterTypes: ImmutableArray<TypeWithAnnotations>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty,
CodeGen\CodeGenInParametersTests.cs (12)
4949RefKind.In, 4953RefKind.In, 5053RefKind.In, 5057RefKind.In, 5061RefKind.In, 5065RefKind.In, 5069RefKind.In, 5073RefKind.In, 5077RefKind.In, 5081RefKind.In, 5085RefKind.In, 5089RefKind.In,
CodeGen\CodeGenLocalFunctionTests.cs (11)
3136Assert.Equal(RefKind.Ref, goo.Parameters[0].RefKind); 3161Assert.Equal(RefKind.Ref, goo.Parameters[0].RefKind); 3162Assert.Equal(RefKind.Ref, bar.Parameters[0].RefKind); 3163Assert.Equal(RefKind.Ref, bar.Parameters[1].RefKind); 3214Assert.Equal(RefKind.Ref, inner.Parameters[0].RefKind); 3215Assert.Equal(RefKind.Ref, inner.Parameters[1].RefKind); 3216Assert.Equal(RefKind.Ref, middle.Parameters[0].RefKind); 3279Assert.Equal(RefKind.Ref, goo.Parameters[0].RefKind); 3318Assert.Equal(RefKind.Ref, goo.Parameters[1].RefKind); 3319Assert.Equal(RefKind.Ref, bar.Parameters[1].RefKind); 3320Assert.Equal(RefKind.Ref, bar.Parameters[2].RefKind);
CodeGen\CodeGenReadonlyStructTests.cs (61)
829Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 830Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 831Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 846Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 847Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 848Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 853Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 854Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 855Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 860Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 861Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 862Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 867Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 868Assert.Equal(RefKind.Ref, namedType.GetMethod("M1").ThisParameter.RefKind); 869Assert.Equal(RefKind.Ref, namedType.GetMethod("ToString").ThisParameter.RefKind); 874Assert.Equal(RefKind.None, namedType.Constructors[0].ThisParameter.RefKind); 875Assert.Equal(RefKind.None, namedType.GetMethod("M1").ThisParameter.RefKind); 876Assert.Equal(RefKind.None, namedType.GetMethod("ToString").ThisParameter.RefKind); 881Assert.Equal(RefKind.None, namedType.Constructors[0].ThisParameter.RefKind); 882Assert.Equal(RefKind.None, namedType.GetMethod("Invoke").ThisParameter.RefKind); 913Assert.Equal(RefKind.Out, s1.Constructors[0].ThisParameter.RefKind); 914Assert.Equal(RefKind.In, s1.GetMethod("M1").ThisParameter.RefKind); 915Assert.Equal(RefKind.In, s1.GetMethod("ToString").ThisParameter.RefKind); 1003Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 1004Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 1005Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 1010Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 1011Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 1012Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 1017Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 1018Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 1019Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 1024Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 1025Assert.Equal(RefKind.In, namedType.GetMethod("M1").ThisParameter.RefKind); 1026Assert.Equal(RefKind.In, namedType.GetMethod("ToString").ThisParameter.RefKind); 1031Assert.Equal(RefKind.Out, namedType.Constructors[0].ThisParameter.RefKind); 1032Assert.Equal(RefKind.Ref, namedType.GetMethod("M1").ThisParameter.RefKind); 1033Assert.Equal(RefKind.Ref, namedType.GetMethod("ToString").ThisParameter.RefKind); 1038Assert.Equal(RefKind.None, namedType.Constructors[0].ThisParameter.RefKind); 1039Assert.Equal(RefKind.None, namedType.GetMethod("M1").ThisParameter.RefKind); 1040Assert.Equal(RefKind.None, namedType.GetMethod("ToString").ThisParameter.RefKind); 1045Assert.Equal(RefKind.None, namedType.Constructors[0].ThisParameter.RefKind); 1046Assert.Equal(RefKind.None, namedType.GetMethod("Invoke").ThisParameter.RefKind); 1571verifyReadOnly(s1.GetMethod("M1"), false, RefKind.Ref); 1572verifyReadOnly(s1.GetMethod("M2"), true, RefKind.RefReadOnly); 1574verifyReadOnly(s1.GetProperty("P1").GetMethod, true, RefKind.RefReadOnly); 1575verifyReadOnly(s1.GetProperty("P1").SetMethod, false, RefKind.Ref); 1577verifyReadOnly(s1.GetProperty("P2").GetMethod, true, RefKind.RefReadOnly); 1579verifyReadOnly(s1.GetProperty("P3").GetMethod, true, RefKind.RefReadOnly); 1580verifyReadOnly(s1.GetProperty("P3").SetMethod, false, RefKind.Ref); 1582verifyReadOnly(s1.GetProperty("P4").GetMethod, false, RefKind.Ref); 1583verifyReadOnly(s1.GetProperty("P4").SetMethod, true, RefKind.RefReadOnly); 1588verifyReadOnly(s1.GetEvent("E").AddMethod, true, RefKind.RefReadOnly); 1589verifyReadOnly(s1.GetEvent("E").RemoveMethod, true, RefKind.RefReadOnly); 1593verifyReadOnly(s2.GetMethod("M1"), true, RefKind.RefReadOnly); 1595verifyReadOnly(s2.GetProperty("P1").GetMethod, true, RefKind.RefReadOnly); 1596verifyReadOnly(s2.GetProperty("P2").GetMethod, true, RefKind.RefReadOnly); 1597verifyReadOnly(s2.GetProperty("P3").SetMethod, true, RefKind.RefReadOnly); 1602verifyReadOnly(s2.GetEvent("E").AddMethod, true, RefKind.RefReadOnly); 1603verifyReadOnly(s2.GetEvent("E").RemoveMethod, true, RefKind.RefReadOnly); 1605void verifyReadOnly(MethodSymbol method, bool isReadOnly, RefKind? refKind)
CodeGen\CodeGenRefOutTests.cs (12)
872RefKind.RefReadOnlyParameter, 876RefKind.RefReadOnlyParameter, 976RefKind.RefReadOnlyParameter, 980RefKind.RefReadOnlyParameter, 984RefKind.RefReadOnlyParameter, 988RefKind.RefReadOnlyParameter, 992RefKind.In, 996RefKind.RefReadOnlyParameter, 1000RefKind.RefReadOnlyParameter, 1004RefKind.RefReadOnlyParameter, 1008RefKind.RefReadOnlyParameter, 1012RefKind.In,
Emit\EmitCustomModifiers.cs (3)
606Assert.Equal(RefKind.Ref, parameter.RefKind); 662Assert.Equal(RefKind.Ref, baseParameter.RefKind); 670Assert.Equal(RefKind.Ref, derivedParameter.RefKind);
Emit\EmitMetadataTests.cs (5)
449Assert.Equal(RefKind.Ref, parameter1.RefKind); 2027Assert.Equal(RefKind.None, m.Parameters[0].RefKind); 2028Assert.Equal(RefKind.Ref, m.Parameters[1].RefKind); 2029Assert.Equal(RefKind.Out, m.Parameters[2].RefKind); 2093if (invoke.Parameters[i].RefKind != RefKind.None)
Emit\InAttributeModifierTests.cs (40)
1777Assert.Equal(RefKind.RefReadOnly, method.RefKind); 1821Assert.Equal(RefKind.Ref, method.RefKind); 1881Assert.Equal(RefKind.RefReadOnly, method.RefKind); 1889Assert.Equal(RefKind.RefReadOnly, method.RefKind); 1904Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 1938Assert.Equal(RefKind.Ref, method.RefKind); 1946Assert.Equal(RefKind.Ref, method.RefKind); 1962Assert.Equal(RefKind.Ref, localFunc.RefKind); 1988Assert.Equal(RefKind.None, method.RefKind); 2004Assert.Equal(RefKind.None, localFunc.RefKind); 2033Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2041Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2056Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 2084Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2097Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 2133Assert.Equal(RefKind.Ref, method.RefKind); 2147Assert.Equal(RefKind.Ref, localFunc.RefKind); 2175Assert.Equal(RefKind.None, method.RefKind); 2189Assert.Equal(RefKind.None, localFunc.RefKind); 2216Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2224Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2239Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 2274Assert.Equal(RefKind.Ref, method.RefKind); 2282Assert.Equal(RefKind.Ref, method.RefKind); 2298Assert.Equal(RefKind.Ref, localFunc.RefKind); 2325Assert.Equal(RefKind.None, method.RefKind); 2340Assert.Equal(RefKind.None, localFunc.RefKind); 2372Assert.Equal(RefKind.Ref, localFunc.RefKind); 2407Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2420Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 2477Assert.Equal(RefKind.Ref, localFunc.RefKind); 2513Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2527Assert.Equal(RefKind.RefReadOnly, localFunc.RefKind); 2557Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2591Assert.Equal(RefKind.Ref, method.RefKind); 2625Assert.Equal(RefKind.None, method.RefKind); 4723Assert.Equal(RefKind.RefReadOnly, interfaceMethod.RefKind); 4728Assert.Equal(RefKind.None, classMethod.RefKind); 4752Assert.Equal(RefKind.RefReadOnly, parentMethod.RefKind); 4757Assert.Equal(RefKind.None, classMethod.RefKind);
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (62)
Attributes\AttributeTests_RefReadOnly.cs (44)
38Assert.Equal(RefKind.RefReadOnly, method.RefKind); 42Assert.Equal(RefKind.In, parameter.RefKind); 68Assert.Equal(RefKind.In, parameter.RefKind); 92Assert.Equal(RefKind.RefReadOnly, method.RefKind); 120Assert.Equal(RefKind.RefReadOnly, method.RefKind); 124Assert.Equal(RefKind.In, parameter.RefKind); 154Assert.Equal(RefKind.In, parameter.RefKind); 206Assert.Equal(RefKind.In, parameter.RefKind); 233Assert.Equal(RefKind.In, parameter.RefKind); 277Assert.Equal(RefKind.In, parameter.RefKind); 310Assert.Equal(RefKind.RefReadOnly, property.RefKind); 339Assert.Equal(RefKind.RefReadOnly, property.RefKind); 376Assert.Equal(RefKind.RefReadOnly, property.RefKind); 402Assert.Equal(RefKind.RefReadOnly, indexer.RefKind); 406Assert.Equal(RefKind.In, parameter.RefKind); 426Assert.Equal(RefKind.In, parameter.RefKind); 446Assert.Equal(RefKind.RefReadOnly, indexer.RefKind); 474Assert.Equal(RefKind.RefReadOnly, indexer.RefKind); 478Assert.Equal(RefKind.In, parameter.RefKind); 501Assert.Equal(RefKind.RefReadOnly, method.RefKind); 505Assert.Equal(RefKind.In, parameter.RefKind); 522Assert.Equal(RefKind.In, parameter.RefKind); 537Assert.Equal(RefKind.RefReadOnly, method.RefKind); 561Assert.Equal(RefKind.RefReadOnly, method.RefKind); 565Assert.Equal(RefKind.In, parameter.RefKind); 598Assert.Equal(RefKind.RefReadOnly, method.RefKind); 602Assert.Equal(RefKind.In, parameter.RefKind); 626Assert.Equal(RefKind.In, parameter.RefKind); 652Assert.Equal(RefKind.RefReadOnly, method.RefKind); 686Assert.Equal(RefKind.RefReadOnly, method.RefKind); 690Assert.Equal(RefKind.In, parameter.RefKind); 725Assert.Equal(RefKind.RefReadOnly, method.RefKind); 729Assert.Equal(RefKind.In, parameter.RefKind); 757Assert.Equal(RefKind.In, parameter.RefKind); 784Assert.Equal(RefKind.RefReadOnly, method.RefKind); 819Assert.Equal(RefKind.RefReadOnly, method.RefKind); 823Assert.Equal(RefKind.In, parameter.RefKind); 1161Assert.Equal(RefKind.In, parameter.RefKind); 2346Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2370Assert.Equal(RefKind.RefReadOnly, method.Parameters[0].RefKind); 2371Assert.Equal(RefKind.Ref, method.Parameters[1].RefKind); 2393Assert.Equal(RefKind.RefReadOnly, method.RefKind); 2417Assert.Equal(RefKind.Ref, method.Parameters[0].RefKind); 2418Assert.Equal(RefKind.RefReadOnly, method.Parameters[1].RefKind);
RefReadonlyParameterTests.cs (14)
64Assert.Equal(refKind, RefKind.RefReadOnlyParameter == parameter.RefKind); 483Assert.Equal(RefKind.Ref, m.RefKind); 1002Assert.Equal(RefKind.In, p.RefKind); 1099Assert.Equal(RefKind.Ref, p.RefKind); 1151Assert.Equal(RefKind.In, p.RefKind); 1253Assert.Equal(RefKind.Ref, p.RefKind); 1693Assert.Equal(RefKind.Ref, p.RefKind); 1712Assert.Equal(RefKind.In, p.RefKind); 7103var refKind = modifier switch 7105"ref" => RefKind.Ref, 7106"in" => RefKind.In, 7158Assert.Equal(RefKind.RefReadOnlyParameter, methodFromCref!.Parameters.Single().RefKind); 7159var methodFromClass = comp.GetMembers("C.M").Cast<MethodSymbol>().Single(m => m.Parameters.Single().RefKind == RefKind.RefReadOnlyParameter); 7202Assert.Equal(RefKind.Ref, parameter.RefKind);
Semantics\ExtensionTests.cs (2)
3713Assert.Equal(RefKind.Out, parameter.RefKind); 3880Assert.Equal(RefKind.RefReadOnlyParameter, m.GlobalNamespace.GetTypeMember("Extensions").GetTypeMembers().Single().ExtensionParameter.RefKind);
Semantics\RecordTests.cs (2)
14226Assert.Equal(RefKind.Out, deconstruct.Parameters[0].RefKind); 14229Assert.Equal(RefKind.Out, deconstruct.Parameters[1].RefKind);
Microsoft.CodeAnalysis.CSharp.Features (38)
CodeRefactorings\ConvertLocalFunctionToMethod\CSharpConvertLocalFunctionToMethodCodeRefactoringProvider.cs (2)
89refKind: dataFlow.WrittenInside.Contains(capture) ? RefKind.Ref : RefKind.None,
Completion\CompletionProviders\CrefCompletionProvider.cs (4)
306RefKind.Ref => "ref ", 307RefKind.Out => "out ", 308RefKind.In => "in ", 309RefKind.RefReadOnlyParameter => "ref readonly ",
Completion\KeywordRecommenders\RefKeywordRecommender.cs (2)
106return parameter?.RefKind is RefKind.Ref or RefKind.RefReadOnlyParameter;
Completion\Providers\ContextVariableArgumentProvider.cs (4)
38case RefKind.Ref: 42case RefKind.Out: 46case RefKind.In: 47case RefKind.None:
Completion\Providers\OutVariableArgumentProvider.cs (1)
35if (context.Parameter.RefKind != RefKind.Out)
ConvertLinq\CSharpConvertLinqQueryToForEachProvider.cs (2)
304methodSymbol.RefKind == RefKind.None) 341methodSymbol.RefKind == RefKind.None &&
ExtractMethod\CSharpMethodExtractor.CSharpCodeGenerator.cs (2)
100refKind: AnalyzerResult.ReturnsByRef ? RefKind.Ref : RefKind.None,
GenerateType\CSharpGenerateTypeService.cs (1)
789refKind: RefKind.None,
InitializeParameter\CSharpInitializeMemberFromPrimaryConstructorParameterCodeRefactoringProvider.cs (1)
250RefKind.None,
SignatureHelp\LightweightOverloadResolution.cs (5)
113var parameterRefKind = parameter.RefKind; 114if (parameterRefKind == RefKind.None) 135var argumentRefKind = argument.GetRefKind(); 140if (parameterRefKind == RefKind.In && argumentRefKind == RefKind.None)
src\Analyzers\CSharp\Analyzers\UsePrimaryConstructor\CSharpUsePrimaryConstructorDiagnosticAnalyzer.cs (2)
318if (primaryConstructor.Parameters.Any(static p => p.RefKind is RefKind.Ref or RefKind.Out))
src\Analyzers\CSharp\CodeFixes\AssignOutParameters\AbstractAssignOutParametersCodeFixProvider.cs (1)
114.WhereAsArray(p => p.RefKind == RefKind.Out);
src\Analyzers\CSharp\CodeFixes\GenerateConstructor\CSharpGenerateConstructorService.cs (1)
74refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateConversionService.cs (1)
209refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateDeconstructMethodService.cs (2)
51refKind: RefKind.Out, 63attributes: default, RefKind.Out, isParams: false, element.Type, element.Name));
src\Analyzers\CSharp\CodeFixes\GenerateParameterizedMember\CSharpGenerateParameterizedMemberService.cs (4)
34protected override RefKind DetermineRefKind(CancellationToken cancellationToken) 35=> _invocationExpression.IsParentKind(SyntaxKind.RefExpression) ? RefKind.Ref : RefKind.None; 124protected override ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken)
src\Analyzers\CSharp\CodeFixes\ImplementInterface\CSharpImplementInterfaceService.cs (1)
110g.Argument(DisposingName, RefKind.None, g.FalseLiteralExpression()))));
src\Analyzers\CSharp\CodeFixes\MakeLocalFunctionStatic\MakeLocalFunctionStaticCodeFixHelper.cs (1)
215refKind: RefKind.None,
src\Analyzers\CSharp\CodeFixes\RemoveInKeyword\RemoveInKeywordCodeFixProvider.cs (1)
43if (argumentSyntax == null || argumentSyntax.GetRefKind() != RefKind.In)
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (2)
IOperation\IOperationTests.cs (2)
312Assert.Equal(RefKind.RefReadOnly, op.Locals.Single().RefKind); 380Assert.Equal(RefKind.RefReadOnly, op.Locals.Single().RefKind);
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (383)
Semantics\FunctionPointerTests.cs (2)
3942(RefKind.None, IsVoidType()), 3943(RefKind.None, IsErrorType()));
Semantics\LambdaTests.cs (6)
6891Assert.Equal(RefKind.Ref, lambdas[0].Parameters[0].RefKind); 6892Assert.Equal(RefKind.In, lambdas[1].Parameters[0].RefKind); 6893Assert.Equal(RefKind.Out, lambdas[2].Parameters[0].RefKind); 7104Assert.Equal(RefKind.None, lambdaParameter1.RefKind); 7109Assert.Equal(RefKind.None, lambdaParameter2.RefKind); 8905Assert.Equal(RefKind.Ref, symbol.Parameters[0].RefKind);
Semantics\RecordStructTests.cs (2)
3513Assert.Equal(RefKind.Out, deconstruct.Parameters[0].RefKind); 3516Assert.Equal(RefKind.Out, deconstruct.Parameters[1].RefKind);
Semantics\RefExtensionMethodsTests.cs (4)
2148Assert.Equal(RefKind.Ref, symbol.RefKind); 2167Assert.Equal(RefKind.In, symbol.RefKind); 2186Assert.Equal(RefKind.Ref, symbol.RefKind); 2205Assert.Equal(RefKind.In, symbol.RefKind);
Semantics\RefFieldTests.cs (332)
147VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F1"), "ref T S<T>.F1", RefKind.Ref, new string[0]); 148VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F2"), "ref readonly T S<T>.F2", RefKind.RefReadOnly, new string[0]); 153VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F1"), "ref T S<T>.F1", RefKind.Ref, new string[0]); 154VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F2"), "ref readonly T S<T>.F2", RefKind.RefReadOnly, new string[0]); 173VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref T S<T>.F", RefKind.Ref, new string[0]); 178VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref T S<T>.F", RefKind.Ref, new string[0]); 209VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref T S<T>.F", RefKind.Ref, new string[0]); 219VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref T S<T>.F", RefKind.Ref, new string[0]); 242VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref readonly T S<T>.F", RefKind.RefReadOnly, new string[0]); 247VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref readonly T S<T>.F", RefKind.RefReadOnly, new string[0]); 283VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref readonly T S<T>.F", RefKind.RefReadOnly, new string[0]); 293VerifyFieldSymbol(comp.GetMember<FieldSymbol>("S.F"), "ref readonly T S<T>.F", RefKind.RefReadOnly, new string[0]); 317VerifyFieldSymbol(field, "ref modopt(System.SByte) modopt(System.Object) System.Int32 A<System.Int32>.F", RefKind.Ref, new[] { "System.SByte", "System.Object" }); 345VerifyFieldSymbol(field, "ref readonly System.Int32 A.F", RefKind.RefReadOnly, new string[0]); 536VerifyFieldSymbol(tupleType.GetField("Item1"), "ref System.Int32 (System.Int32, System.Object).Item1", RefKind.Ref, new string[0] { }); 537VerifyFieldSymbol(tupleType.GetField("Item2"), "ref modopt(System.Object) modopt(System.SByte) System.Object (System.Int32, System.Object).Item2", RefKind.Ref, new[] { "System.Object", "System.SByte" }); 2167private static void VerifyFieldSymbol(FieldSymbol field, string expectedDisplayString, RefKind expectedRefKind, string[] expectedRefCustomModifiers) 10981VerifyParameterSymbol(parameters[0], "R x1", RefKind.None, ScopedKind.None); 10982VerifyParameterSymbol(parameters[1], "scoped R y1", RefKind.None, ScopedKind.ScopedValue); 10985VerifyParameterSymbol(parameters[0], "ref R x2", RefKind.Ref, ScopedKind.None); 10986VerifyParameterSymbol(parameters[1], "scoped ref R y2", RefKind.Ref, ScopedKind.ScopedRef); 10989VerifyParameterSymbol(parameters[0], "in R x3", RefKind.In, ScopedKind.None); 10990VerifyParameterSymbol(parameters[1], "scoped in R y3", RefKind.In, ScopedKind.ScopedRef); 10993VerifyParameterSymbol(parameters[0], "out R x4", RefKind.Out, useUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None); 10994VerifyParameterSymbol(parameters[1], "out R y4", RefKind.Out, ScopedKind.ScopedRef); 11030VerifyParameterSymbol(comp.GetMember<NamedTypeSymbol>("A").Constructors.Single(c => !c.IsImplicitlyDeclared).Parameters[0], "scoped ref T t", RefKind.Ref, ScopedKind.ScopedRef); 11031VerifyParameterSymbol(comp.GetMember<PropertySymbol>("A.this[]").GetMethod.Parameters[0], "scoped in System.Object o", RefKind.In, ScopedKind.ScopedRef); 11090VerifyParameterSymbol(localFunctions[0].Parameters[0], "R x1", RefKind.None, ScopedKind.None); 11091VerifyParameterSymbol(localFunctions[0].Parameters[1], "scoped R y1", RefKind.None, ScopedKind.ScopedValue); 11092VerifyParameterSymbol(localFunctions[1].Parameters[0], "ref System.Int32 x2", RefKind.Ref, ScopedKind.None); 11093VerifyParameterSymbol(localFunctions[1].Parameters[1], "scoped ref System.Int32 y2", RefKind.Ref, ScopedKind.ScopedRef); 11094VerifyParameterSymbol(localFunctions[2].Parameters[0], "in System.Int32 x3", RefKind.In, ScopedKind.None); 11095VerifyParameterSymbol(localFunctions[2].Parameters[1], "scoped in System.Int32 y3", RefKind.In, ScopedKind.ScopedRef); 11096VerifyParameterSymbol(localFunctions[3].Parameters[0], "out System.Int32 x4", RefKind.Out, useUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None); 11097VerifyParameterSymbol(localFunctions[3].Parameters[1], "out System.Int32 y4", RefKind.Out, ScopedKind.ScopedRef); 11098VerifyParameterSymbol(localFunctions[4].Parameters[0], "ref R x5", RefKind.Ref, ScopedKind.None); 11099VerifyParameterSymbol(localFunctions[4].Parameters[1], "scoped ref R y5", RefKind.Ref, ScopedKind.ScopedRef); 11100VerifyParameterSymbol(localFunctions[5].Parameters[0], "in R x6", RefKind.In, ScopedKind.None); 11101VerifyParameterSymbol(localFunctions[5].Parameters[1], "scoped in R y6", RefKind.In, ScopedKind.ScopedRef); 11102VerifyParameterSymbol(localFunctions[6].Parameters[0], "out R x7", RefKind.Out, useUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None); 11103VerifyParameterSymbol(localFunctions[6].Parameters[1], "out R y7", RefKind.Out, ScopedKind.ScopedRef); 11163verifyParameter(delegateTypesAndLambdas[0], 0, "R", "x1", RefKind.None, ScopedKind.None, false, false); 11164verifyParameter(delegateTypesAndLambdas[0], 1, "scoped R", "y1", RefKind.None, ScopedKind.ScopedValue, false, false); 11165verifyParameter(delegateTypesAndLambdas[1], 0, "ref System.Int32", "x2", RefKind.Ref, ScopedKind.None, false, false); 11166verifyParameter(delegateTypesAndLambdas[1], 1, "scoped ref System.Int32", "y2", RefKind.Ref, ScopedKind.ScopedRef, false, false); 11167verifyParameter(delegateTypesAndLambdas[2], 0, "in System.Int32", "x3", RefKind.In, ScopedKind.None, false, false); 11168verifyParameter(delegateTypesAndLambdas[2], 1, "scoped in System.Int32", "y3", RefKind.In, ScopedKind.ScopedRef, false, false); 11169verifyParameter(delegateTypesAndLambdas[3], 0, "out System.Int32", "x4", RefKind.Out, useUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None, false, false); 11170verifyParameter(delegateTypesAndLambdas[3], 1, "out System.Int32", "y4", RefKind.Out, ScopedKind.ScopedRef, false, false); 11171verifyParameter(delegateTypesAndLambdas[3], 2, "out System.Int32", "z4", RefKind.Out, ScopedKind.None, true, useUpdatedEscapeRules); 11172verifyParameter(delegateTypesAndLambdas[4], 0, "ref R", "x5", RefKind.Ref, ScopedKind.None, false, false); 11173verifyParameter(delegateTypesAndLambdas[4], 1, "scoped ref R", "y5", RefKind.Ref, ScopedKind.ScopedRef, false, false); 11174verifyParameter(delegateTypesAndLambdas[5], 0, "in R", "x6", RefKind.In, ScopedKind.None, false, false); 11175verifyParameter(delegateTypesAndLambdas[5], 1, "scoped in R", "y6", RefKind.In, ScopedKind.ScopedRef, false, false); 11176verifyParameter(delegateTypesAndLambdas[6], 0, "out R", "x7", RefKind.Out, useUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None, false, false); 11177verifyParameter(delegateTypesAndLambdas[6], 1, "out R", "y7", RefKind.Out, ScopedKind.ScopedRef, false, false); 11180static void verifyParameter((NamedTypeSymbol, LambdaSymbol) delegateTypeAndLambda, int parameterIndex, string expectedDisplayType, string expectedDisplayName, RefKind expectedRefKind, ScopedKind expectedScope, bool expectedHasUnscopedRefAttribute, bool expectedHasUnscopedRefAttributeInDelegate) 11220VerifyParameterSymbol(comp.GetMember<NamedTypeSymbol>("D1").DelegateInvokeMethod.Parameters[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 11221VerifyParameterSymbol(comp.GetMember<NamedTypeSymbol>("D2").DelegateInvokeMethod.Parameters[0], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 11286VerifyParameterSymbol(methods[0].Parameters[0], "R", RefKind.None, ScopedKind.None); 11287VerifyParameterSymbol(methods[1].Parameters[0], "ref R", RefKind.Ref, ScopedKind.None); 11288VerifyParameterSymbol(methods[1].Parameters[1], "ref System.Int32", RefKind.Ref, ScopedKind.None); 11289VerifyParameterSymbol(methods[2].Parameters[0], "ref R", RefKind.Ref, ScopedKind.None); 11308VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F0").Parameters[0], "scoped R r", RefKind.None, ScopedKind.ScopedValue); 11309VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F3").Parameters[0], "scoped ref R r", RefKind.Ref, ScopedKind.ScopedRef); 11310VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F6").Parameters[0], "scoped in R r", RefKind.In, ScopedKind.ScopedRef); 11311VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F9").Parameters[0], "out R r", RefKind.Out, ScopedKind.ScopedRef); 11422VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F0").Parameters[0], "scoped s", RefKind.None, ScopedKind.None); 11423VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F1").Parameters[0], "scoped scoped s", RefKind.None, ScopedKind.ScopedValue); 11424VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F2").Parameters[0], "ref scoped s", RefKind.Ref, ScopedKind.None); 11425VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F4").Parameters[0], "scoped ref scoped s", RefKind.Ref, ScopedKind.ScopedRef); 11426VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F5").Parameters[0], "in scoped s", RefKind.In, ScopedKind.None); 11427VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F7").Parameters[0], "scoped in scoped s", RefKind.In, ScopedKind.ScopedRef); 11428VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F8").Parameters[0], "out scoped s", RefKind.Out, ScopedKind.ScopedRef); 11429VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.FA").Parameters[0], "out scoped s", RefKind.Out, ScopedKind.ScopedRef); 11458VerifyParameterSymbol(lambdas[0].Parameters[0], "R r1", RefKind.None, ScopedKind.None); 11459VerifyParameterSymbol(lambdas[1].Parameters[0], "R r2", RefKind.None, ScopedKind.None); 11504VerifyParameterSymbol(comp.GetMember<PEMethodSymbol>("A.F1").Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.ScopedRef); 11538VerifyParameterSymbol(parameters[0], "R a", RefKind.None, ScopedKind.None); 11539VerifyParameterSymbol(parameters[1], "ref R b", RefKind.Ref, ScopedKind.None); 11540VerifyParameterSymbol(parameters[2], "in R c", RefKind.In, ScopedKind.None); 11541VerifyParameterSymbol(parameters[3], "out R d", RefKind.Out, ScopedKind.ScopedRef); 11575VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.ReturnRef").Parameters[0], "scoped ref R r", RefKind.Ref, ScopedKind.ScopedRef); 11616VerifyParameterSymbol(comp.GetMember<MethodSymbol>("C..ctor").ThisParameter, "C this", RefKind.None, ScopedKind.None); 11617VerifyParameterSymbol(comp.GetMember<MethodSymbol>("C.F1").ThisParameter, "C this", RefKind.None, ScopedKind.None); 11618VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S1..ctor").ThisParameter, "out S1 this", RefKind.Out, ScopedKind.ScopedRef); 11619VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S1.F1").ThisParameter, "ref S1 this", RefKind.Ref, ScopedKind.ScopedRef); 11620VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S1.F2").ThisParameter, "in S1 this", RefKind.In, ScopedKind.ScopedRef); 11621VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R1..ctor").ThisParameter, "out R1 this", RefKind.Out, ScopedKind.ScopedRef); 11622VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R1.F1").ThisParameter, "ref R1 this", RefKind.Ref, ScopedKind.ScopedRef); 11623VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R1.F2").ThisParameter, "in R1 this", RefKind.In, ScopedKind.ScopedRef); 11624VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S2..ctor").ThisParameter, "out S2 this", RefKind.Out, ScopedKind.ScopedRef); 11625VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S2.F1").ThisParameter, "in S2 this", RefKind.In, ScopedKind.ScopedRef); 11626VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S2.F2").ThisParameter, "in S2 this", RefKind.In, ScopedKind.ScopedRef); 11627VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R2..ctor").ThisParameter, "out R2 this", RefKind.Out, ScopedKind.ScopedRef); 11628VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R2.F1").ThisParameter, "in R2 this", RefKind.In, ScopedKind.ScopedRef); 11629VerifyParameterSymbol(comp.GetMember<MethodSymbol>("R2.F2").ThisParameter, "in R2 this", RefKind.In, ScopedKind.ScopedRef); 11633VerifyParameterSymbol(thisParameter, "ref S1 this", RefKind.Ref, ScopedKind.ScopedRef); 11669VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Extensions.F0").Parameters[0], "R<System.Object> r", RefKind.None, ScopedKind.None); 11670VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Extensions.F1").Parameters[0], "scoped R<System.Object> r", RefKind.None, ScopedKind.ScopedValue); 11671VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Extensions.F2").Parameters[0], "scoped", RefKind.None, ScopedKind.None); 11672VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Extensions.F3").Parameters[0], "scoped ref T t", RefKind.Ref, ScopedKind.ScopedRef); 11690VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F2").Parameters[0], "params scoped System.Object[] args", RefKind.None, ScopedKind.ScopedValue); 11990verifyValueParameter(comp.GetMember<PropertySymbol>("R2.P2"), "R1 value", RefKind.None, ScopedKind.None); 11991verifyValueParameter(comp.GetMember<PropertySymbol>("R2.P3"), "R1 value", RefKind.None, ScopedKind.None); 11994static void verifyValueParameter(PropertySymbol property, string expectedDisplayString, RefKind expectedRefKind, ScopedKind expectedScope) 12017VerifyParameterSymbol(method.Parameters[0], "scoped R<System.Int32> x", RefKind.None, ScopedKind.ScopedValue); 12018VerifyParameterSymbol(method.Parameters[1], "scoped in System.Int32 y", RefKind.In, ScopedKind.ScopedRef); 12051VerifyParameterSymbol(method.Parameters[0], "scoped R x", RefKind.None, ScopedKind.ScopedValue); 12052VerifyParameterSymbol(method.Parameters[1], "scoped in System.Int32 y", RefKind.In, ScopedKind.ScopedRef); 12059private static void VerifyParameterSymbol(ParameterSymbol parameter, string expectedDisplayString, RefKind expectedRefKind, ScopedKind expectedScope, bool expectedHasUnscopedRefAttribute = false) 12072private static void VerifyParameterSymbol(IParameterSymbol parameter, string expectedDisplayString, RefKind expectedRefKind, ScopedKind expectedScope) 12131VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 12132VerifyLocalSymbol(locals[1], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 12133VerifyLocalSymbol(locals[2], "scoped ref readonly R r5", RefKind.RefReadOnly, ScopedKind.ScopedRef); 12134VerifyLocalSymbol(locals[3], "scoped R r11", RefKind.None, ScopedKind.ScopedValue); 12135VerifyLocalSymbol(locals[4], "scoped ref R r21", RefKind.Ref, ScopedKind.ScopedRef); 12136VerifyLocalSymbol(locals[5], "scoped ref readonly R r51", RefKind.RefReadOnly, ScopedKind.ScopedRef); 12205Assert.Equal(RefKind.None, f.RefKind); 12268VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 12269VerifyLocalSymbol(locals[1], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 12270VerifyLocalSymbol(locals[2], "scoped ref readonly R r5", RefKind.RefReadOnly, ScopedKind.ScopedRef); 12454VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 12455VerifyLocalSymbol(locals[1], "scoped R r2", RefKind.None, ScopedKind.ScopedValue); 12456VerifyLocalSymbol(locals[2], "scoped R r5", RefKind.None, ScopedKind.ScopedValue); 12457VerifyLocalSymbol(locals[3], "scoped R r11", RefKind.None, ScopedKind.ScopedValue); 12458VerifyLocalSymbol(locals[4], "scoped R r21", RefKind.None, ScopedKind.ScopedValue); 12459VerifyLocalSymbol(locals[5], "scoped R r51", RefKind.None, ScopedKind.ScopedValue); 12644Assert.Equal(RefKind.None, f.RefKind); 12865VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 12866VerifyLocalSymbol(locals[1], "scoped R r2", RefKind.None, ScopedKind.ScopedValue); 12867VerifyLocalSymbol(locals[2], "scoped R r5", RefKind.None, ScopedKind.ScopedValue); 12868VerifyLocalSymbol(locals[3], "scoped R r11", RefKind.None, ScopedKind.ScopedValue); 12869VerifyLocalSymbol(locals[4], "scoped R r21", RefKind.None, ScopedKind.ScopedValue); 12870VerifyLocalSymbol(locals[5], "scoped R r51", RefKind.None, ScopedKind.ScopedValue); 13051Assert.Equal(RefKind.None, f.RefKind); 13221VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 13222VerifyLocalSymbol(locals[1], "ref scoped s2", RefKind.Ref, ScopedKind.None); 13223VerifyLocalSymbol(locals[2], "ref scoped s3", RefKind.Ref, ScopedKind.None); 13224VerifyLocalSymbol(locals[3], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 13225VerifyLocalSymbol(locals[4], "scoped ref scoped s5", RefKind.Ref, ScopedKind.ScopedRef); 13226VerifyLocalSymbol(locals[5], "scoped ref scoped s6", RefKind.Ref, ScopedKind.ScopedRef); 13276VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 13277VerifyLocalSymbol(locals[1], "ref scoped s2", RefKind.Ref, ScopedKind.None); 13278VerifyLocalSymbol(locals[2], "ref scoped s3", RefKind.Ref, ScopedKind.None); 13279VerifyLocalSymbol(locals[3], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 13280VerifyLocalSymbol(locals[4], "scoped ref scoped s5", RefKind.Ref, ScopedKind.ScopedRef); 13281VerifyLocalSymbol(locals[5], "scoped ref scoped s6", RefKind.Ref, ScopedKind.ScopedRef); 13335VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 13336VerifyLocalSymbol(locals[2], "scoped s3", RefKind.None, ScopedKind.None); 13337VerifyLocalSymbol(locals[4], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 13338VerifyLocalSymbol(locals[6], "scoped scoped s6", RefKind.None, ScopedKind.ScopedValue); 13380VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 13381VerifyLocalSymbol(locals[1], "scoped s3", RefKind.None, ScopedKind.None); 13382VerifyLocalSymbol(locals[2], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 13383VerifyLocalSymbol(locals[3], "scoped scoped s6", RefKind.None, ScopedKind.ScopedValue); 13407VerifyLocalSymbol(locals[0], "System.Boolean scoped", RefKind.None, ScopedKind.None); 13432VerifyLocalSymbol(locals[0], "System.Boolean scoped", RefKind.None, ScopedKind.None); 13452VerifyLocalSymbol(locals[0], "System.Boolean scoped", RefKind.None, ScopedKind.None); 13474VerifyLocalSymbol(locals[0], "System.Boolean scoped", RefKind.None, ScopedKind.None); 13515VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 13516VerifyLocalSymbol(locals[1], "scoped ref R<System.Int32> r3", RefKind.Ref, ScopedKind.ScopedRef); 13579VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 13580VerifyLocalSymbol(locals[1], "scoped ref R<System.Int32> r3", RefKind.Ref, ScopedKind.ScopedRef); 13655VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 13656VerifyLocalSymbol(locals[2], "scoped R<System.Int32> r3", RefKind.None, ScopedKind.ScopedValue); 13726VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 13727VerifyLocalSymbol(locals[1], "scoped R<System.Int32> r3", RefKind.None, ScopedKind.ScopedValue); 13785VerifyLocalSymbol(locals[0], "ref System.Int32 a", RefKind.Ref, ScopedKind.None); 13786VerifyLocalSymbol(locals[1], "ref System.Int32 b", RefKind.Ref, ScopedKind.None); 14425VerifyLocalSymbol(locals[0], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 14426VerifyLocalSymbol(locals[1], "scoped ref R r5", RefKind.Ref, ScopedKind.ScopedRef); 14467VerifyLocalSymbol(locals[0], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 14468VerifyLocalSymbol(locals[1], "scoped ref R r5", RefKind.Ref, ScopedKind.ScopedRef); 14592VerifyLocalSymbol(locals[0], "R r11", RefKind.None, ScopedKind.None); 14593VerifyLocalSymbol(locals[1], "R r12", RefKind.None, ScopedKind.None); 14594VerifyLocalSymbol(locals[2], "scoped R r21", RefKind.None, ScopedKind.ScopedValue); 14595VerifyLocalSymbol(locals[3], "scoped R r22", RefKind.None, ScopedKind.ScopedValue); 14597VerifyLocalSymbol(locals[4], "ref R r31", RefKind.Ref, ScopedKind.None); 14598VerifyLocalSymbol(locals[5], "ref R r32", RefKind.Ref, ScopedKind.None); 14599VerifyLocalSymbol(locals[6], "scoped ref R r41", RefKind.Ref, ScopedKind.ScopedRef); 14600VerifyLocalSymbol(locals[7], "scoped ref R r42", RefKind.Ref, ScopedKind.ScopedRef); 14668VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 14669VerifyLocalSymbol(locals[1], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 14670VerifyLocalSymbol(locals[2], "scoped ref readonly R r5", RefKind.RefReadOnly, ScopedKind.ScopedRef); 14913VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 14914VerifyLocalSymbol(locals[1], "scoped R r2", RefKind.None, ScopedKind.ScopedValue); 14915VerifyLocalSymbol(locals[2], "scoped R r5", RefKind.None, ScopedKind.ScopedValue); 14916VerifyLocalSymbol(locals[3], "scoped R r11", RefKind.None, ScopedKind.ScopedValue); 14917VerifyLocalSymbol(locals[4], "scoped R r21", RefKind.None, ScopedKind.ScopedValue); 14918VerifyLocalSymbol(locals[5], "scoped R r51", RefKind.None, ScopedKind.ScopedValue); 15121VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 15122VerifyLocalSymbol(locals[1], "ref scoped s2", RefKind.Ref, ScopedKind.None); 15123VerifyLocalSymbol(locals[2], "ref scoped s3", RefKind.Ref, ScopedKind.None); 15124VerifyLocalSymbol(locals[3], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 15125VerifyLocalSymbol(locals[4], "scoped ref scoped s5", RefKind.Ref, ScopedKind.ScopedRef); 15126VerifyLocalSymbol(locals[5], "scoped ref scoped s6", RefKind.Ref, ScopedKind.ScopedRef); 15147VerifyLocalSymbol(locals[0], "System.Boolean scoped", RefKind.None, ScopedKind.None); 15208VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 15209VerifyLocalSymbol(locals[1], "scoped ref R<System.Int32> r3", RefKind.Ref, ScopedKind.ScopedRef); 15779private static void VerifyLocalSymbol(LocalSymbol local, string expectedDisplayString, RefKind expectedRefKind, ScopedKind expectedScope) 15788private static void VerifyLocalSymbol(ILocalSymbol local, string expectedDisplayString, RefKind expectedRefKind, ScopedKind expectedScope) 15828VerifyParameterSymbol(method.Parameters[0], "ref System.Int32 i", RefKind.Ref, ScopedKind.None); 18016VerifyParameterSymbol(delegateInvokeMethods[0].Parameters[0], "R arg1", RefKind.None, ScopedKind.None); 18017VerifyParameterSymbol(delegateInvokeMethods[0].Parameters[1], "scoped R arg2", RefKind.None, ScopedKind.ScopedValue); 18018VerifyParameterSymbol(delegateInvokeMethods[1].Parameters[1], "scoped ref System.Int32 arg2", RefKind.Ref, ScopedKind.ScopedRef); 23432VerifyParameterSymbol(type.GetMethod("Get").ThisParameter, "ref R1<System.Int32> this", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 23433VerifyParameterSymbol(type.GetMethod("get_Item").ThisParameter, "ref R1<System.Int32> this", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 23437VerifyParameterSymbol(type.GetMethod("Get").ThisParameter, "ref R2<System.Int32> this", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23438VerifyParameterSymbol(type.GetMethod("get_Item").ThisParameter, "ref R2<System.Int32> this", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23501VerifyParameterSymbol(type.GetMethod("Get").ThisParameter, "ref R1<System.Int32> this", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 23502VerifyParameterSymbol(type.GetMethod("get_Item").ThisParameter, "ref R1<System.Int32> this", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 23507VerifyParameterSymbol(type.GetMethod("Get").ThisParameter, "ref R2<System.Int32> this", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23508VerifyParameterSymbol(type.GetMethod("get_Item").ThisParameter, "ref R2<System.Int32> this", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23655VerifyParameterSymbol(parameters[1], "scoped ref R x", RefKind.Ref, ScopedKind.ScopedRef); 23656VerifyParameterSymbol(parameters[2], "ref R y", RefKind.Ref, ScopedKind.None); 23718VerifyParameterSymbol(baseType.GetMethod("F1A").Parameters[0], "ref R<System.Int32> r1", RefKind.Ref, ScopedKind.None); 23719VerifyParameterSymbol(baseType.GetMethod("F2A").Parameters[0], "scoped ref R<System.Int32> r2", RefKind.Ref, ScopedKind.ScopedRef); 23807VerifyParameterSymbol(type.GetMethod("F1").Parameters[0], "ref R<T> r1", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23808VerifyParameterSymbol(type.GetMethod("F2").Parameters[0], "out T t2", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23809VerifyParameterSymbol(type.GetMethod("F3").Parameters[0], "in R<T> t3", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23810VerifyParameterSymbol(type.GetMethod("F4").Parameters[0], "R<T> t4", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23891VerifyParameterSymbol(baseType.GetMethod("F4A").Parameters[0], "ref R<System.Int32> r4", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 23914VerifyParameterSymbol(parameters[0], "System.Int32 x", RefKind.None, default, expectedHasUnscopedRefAttribute: true); 23915VerifyParameterSymbol(parameters[1], "System.Object y", RefKind.None, default, expectedHasUnscopedRefAttribute: true); 23942VerifyParameterSymbol(parameters[1], "out System.Int32 x", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 23943VerifyParameterSymbol(parameters[2], "out System.Int32 y", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24001VerifyParameterSymbol(baseType.GetMethod("F1A").Parameters[0], "out System.Int32 t1", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24002VerifyParameterSymbol(baseType.GetMethod("F2A").Parameters[0], "out System.Int32 t2", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24003VerifyParameterSymbol(baseType.GetMethod("F3A").Parameters[0], "out System.Int32 t3", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24066VerifyParameterSymbol(baseType.GetMethod("F1A").Parameters[0], "ref System.Int32 t1", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24067VerifyParameterSymbol(baseType.GetMethod("F2A").Parameters[0], "scoped ref System.Int32 t2", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24068VerifyParameterSymbol(baseType.GetMethod("F3A").Parameters[0], "ref System.Int32 t3", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24069VerifyParameterSymbol(baseType.GetMethod("F4A").Parameters[0], "ref System.Int32 t4", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24132VerifyParameterSymbol(baseType.GetMethod("F1A").Parameters[0], "in System.Int32 t1", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24133VerifyParameterSymbol(baseType.GetMethod("F2A").Parameters[0], "scoped in System.Int32 t2", RefKind.In, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24134VerifyParameterSymbol(baseType.GetMethod("F3A").Parameters[0], "in System.Int32 t3", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24135VerifyParameterSymbol(baseType.GetMethod("F4A").Parameters[0], "in System.Int32 t4", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24222VerifyParameterSymbol(baseType.GetMethod("F1A").Parameters[0], "R<System.Int32> r1", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24223VerifyParameterSymbol(baseType.GetMethod("F2A").Parameters[0], "scoped R<System.Int32> r2", RefKind.None, ScopedKind.ScopedValue, expectedHasUnscopedRefAttribute: false); 24224VerifyParameterSymbol(baseType.GetMethod("F3A").Parameters[0], "R<System.Int32> r3", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24225VerifyParameterSymbol(baseType.GetMethod("F4A").Parameters[0], "R<System.Int32> r4", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24250VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F1").Parameters[0], "R<T> r1", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24251VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F2").Parameters[0], "ref R<T> r2", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24252VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F3").Parameters[0], "in R<T> r3", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24253VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F4").Parameters[0], "out R<T> r4", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24499VerifyParameterSymbol(lambdas[0].Parameters[0], "out System.Int32 i1", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24500VerifyParameterSymbol(lambdas[1].Parameters[0], "out System.Int32 i2", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24501VerifyParameterSymbol(lambdas[2].Parameters[0], "out System.Object o1", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24502VerifyParameterSymbol(lambdas[3].Parameters[0], "out System.Object o2", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24535VerifyParameterSymbol(lambdas[0].Parameters[0], "ref System.Int32 i1", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24536VerifyParameterSymbol(lambdas[1].Parameters[0], "ref System.Int32 i2", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24537VerifyParameterSymbol(lambdas[2].Parameters[0], "ref System.Object o1", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24538VerifyParameterSymbol(lambdas[3].Parameters[0], "ref System.Object o2", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24572VerifyParameterSymbol(lambdas[0].Parameters[0], "scoped ref R<System.Int32> r1", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24573VerifyParameterSymbol(lambdas[1].Parameters[0], "ref R<System.Int32> r2", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24574VerifyParameterSymbol(lambdas[2].Parameters[0], "scoped ref R<System.Object> r1", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24575VerifyParameterSymbol(lambdas[3].Parameters[0], "ref R<System.Object> r2", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 24996VerifyParameterSymbol(typeA.GetMethod("NoAttributes").Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24997VerifyParameterSymbol(typeA.GetMethod("ScopedRefOnly").Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 24998VerifyParameterSymbol(typeA.GetMethod("UnscopedRefOnly").Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 24999VerifyParameterSymbol(typeA.GetMethod("ScopedRefAndUnscopedRef").Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25098VerifyParameterSymbol(typeA.GetMethod("NoAttributes").Parameters[0], "ref R x", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 25099VerifyParameterSymbol(typeA.GetMethod("ScopedRefOnly").Parameters[0], "scoped ref R x", RefKind.Ref, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 25100VerifyParameterSymbol(typeA.GetMethod("UnscopedRefOnly").Parameters[0], "ref R x", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25101VerifyParameterSymbol(typeA.GetMethod("ScopedRefAndUnscopedRef").Parameters[0], "ref R x", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25206VerifyParameterSymbol(typeA.GetMethod("NoAttributes").Parameters[0], "in R x", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 25207VerifyParameterSymbol(typeA.GetMethod("ScopedRefOnly").Parameters[0], "scoped in R x", RefKind.In, ScopedKind.ScopedRef, expectedHasUnscopedRefAttribute: false); 25208VerifyParameterSymbol(typeA.GetMethod("UnscopedRefOnly").Parameters[0], "in R x", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25209VerifyParameterSymbol(typeA.GetMethod("ScopedRefAndUnscopedRef").Parameters[0], "in R x", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25264VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S1.F1").ThisParameter, "ref S1 this", RefKind.Ref, ScopedKind.ScopedRef); 25265VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S2.F2").ThisParameter, "in S2 this", RefKind.In, ScopedKind.ScopedRef); 25266VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F3").Parameters[0], "out System.Int32 i3", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25267VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F4").Parameters[0], "ref R r4", RefKind.Ref, ScopedKind.None); 25268VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F5").Parameters[0], "in R r5", RefKind.In, ScopedKind.None); 25307VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S1.F1").ThisParameter, "ref S1 this", RefKind.Ref, ScopedKind.ScopedRef); 25308VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S2.F2").ThisParameter, "in S2 this", RefKind.In, ScopedKind.ScopedRef); 25309VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F3").Parameters[0], "out System.Int32 i3", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25310VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F4").Parameters[0], "ref R r4", RefKind.Ref, ScopedKind.None); 25311VerifyParameterSymbol(comp.GetMember<MethodSymbol>("A.F5").Parameters[0], "in R r5", RefKind.In, ScopedKind.None); 25341verifyParameter(delegateTypesAndLambdas[0], 0, "out System.Int32", "i1", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25342verifyParameter(delegateTypesAndLambdas[1], 0, "R", "r2", RefKind.None, ScopedKind.None); 25343verifyParameter(delegateTypesAndLambdas[2], 0, "ref R", "r3", RefKind.Ref, ScopedKind.None); 25344verifyParameter(delegateTypesAndLambdas[3], 0, "in R", "r4", RefKind.In, ScopedKind.None); 25345verifyParameter(delegateTypesAndLambdas[4], 0, "out R", "r5", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25347static void verifyParameter((NamedTypeSymbol, LambdaSymbol) delegateTypeAndLambda, int parameterIndex, string expectedDisplayType, string expectedDisplayName, RefKind expectedRefKind, ScopedKind expectedScope) 25391VerifyParameterSymbol(getFunctionPointerMethod(comp, "A.F1").Parameters[0], "out modreq(System.Runtime.InteropServices.OutAttribute) System.Int32", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25392VerifyParameterSymbol(getFunctionPointerMethod(comp, "A.F2").Parameters[0], "R", RefKind.None, ScopedKind.None); 25393VerifyParameterSymbol(getFunctionPointerMethod(comp, "A.F3").Parameters[0], "ref R", RefKind.Ref, ScopedKind.None); 25394VerifyParameterSymbol(getFunctionPointerMethod(comp, "A.F4").Parameters[0], "in modreq(System.Runtime.InteropServices.InAttribute) R", RefKind.In, ScopedKind.None); 25395VerifyParameterSymbol(getFunctionPointerMethod(comp, "A.F5").Parameters[0], "out modreq(System.Runtime.InteropServices.OutAttribute) R", RefKind.Out, useUpdatedRules ? ScopedKind.ScopedRef : ScopedKind.None); 25461VerifyParameterSymbol(comp.GetMember<MethodSymbol>("S.F").ThisParameter, "ref S this", RefKind.Ref, scopedRefInCSharp10, expectedHasUnscopedRefAttribute: true); 25462VerifyParameterSymbol(comp.GetMember<PropertySymbol>("S.P").GetMethod.ThisParameter, "ref S this", RefKind.Ref, scopedRefInCSharp10, expectedHasUnscopedRefAttribute: true); 25463VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F1").Parameters[0], "out System.Int32 i1", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25464VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F2").Parameters[0], "R r2", RefKind.None, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25465VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F3").Parameters[0], "ref R r3", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25466VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F4").Parameters[0], "in R r4", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 25467VerifyParameterSymbol(comp.GetMember<MethodSymbol>("Program.F5").Parameters[0], "out R r5", RefKind.Out, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 26080VerifyParameterSymbol(typeA.GetMethod("F1").Parameters[0], "ref R x", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 26081VerifyParameterSymbol(typeA.GetMethod("F2").Parameters[0], "ref R x", RefKind.Ref, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 26082VerifyParameterSymbol(typeA.GetMethod("F3").Parameters[0], "in R x", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: false); 26083VerifyParameterSymbol(typeA.GetMethod("F4").Parameters[0], "in R x", RefKind.In, ScopedKind.None, expectedHasUnscopedRefAttribute: true); 27036VerifyParameterSymbol(method.Parameters[0], "out System.Int32 i", RefKind.Out, version == 11 ? ScopedKind.ScopedRef : ScopedKind.None); 27075VerifyParameterSymbol(method.Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.None); 27114VerifyParameterSymbol(method.Parameters[0], "out System.Int32 i", RefKind.Out, ScopedKind.None); 27164VerifyParameterSymbol(method.Parameters[0], "out T t", RefKind.Out, expectedUseUpdatedEscapeRules ? ScopedKind.ScopedRef : ScopedKind.None); 27656VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 27657VerifyLocalSymbol(locals[1], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 27658VerifyLocalSymbol(locals[2], "scoped ref readonly R r5", RefKind.RefReadOnly, ScopedKind.ScopedRef); 27746VerifyLocalSymbol(locals[0], "scoped R r1", RefKind.None, ScopedKind.ScopedValue); 27747VerifyLocalSymbol(locals[1], "scoped ref R r2", RefKind.Ref, ScopedKind.ScopedRef); 27748VerifyLocalSymbol(locals[2], "scoped ref readonly R r5", RefKind.RefReadOnly, ScopedKind.ScopedRef); 27866VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 27867VerifyLocalSymbol(locals[1], "ref scoped s2", RefKind.Ref, ScopedKind.None); 27868VerifyLocalSymbol(locals[2], "ref scoped s3", RefKind.Ref, ScopedKind.None); 27869VerifyLocalSymbol(locals[3], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 27870VerifyLocalSymbol(locals[4], "scoped ref scoped s5", RefKind.Ref, ScopedKind.ScopedRef); 27871VerifyLocalSymbol(locals[5], "scoped ref scoped s6", RefKind.Ref, ScopedKind.ScopedRef); 27967VerifyLocalSymbol(locals[0], "scoped s1", RefKind.None, ScopedKind.None); 27968VerifyLocalSymbol(locals[1], "ref scoped s2", RefKind.Ref, ScopedKind.None); 27969VerifyLocalSymbol(locals[2], "ref scoped s3", RefKind.Ref, ScopedKind.None); 27970VerifyLocalSymbol(locals[3], "scoped scoped s4", RefKind.None, ScopedKind.ScopedValue); 27971VerifyLocalSymbol(locals[4], "scoped ref scoped s5", RefKind.Ref, ScopedKind.ScopedRef); 27972VerifyLocalSymbol(locals[5], "scoped ref scoped s6", RefKind.Ref, ScopedKind.ScopedRef); 28018VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 28019VerifyLocalSymbol(locals[1], "scoped R<System.Int32> r3", RefKind.None, ScopedKind.ScopedValue); 28078VerifyLocalSymbol(locals[0], "scoped R<System.Int32> r1", RefKind.None, ScopedKind.ScopedValue); 28079VerifyLocalSymbol(locals[1], "scoped R<System.Int32> r3", RefKind.None, ScopedKind.ScopedValue); 28302VerifyLocalSymbol(locals[0], "scoped R r2", RefKind.None, ScopedKind.ScopedValue); 28303VerifyLocalSymbol(locals[1], "scoped R r5", RefKind.None, ScopedKind.ScopedValue); 28350VerifyLocalSymbol(locals[0], "scoped R r2", RefKind.None, ScopedKind.ScopedValue); 28351VerifyLocalSymbol(locals[1], "scoped R r5", RefKind.None, ScopedKind.ScopedValue);
Semantics\RefLocalsAndReturnsTests.cs (2)
5256Assert.Equal(RefKind.None, f.RefKind); 5295Assert.Equal(RefKind.None, f.RefKind);
Semantics\SimpleLambdaParametersWithModifiersTests.cs (35)
41Assert.Equal(RefKind.Ref, symbol.Parameters.Single().RefKind); 68Assert.True(symbol.Parameters is [{ Type.SpecialType: SpecialType.System_String, RefKind: RefKind.None }, { Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref }]); 101{ Type.SpecialType: SpecialType.System_String, RefKind: RefKind.None }, 102{ Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref, IsOptional: false }]); 169Assert.True(symbol.Parameters is [{ Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref, IsOptional: false }]); 387{ Type.SpecialType: SpecialType.System_String, RefKind: RefKind.None }, 388{ Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref }]); 420Assert.True(symbol.Parameters is [{ Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.None, IsOptional: true }]); 452Assert.True(symbol.Parameters is [{ Type: IErrorTypeSymbol, RefKind: RefKind.None, IsOptional: false }]); 481Assert.True(symbol.Parameters is [{ Name: "", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref, IsOptional: false }]); 513Assert.True(symbol.Parameters is [{ Name: "", Type: IErrorTypeSymbol { Name: "x" }, RefKind: RefKind.Ref, IsOptional: false }]); 546Assert.True(symbol.Parameters is [{ Name: "", Type: IErrorTypeSymbol { Name: "x" }, RefKind: RefKind.Ref, IsOptional: false }]); 579Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref, IsOptional: false }]); 613parameter.RefKind == (passByRef ? RefKind.Ref : RefKind.None)); 641Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_String, RefKind: RefKind.Ref, IsOptional: false }]); 669Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.In, IsOptional: false }]); 701Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.In, IsOptional: false }]); 730Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Out, IsOptional: false }]); 759Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Out, IsOptional: false }]); 790Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_Int32, RefKind: RefKind.Ref, IsOptional: false }]); 824Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_String, Type.NullableAnnotation: CodeAnalysis.NullableAnnotation.Annotated, RefKind: RefKind.Ref, IsOptional: false }]); 858Assert.True(symbol.Parameters is [{ Name: "x", Type.SpecialType: SpecialType.System_String, Type.NullableAnnotation: CodeAnalysis.NullableAnnotation.NotAnnotated, RefKind: RefKind.Ref, IsOptional: false }]); 890Assert.True(symbol.Parameters is [{ Name: "x", Type.TypeKind: TypeKind.Dynamic, RefKind: RefKind.Ref, IsOptional: false }]); 1000Assert.Equal(RefKind.Ref, symbol.Parameters.Single().RefKind); 1040Assert.True(symbol.Parameters is [{ Name: "x", Type: IArrayTypeSymbol { ElementType.SpecialType: SpecialType.System_Int32 }, RefKind: RefKind.Ref, IsParams: true }]); 1075Assert.True(symbol.Parameters is [{ Name: "x", Type: IArrayTypeSymbol { ElementType.SpecialType: SpecialType.System_Int32 }, RefKind: RefKind.Ref, IsParams: true }]); 1104Assert.True(symbol.Parameters is [{ Name: "x", Type: IErrorTypeSymbol, RefKind: RefKind.Out, IsParams: false }]); 1133Assert.True(symbol.Parameters is [{ Name: "x", Type: IErrorTypeSymbol, RefKind: RefKind.Ref, IsParams: false }]); 1332Assert.Equal(RefKind.Ref, symbol.Parameters.Single().RefKind); 1362Assert.Equal(RefKind.RefReadOnlyParameter, symbol.Parameters.Single().RefKind); 1389Assert.Equal(RefKind.RefReadOnlyParameter, symbol.Parameters.Single().RefKind); 1422Assert.Equal(RefKind.RefReadOnlyParameter, symbol.Parameters.Single().RefKind); 1455Assert.Equal(RefKind.Ref, symbol.Parameters.Single().RefKind);
Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests (152)
Compilation\SemanticModelAPITests.cs (2)
208Assert.Equal(RefKind.RefReadOnly, rxSymbol.RefKind); 240Assert.Equal(RefKind.RefReadOnly, rxSymbol.RefKind);
Compilation\SemanticModelGetDeclaredSymbolAPITests.cs (2)
43Assert.Equal(RefKind.RefReadOnly, rx.RefKind); 66Assert.Equal(RefKind.RefReadOnly, rxLocal.RefKind);
DocumentationComments\CrefTests.cs (3)
1314Single(m => m.ParameterRefKinds.Single() == RefKind.Out); 6673Assert.Equal(RefKind.In, parameterSymbol.RefKind); 6716Assert.Equal(RefKind.RefReadOnlyParameter, parameterSymbol.RefKind);
SymbolDisplay\SymbolDisplayTests.cs (3)
6971Assert.Equal(RefKind.None, local.RefKind); 7016Assert.Equal(RefKind.Ref, local.RefKind); 7063Assert.Equal(RefKind.RefReadOnly, local.RefKind);
Symbols\CompilationCreationTests.cs (2)
2357Assert.Equal(RefKind.Ref, x1.RefKind); 2362Assert.Equal(RefKind.Out, x2.RefKind);
Symbols\DefaultInterfaceImplementationTests.cs (1)
69335Assert.Equal(RefKind.In, p.RefKind);
Symbols\ExtensionMethodTests.cs (4)
4035Assert.Equal(RefKind.In, parameter.RefKind); 4041Assert.Equal(RefKind.In, parameter.RefKind); 4065Assert.Equal(RefKind.Ref, parameter.RefKind); 4071Assert.Equal(RefKind.Ref, parameter.RefKind);
Symbols\FunctionPointerTypeSymbolTests.cs (90)
26[InlineData("", RefKind.None, "delegate*<System.Object>")] 27[InlineData("ref", RefKind.Ref, "delegate*<ref System.Object>")] 28[InlineData("ref readonly", RefKind.RefReadOnly, 31public void ValidReturnModifiers(string modifier, RefKind expectedKind, string expectedPublicType) 113verifyRefKind(RefKind.None, mParams[0]); 114verifyRefKind(RefKind.Ref, mParams[1]); 115verifyRefKind(RefKind.Ref, mParams[2]); 116verifyRefKind(RefKind.RefReadOnly, mParams[3]); 117verifyRefKind(RefKind.None, mParams[4]); 118verifyRefKind(RefKind.None, mParams[5]); 119verifyRefKind(RefKind.Ref, mParams[6]); 120verifyRefKind(RefKind.None, mParams[7]); 172static void verifyRefKind(RefKind expected, ParameterSymbol actual) 199Assert.Equal(RefKind.Ref, firstSignature.RefKind); 200Assert.Equal(RefKind.RefReadOnly, secondSignature.RefKind); 472Assert.Equal(RefKind.Ref, firstParam.Parameters.Single().RefKind); 475Assert.Equal(RefKind.In, secondParam.Parameters.Single().RefKind); 478Assert.Equal(RefKind.Out, thirdParam.Parameters.Single().RefKind); 481Assert.Equal(RefKind.None, fourthParam.Parameters.Single().RefKind); 574Assert.Equal(RefKind.None, firstParam.Parameters.Single().RefKind); 577Assert.Equal(RefKind.None, secondParam.Parameters.Single().RefKind); 580Assert.Equal(RefKind.Ref, thirdParam.Parameters.Single().RefKind); 583Assert.Equal(RefKind.In, fourthParam.Parameters.Single().RefKind); 586Assert.Equal(RefKind.Out, fifthParam.Parameters.Single().RefKind); 589Assert.Equal(RefKind.In, sixthParam.Parameters.Single().RefKind); 592Assert.Equal(RefKind.Ref, seventhParam.Parameters.Single().RefKind); 595Assert.Equal(RefKind.Out, eightParam.Parameters.Single().RefKind); 598Assert.Equal(RefKind.Ref, ninthParam.Parameters.Single().RefKind); 1526Assert.Throws<ArgumentNullException>("returnType", () => comp.CreateFunctionPointerTypeSymbol(returnType: null!, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty)); 1527Assert.Throws<ArgumentNullException>("parameterTypes", () => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: default, parameterRefKinds: ImmutableArray<RefKind>.Empty)); 1528Assert.Throws<ArgumentNullException>("parameterTypes[0]", () => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray.Create((ITypeSymbol?)null)!, parameterRefKinds: ImmutableArray.Create(RefKind.None))); 1529Assert.Throws<ArgumentNullException>("parameterRefKinds", () => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: default)); 1530Assert.Throws<ArgumentNullException>("callingConventionTypes[0]", () => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.Unmanaged, ImmutableArray.Create((INamedTypeSymbol)null!))); 1531Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray.Create(RefKind.None))); 1532Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.Out, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty)); 1533Assert.Throws<ArgumentOutOfRangeException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: (SignatureCallingConvention)10)); 1534Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.Default, callingConventionTypes: ImmutableArray.Create(cdeclType)!)); 1535Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.StdCall, callingConventionTypes: ImmutableArray.Create(cdeclType)!)); 1536Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.FastCall, callingConventionTypes: ImmutableArray.Create(cdeclType)!)); 1537Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.CDecl, callingConventionTypes: ImmutableArray.Create(cdeclType)!)); 1538Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.ThisCall, callingConventionTypes: ImmutableArray.Create(cdeclType)!)); 1539Assert.Throws<ArgumentException>(() => comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.Unmanaged, callingConventionTypes: ImmutableArray.Create(@string)!)); 1547var ptr = comp.CreateFunctionPointerTypeSymbol(returnType: @string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, callingConvention: SignatureCallingConvention.VarArgs); 1563RefKind.None, 1565ImmutableArray.Create(RefKind.None, RefKind.None)); 1578RefKind.RefReadOnly, 1580ImmutableArray.Create(RefKind.In)); 1595RefKind.None, 1597ImmutableArray.Create(RefKind.Out)); 1613RefKind.RefReadOnly, 1615ImmutableArray.Create(RefKind.Out)); 1632var ptr = comp.CreateFunctionPointerTypeSymbol(@string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, convention); 1634ptr = comp.CreateFunctionPointerTypeSymbol(@string, returnRefKind: RefKind.RefReadOnly, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, convention); 1647var ptr = comp.CreateFunctionPointerTypeSymbol(@string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, SignatureCallingConvention.Unmanaged, ImmutableArray.Create(cdeclType, stdcallType)!); 1649ptr = comp.CreateFunctionPointerTypeSymbol(@string, returnRefKind: RefKind.RefReadOnly, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, SignatureCallingConvention.Unmanaged, ImmutableArray.Create(cdeclType, stdcallType)!); 1652ptr = comp.CreateFunctionPointerTypeSymbol(@string, returnRefKind: RefKind.None, parameterTypes: ImmutableArray<ITypeSymbol>.Empty, parameterRefKinds: ImmutableArray<RefKind>.Empty, SignatureCallingConvention.Unmanaged, ImmutableArray.Create(cdeclType)!); 1961returnRefKind: RefKind.None, 1963parameterRefKinds: ImmutableArray<RefKind>.Empty, 2041returnRefKind: RefKind.None, 2044parameterRefKinds: ImmutableArray<RefKind>.Empty, 2050RefKind.Ref, 2053parameterRefKinds: ImmutableArray<RefKind>.Empty, 2108returnRefKind: RefKind.None, 2111parameterRefKinds: ImmutableArray<RefKind>.Empty, 2117RefKind.Ref, 2120parameterRefKinds: ImmutableArray<RefKind>.Empty, 2167returnRefKind: RefKind.None, 2170parameterRefKinds: ImmutableArray<RefKind>.Empty, 2176RefKind.Ref, 2179parameterRefKinds: ImmutableArray<RefKind>.Empty,
Symbols\InterfaceImplementationTests.cs (2)
2032Assert.Equal(RefKind.Ref, interfaceMethod.RefKind); 2033Assert.Equal(RefKind.Ref, baseMethod.RefKind);
Symbols\Metadata\MetadataMemberTests.cs (2)
286Assert.Equal(RefKind.Ref, p5.RefKind); 289Assert.Equal(RefKind.Out, p6.RefKind);
Symbols\Metadata\PE\DynamicTransformsTests.cs (3)
276Assert.Equal(RefKind.Ref, f2.Parameters[0].RefKind); 283Assert.Equal(RefKind.None, f3.Parameters[0].RefKind); 307Assert.Equal(RefKind.None, f4.Parameters[0].RefKind);
Symbols\Metadata\PE\LoadingIndexers.cs (1)
605Assert.Equal(RefKind.Ref, indexer.Parameters.Single().RefKind);
Symbols\Metadata\PE\LoadingMethods.cs (1)
376Assert.Equal(RefKind.Ref, byrefReturnMethod.RefKind);
Symbols\PEParameterSymbolTests.cs (5)
112Assert.Equal(RefKind.Out, x.RefKind); 116Assert.Equal(RefKind.Ref, y.RefKind); 120Assert.Equal(RefKind.None, z.RefKind); 127Assert.Equal(RefKind.Out, x1.RefKind); 134Assert.Equal(RefKind.Ref, y2.RefKind);
Symbols\Source\DelegateTests.cs (9)
179if (invoke.Parameters[i].RefKind != RefKind.None) 741Assert.Equal(RefKind.Ref, parameter.RefKind); 781Assert.Equal(RefKind.Ref, d.DelegateInvokeMethod.RefKind); 782Assert.Equal(RefKind.Ref, ((MethodSymbol)d.GetMembers("EndInvoke").Single()).RefKind); 798Assert.Equal(RefKind.RefReadOnly, d.DelegateInvokeMethod.RefKind); 799Assert.Equal(RefKind.RefReadOnly, ((MethodSymbol)d.GetMembers("EndInvoke").Single()).RefKind); 801Assert.Equal(RefKind.In, d.DelegateInvokeMethod.Parameters[0].RefKind); 830Assert.Equal(RefKind.In, lambda.Parameters[0].RefKind); 837Assert.Equal(RefKind.In, lambda.Parameters[0].RefKind);
Symbols\Source\ExpressionBodiedPropertyTests.cs (6)
511Assert.Equal(RefKind.Ref, p.GetMethod.RefKind); 534Assert.Equal(RefKind.RefReadOnly, p.GetMethod.RefKind); 561Assert.Equal(RefKind.RefReadOnly, p.GetMethod.RefKind); 562Assert.Equal(RefKind.In, p.GetMethod.Parameters[0].RefKind); 589Assert.Equal(RefKind.RefReadOnly, p.GetMethod.RefKind); 590Assert.Equal(RefKind.In, p.GetMethod.Parameters[0].RefKind);
Symbols\Source\MethodTests.cs (9)
364Assert.Equal(RefKind.Ref, p1.RefKind); 365Assert.Equal(RefKind.Out, p2.RefKind); 406Assert.Equal(RefKind.Ref, m.RefKind); 411Assert.Equal(RefKind.Ref, p1.RefKind); 455Assert.Equal(RefKind.Ref, p1.RefKind); 456Assert.Equal(RefKind.Out, p2.RefKind); 534Assert.Equal(RefKind.Ref, param.RefKind); 1760Assert.Equal(RefKind.Ref, interfaceMethod.RefKind); 1768Assert.Equal(RefKind.Ref, classMethod.RefKind);
Symbols\Source\PropertyTests.cs (1)
1794Assert.Equal(RefKind.Ref, classProperty.RefKind);
Symbols\SymbolErrorTests.cs (1)
3375Assert.Equal(RefKind.Ref, param.RefKind);
Symbols\TypeTests.cs (5)
514Assert.Equal(RefKind.Ref, p1.RefKind); 516Assert.Equal(RefKind.Out, p2.RefKind); 518Assert.Equal(RefKind.None, p3.RefKind); 1558Assert.Equal(RefKind.Ref, paras[0].RefKind); 1559Assert.Equal(RefKind.Out, paras[1].RefKind);
Microsoft.CodeAnalysis.CSharp.Test.Utilities (14)
Extensions.cs (2)
216m.Parameters.All(p => p.RefKind == RefKind.Out && p.Type.Equals(primaryConstructor.Parameters[p.Ordinal].Type, SymbolEqualityComparer.Default))); 610Assert.Equal(RefKind.None, valueParameter.RefKind);
FunctionPointerUtilities.cs (12)
271public static void VerifyFunctionPointerSymbol(TypeSymbol type, CallingConvention expectedConvention, (RefKind RefKind, Action<TypeSymbol> TypeVerifier) returnVerifier, params (RefKind RefKind, Action<TypeSymbol> TypeVerifier)[] argumentVerifiers) 283case RefKind.RefReadOnly: 288case RefKind.None: 289case RefKind.Ref: 294case RefKind.Out: 309case RefKind.Out: 314case RefKind.In: 319case RefKind.Ref: 320case RefKind.None: 350public static Action<TypeSymbol> IsFunctionPointerTypeSymbol(CallingConvention callingConvention, (RefKind, Action<TypeSymbol>) returnVerifier, params (RefKind, Action<TypeSymbol>)[] argumentVerifiers)
Microsoft.CodeAnalysis.CSharp.WinRT.UnitTests (3)
Metadata\WinMdDumpTest.cs (3)
343AppendSignatureType(result, method.ReturnType, RefKind.None); 416private static void AppendSignatureType(StringBuilder result, TypeSymbol type, RefKind refKind) 420if (refKind != RefKind.None)
Microsoft.CodeAnalysis.CSharp.Workspaces (33)
CodeGeneration\CSharpSyntaxGenerator.cs (9)
188string name, SyntaxNode? type, SyntaxNode? initializer, RefKind refKind, bool isExtension, bool isParams, bool isScoped) 203internal static SyntaxToken GetArgumentModifiers(RefKind refKind) 207case RefKind.None: 208case RefKind.In: 210case RefKind.Out: 212case RefKind.Ref: 214case RefKind.RefReadOnlyParameter: 3549public override SyntaxNode Argument(string? name, RefKind refKind, SyntaxNode expression) 3679=> this.ParameterDeclaration(identifier, type, initializer: null, RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ArgumentSyntaxExtensions.cs (7)
24public static RefKind GetRefKind(this ArgumentSyntax? argument) 27SyntaxKind.RefKeyword => RefKind.Ref, 28SyntaxKind.OutKeyword => RefKind.Out, 29SyntaxKind.InKeyword => RefKind.In, 30_ => RefKind.None, 82parameter.RefKind != RefKind.Out) 88parameter.RefKind != RefKind.Ref)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ExpressionSyntaxExtensions.cs (1)
373ReducedFrom.Parameters: [{ RefKind: RefKind.Ref }, ..],
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Services\SyntaxFacts\CSharpSyntaxFacts.cs (1)
591public RefKind GetRefKindOfArgument(SyntaxNode node)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (3)
718if (castedSymbol is not IFieldSymbol and not ILocalSymbol and not IParameterSymbol and not IParameterSymbol { RefKind: RefKind.Ref }) 1552if (operation is IPropertyReferenceOperation { Property.RefKind: not RefKind.Ref }) 1556if (operation is IInvocationOperation { TargetMethod.RefKind: not RefKind.Ref })
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpSyntaxGeneratorInternal.cs (9)
149bool isScoped, RefKind refKind, bool isParams, bool forFunctionPointerReturnParameter = false) 161case RefKind.Out: 165case RefKind.Ref: 172case RefKind.In when !forFunctionPointerReturnParameter: 176case RefKind.RefReadOnly when forFunctionPointerReturnParameter: 181case RefKind.RefReadOnlyParameter: 296public override SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind) 301RefKind.Ref => SyntaxFactory.RefType(type), 302RefKind.RefReadOnly => SyntaxFactory.RefType(RefKeyword, ReadOnlyKeyword, type),
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpTypeInferenceService.TypeInferrer.cs (3)
731return InferTypeInArgument(index, parameterizedSymbols, name, RefKind.None); 764var refKind = argumentOpt.GetRefKind(); 773RefKind refKind)
Microsoft.CodeAnalysis.CSharp.Workspaces.UnitTests (4)
CodeGeneration\SyntaxGeneratorTests.cs (4)
491VerifySyntax<InvocationExpressionSyntax>(Generator.InvocationExpression(Generator.IdentifierName("x"), Generator.Argument(RefKind.Ref, Generator.IdentifierName("y"))), "x(ref y)"); 492VerifySyntax<InvocationExpressionSyntax>(Generator.InvocationExpression(Generator.IdentifierName("x"), Generator.Argument(RefKind.Out, Generator.IdentifierName("y"))), "x(out y)"); 551Generator.Argument("goo", RefKind.None, Generator.IdentifierName("x")), 552Generator.Argument("bar", RefKind.None, Generator.IdentifierName("y"))]), "(goo: x, bar: y)");
Microsoft.CodeAnalysis.EditorFeatures.UnitTests (17)
CodeGeneration\CodeGenerationTests.cs (7)
159RefKind.None, 355RefKind.None, 450RefKind.None, 461RefKind.None, 485RefKind.None, 675attributes: default, RefKind.None, isParams, GetTypeSymbol(s.Compilation, type), name, 682attributes: default, RefKind.None, isParams, GetTypeSymbol(s.Compilation, typeFullName, typeArrayRank), parameterName,
CodeGeneration\ExpressionGenerationTests.cs (10)
323f.Argument("n", RefKind.None, f.IdentifierName("a"))), 334f.Argument(null, RefKind.Out, f.IdentifierName("a")), 335f.Argument(null, RefKind.Ref, f.IdentifierName("b"))), 346f.Argument("n1", RefKind.Out, f.IdentifierName("a")), 347f.Argument("n2", RefKind.Ref, f.IdentifierName("b"))), 379f.Argument("n", RefKind.None, f.IdentifierName("a"))), 390f.Argument(null, RefKind.Out, f.IdentifierName("a")), 391f.Argument(null, RefKind.Ref, f.IdentifierName("b"))), 402f.Argument("n1", RefKind.Out, f.IdentifierName("a")), 403f.Argument("n2", RefKind.Ref, f.IdentifierName("b"))),
Microsoft.CodeAnalysis.Extensions.Package (7)
Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.CodeAnalysis.Features (67)
AddConstructorParametersFromMembers\AddConstructorParametersFromMembersCodeRefactoringProvider.State.cs (1)
113return constructorParams.All(parameter => parameter.RefKind == RefKind.None) &&
ChangeSignature\AbstractChangeSignatureService.cs (1)
832refKind: RefKind.None,
Completion\Providers\AbstractContextVariableArgumentProvider.cs (1)
31|| context.Parameter.RefKind != RefKind.None;
ConvertToInterpolatedString\AbstractConvertPlaceholderToInterpolatedStringRefactoringProvider.cs (1)
78if (syntaxFacts.GetRefKindOfArgument(argument) != RefKind.None)
ConvertTupleToStruct\AbstractConvertTupleToStructCodeRefactoringProvider.cs (2)
870RefKind.None, 875CodeGenerationSymbolFactory.CreateParameterSymbol(RefKind.Out, p.Type, p.Name)),
EditAndContinue\AbstractEditAndContinueAnalyzer.cs (3)
4652private static bool GeneratesParameterAttribute(RefKind kind) 4653=> kind is RefKind.In or RefKind.RefReadOnlyParameter;
EditAndContinue\Utilities\Extensions.cs (1)
186static (param, constructor) => param.RefKind == RefKind.Out && param.Type.Equals(constructor.Parameters[param.Ordinal].Type, SymbolEqualityComparer.Default),
EncapsulateField\AbstractEncapsulateFieldService.cs (1)
352refKind: RefKind.None,
ExtractMethod\MethodExtractor.CodeGenerator.cs (5)
435var refKind = GetRefKind(parameter.ParameterModifier); 448private static RefKind GetRefKind(ParameterBehavior parameterBehavior) 451ParameterBehavior.Ref => RefKind.Ref, 452ParameterBehavior.Out => RefKind.Out, 453_ => RefKind.None
GenerateConstructors\AbstractGenerateConstructorsCodeRefactoringProvider.State.cs (1)
104where c.Parameters.All(p => p.RefKind == RefKind.None) && !c.Parameters.Any(static p => p.IsParams)
GenerateEqualsAndGetHashCodeFromMembers\AbstractGenerateEqualsAndGetHashCodeService.cs (1)
138refKind: RefKind.None,
GenerateFromMembers\GenerateFromMembersHelpers.cs (1)
104refKind: RefKind.None,
GenerateType\AbstractGenerateTypeService.GenerateNamedType.cs (2)
50RefKind.None, 201var refKind = syntaxFacts.GetRefKindOfArgument(argumentList[i]);
InitializeParameter\AbstractAddParameterCheckCodeRefactoringProvider.cs (3)
352if (parameter.RefKind == RefKind.Out) 393if (parameter.RefKind == RefKind.Out) 431if (parameter.RefKind == RefKind.Out)
InitializeParameter\AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs (1)
342RefKind.None,
IntroduceParameter\IntroduceParameterDocumentRewriter.cs (1)
576? (TArgumentSyntax)_generator.Argument(parameterName, RefKind.None, newArgumentExpression)
MetadataAsSource\AbstractMetadataAsSourceService.WrappedFieldSymbol.cs (1)
26public RefKind RefKind => _symbol.RefKind;
MetadataAsSource\AbstractMetadataAsSourceService.WrappedMethodSymbol.cs (1)
90public RefKind RefKind => _symbol.RefKind;
MetadataAsSource\AbstractMetadataAsSourceService.WrappedPropertySymbol.cs (1)
44public RefKind RefKind => _symbol.RefKind;
ReplaceMethodWithProperty\ReplaceMethodWithPropertyCodeRefactoringProvider.cs (1)
137setMethod.Parameters is [{ RefKind: RefKind.None } parameter] &&
RQName\RQNodeBuilder.cs (2)
152if (parameter.RefKind == RefKind.Out) 156else if (parameter.RefKind == RefKind.Ref)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (2)
594if (member is IFieldSymbol { RefKind: RefKind.Ref }) 841methodSymbol.Parameters[0].RefKind == RefKind.None &&
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (2)
544case RefKind.Out: 551case RefKind.Ref:
src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (2)
134RefKind: RefKind.None, 367if (property.RefKind != RefKind.None)
src\Analyzers\Core\Analyzers\UseCompoundAssignment\UseCompoundAssignmentUtilities.cs (1)
120if (isTopLevel && symbol is IPropertySymbol { RefKind: RefKind.None })
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (2)
89syntaxFacts, anyReturn.GetRefKind(containingSymbol) != RefKind.None, 130isRef = anyReturn.GetRefKind(containingSymbol) != RefKind.None;
src\Analyzers\Core\CodeFixes\AddParameter\AbstractAddParameterCodeFixProvider.cs (2)
402private async Task<(ITypeSymbol, RefKind)> GetArgumentTypeAndRefKindAsync(Document invocationDocument, TArgumentSyntax argument, CancellationToken cancellationToken) 407var refKind = syntaxFacts.GetRefKindOfArgument(argument);
src\Analyzers\Core\CodeFixes\AddParameter\AddParameterService.cs (2)
81RefKind refKind, 228RefKind refKind,
src\Analyzers\Core\CodeFixes\GenerateConstructor\AbstractGenerateConstructorService.State.cs (1)
40private ImmutableArray<RefKind> _parameterRefKinds;
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateDeconstructMethodService.State.cs (1)
76refKind: RefKind.None,
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateMethodService.State.cs (1)
254refKind: RefKind.None,
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateParameterizedMemberService.MethodSignatureInfo.cs (2)
25protected override RefKind DetermineRefKind(CancellationToken cancellationToken) 31protected override ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken)
src\Analyzers\Core\CodeFixes\GenerateParameterizedMember\AbstractGenerateParameterizedMemberService.SignatureInfo.cs (2)
43protected abstract RefKind DetermineRefKind(CancellationToken cancellationToken); 58protected abstract ImmutableArray<RefKind> DetermineParameterModifiers(CancellationToken cancellationToken);
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.CodeAction.cs (4)
26private readonly RefKind _refKind; 36RefKind refKind) 62var setAccessor = _isReadonly || _refKind != RefKind.None 117return _state.TypeToGenerateIn.TypeKind != TypeKind.Interface && _refKind != RefKind.None
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.cs (8)
144document, state, generateProperty: false, isReadonly: false, isConstant: true, refKind: RefKind.None)); 158document, state, generateProperty: false, isReadonly: true, isConstant: false, refKind: RefKind.None)); 172document, state, generateProperty: false, isReadonly: false, isConstant: false, refKind: RefKind.None)); 220parameter.RefKind is RefKind.Out || 245private static RefKind GetRefKindFromContext(State state) 249return RefKind.Ref; 253return RefKind.RefReadOnly; 257return RefKind.None;
src\Analyzers\Core\CodeFixes\GenerateVariable\AbstractGenerateVariableService.GenerateParameterCodeAction.cs (1)
49RefKind.None,
src\Analyzers\Core\CodeFixes\ImplementInterface\ImplementInterfaceGenerator_DisposePattern.cs (1)
198g.Argument(DisposingName, RefKind.None, g.TrueLiteralExpression())))));
src\Compilers\Core\Portable\DiagnosticAnalyzer\SuppressMessageAttributeState.TargetSymbolResolver.cs (1)
796if ((symbol.RefKind == RefKind.None) == parameterInfo.IsRefOrOut)
Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers (75)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Microsoft.CodeAnalysis.PublicApiAnalyzers (35)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.CodeAnalysis.ResxSourceGenerator (35)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Microsoft.CodeAnalysis.Test.Utilities (10)
Compilation\OperationTreeVerifier.cs (4)
376internal void VisitRefKindArrayElement(RefKind element) 404private void VisitArray(ImmutableArray<RefKind> list, string header, bool logElementCount, bool logNullForDefault = false) 866private static void VerifyGetArgumentRefKindPublicApi(HasDynamicArgumentsExpression operation, ImmutableArray<RefKind> argumentRefKinds) 880Assert.Equal(RefKind.None, operation.GetArgumentRefKind(i));
Diagnostics\CouldHaveMoreSpecificTypeAnalyzer.cs (2)
90if (argument.Parameter.RefKind == RefKind.Out || argument.Parameter.RefKind == RefKind.Ref)
Diagnostics\FieldCouldBeReadOnlyAnalyzer.cs (2)
78if (argument.Parameter.RefKind == RefKind.Out || argument.Parameter.RefKind == RefKind.Ref)
Diagnostics\LocalCouldBeConstAnalyzer.cs (2)
71if (argument.Parameter.RefKind == RefKind.Out || argument.Parameter.RefKind == RefKind.Ref)
Microsoft.CodeAnalysis.UnitTests (9)
Diagnostics\OperationTests.cs (9)
26private static void TestCore(Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression) 31ImmutableArray<RefKind> argumentRefKinds = default; 47argumentRefKinds = ImmutableArray<RefKind>.Empty; 50Assert.Equal(RefKind.None, dynamicExpression.GetArgumentRefKind(0)); 54RefKind refKind = RefKind.Ref; 80Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression = 95Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression = 110Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression =
Microsoft.CodeAnalysis.VisualBasic (24)
Compilation\ClsComplianceChecker.vb (7)
877Dim xRefKinds As ImmutableArray(Of RefKind) = GetParameterRefKinds(x) 878Dim yRefKinds As ImmutableArray(Of RefKind) = GetParameterRefKinds(y) 941Private Shared Function GetParameterRefKinds(symbol As Symbol) As ImmutableArray(Of RefKind) 953Return ImmutableArray(Of RefKind).Empty 956Dim builder = ArrayBuilder(Of RefKind).GetInstance(parameters.Length) 958builder.Add(If(parameter.IsByRef, RefKind.Ref, RefKind.None))
Compilation\VisualBasicCompilation.vb (2)
2925refKind As RefKind, 2927parameterRefKinds As ImmutableArray(Of RefKind),
Operations\VisualBasicOperationFactory.vb (1)
811Dim argumentRefKinds As ImmutableArray(Of RefKind) = Nothing
SymbolDisplay\SymbolDisplayVisitor.Members.vb (1)
527If symbol.RefKind <> RefKind.None AndAlso IsExplicitByRefParameter(symbol) Then
Symbols\FieldSymbol.vb (2)
455Private ReadOnly Property IFieldSymbol_RefKind As RefKind Implements IFieldSymbol.RefKind 457Return RefKind.None
Symbols\MethodSymbol.vb (3)
1084Private ReadOnly Property IMethodSymbol_RefKind As RefKind Implements IMethodSymbol.RefKind 1086Return If(Me.ReturnsByRef, RefKind.Ref, RefKind.None)
Symbols\ParameterSymbol.vb (3)
304Private ReadOnly Property IParameterSymbol_RefKind As RefKind Implements IParameterSymbol.RefKind, IParameterSymbolInternal.RefKind 308Return If(Me.IsByRef, RefKind.Ref, RefKind.None)
Symbols\PropertySymbol.vb (3)
609Private ReadOnly Property IPropertySymbol_RefKind As RefKind Implements IPropertySymbol.RefKind 611Return If(Me.ReturnsByRef, RefKind.Ref, RefKind.None)
Symbols\Source\LocalSymbol.vb (2)
298Public ReadOnly Property RefKind As RefKind Implements ILocalSymbol.RefKind 300Return RefKind.None
Microsoft.CodeAnalysis.Workspaces (82)
Editing\DeclarationModifiers.cs (2)
85isRef: field?.RefKind is RefKind.Ref or RefKind.RefReadOnly || type?.IsRefLikeType == true,
Editing\SyntaxGenerator.cs (6)
304RefKind refKind = RefKind.None) 314RefKind refKind, 2289public abstract SyntaxNode Argument(string? name, RefKind refKind, SyntaxNode expression); 2294public SyntaxNode Argument(RefKind refKind, SyntaxNode expression) 2301=> Argument(name: null, RefKind.None, expression);
ReassignedVariable\AbstractReassignedVariableService.cs (2)
211symbolIsDefinitelyAssigned: parameter.RefKind != RefKind.Out, 235symbolIsDefinitelyAssigned: parameter.RefKind != RefKind.Out,
Rename\ConflictEngine\DeclarationConflictHelpers.cs (3)
37private readonly record struct ParameterSignature(ITypeSymbol Type, RefKind RefKind); 113var refKind = distinguishRefKind ? parameter.RefKind : RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Microsoft.Extensions.Logging.Generators (4)
LoggerMessageGenerator.Emitter.cs (1)
39m.Parameters[1].RefKind == RefKind.Ref);
LoggerMessageGenerator.Parser.cs (3)
364if (paramSymbol.RefKind == RefKind.In) 368else if (paramSymbol.RefKind == RefKind.Ref) 372else if (paramSymbol.RefKind == RefKind.Out)
Microsoft.Extensions.Validation.ValidationsGenerator (2)
src\Shared\RoslynUtils\ParsabilityHelper.cs (2)
101methodSymbol.Parameters[1].RefKind == RefKind.Out; 112methodSymbol.Parameters[2].RefKind == RefKind.Out;
Microsoft.Gen.Logging (4)
Parsing\Parser.cs (2)
544if (paramSymbol.RefKind == RefKind.In) 548else if (paramSymbol.RefKind != RefKind.None)
Parsing\Parser.TagProvider.cs (2)
99&& method.Parameters[0].RefKind == RefKind.None 100&& method.Parameters[1].RefKind == RefKind.None
Microsoft.Interop.ComInterfaceGenerator (1)
ComInterfaceGenerator.cs (1)
358RefKind = RefKind.Out,
Microsoft.Interop.JavaScript.JSImportGenerator (2)
JSExportGenerator.cs (2)
341RefKind = RefKind.Out, // We'll treat it as a separate out parameter. 354RefKind = RefKind.Out, // We'll treat it as a separate out parameter.
Microsoft.Interop.LibraryImportGenerator (2)
Analyzers\ConvertToLibraryImportFixer.cs (1)
245editor.Generator.ParameterDeclaration("@return", editor.Generator.GetType(generatedDeclaration), refKind: RefKind.Out)
Analyzers\CustomMarshallerAttributeFixer.cs (1)
262gen.ParameterDeclaration("numElements", type: gen.TypeExpression(SpecialType.System_Int32), refKind: RefKind.Out),
Microsoft.Interop.SourceGeneration (40)
MarshallerShape.cs (2)
317&& m.Parameters[1].RefKind == RefKind.Out); 328&& m.Parameters[2].RefKind == RefKind.Out);
Marshalling\AttributedMarshallingModelGeneratorResolver.cs (4)
383if (info.RefKind == RefKind.Ref) 453private static RefKind CreateElementRefKind(RefKind refKind, ByValueContentsMarshalKind byValueContentsMarshalKind) 455if (refKind == RefKind.None)
Marshalling\BreakingChangeDetector.cs (2)
26if (info is { RefKind: RefKind.In or RefKind.RefReadOnlyParameter, MarshallingAttributeInfo: NativeMarshallingAttributeInfo(ManagedTypeInfo { DiagnosticFormattedName: TypeNames.ComVariantMarshaller }, _) }
Marshalling\ElementsMarshalling.cs (1)
609return context.ElementIndirectionLevel != 0 || info.ByValueContentsMarshalKind == ByValueContentsMarshalKind.Out || info.RefKind == RefKind.Out || info.IsNativeReturnPosition;
Marshalling\MarshallerHelpers.cs (27)
18public static RefKind GetRefKindForByValueContentsKind(this ByValueContentsMarshalKind byValue) 22ByValueContentsMarshalKind.Default => RefKind.None, 23ByValueContentsMarshalKind.In => RefKind.In, 24ByValueContentsMarshalKind.InOut => RefKind.Ref, 25ByValueContentsMarshalKind.Out => RefKind.Out, 107return context.SingleFrameSpansNativeContext && (!info.IsByRef || info.RefKind == RefKind.In || info.RefKind == RefKind.RefReadOnlyParameter); 290case RefKind.In: 291case RefKind.RefReadOnlyParameter: 293case RefKind.Ref: 295case RefKind.Out: 312case RefKind.In: 313case RefKind.RefReadOnlyParameter: 315case RefKind.Ref: 317case RefKind.Out: 355if (!(info.RefKind is RefKind.Out 360if (countInfo.ElementInfo.IsByRef && countInfo.ElementInfo.RefKind is RefKind.Out) 390if (typeInfo.ScopedKind != ScopedKind.None && typeInfo.RefKind != RefKind.Out) 399case RefKind.In: 402case RefKind.Ref: 406case RefKind.Out: 409case RefKind.RefReadOnlyParameter: 430RefKind.None => default, 431RefKind.In => Token(SyntaxKind.InKeyword), 432RefKind.Ref => Token(SyntaxKind.RefKeyword), 433RefKind.Out => Token(SyntaxKind.OutKeyword), 434RefKind.RefReadOnlyParameter => Token(SyntaxKind.InKeyword),
TypePositionInfo.cs (3)
65public RefKind RefKind { get; init; } = RefKind.None; 67public bool IsByRef => RefKind != RefKind.None;
VariableDeclarations.cs (1)
27if (info.RefKind == RefKind.Out)
Microsoft.VisualStudio.LanguageServices (5)
ChangeSignature\ChangeSignatureDialogViewModel.ParameterViewModels.cs (4)
211case RefKind.Out: 213case RefKind.Ref: 215case RefKind.In: 217case RefKind.RefReadOnlyParameter:
Venus\ContainedLanguageCodeSupport.cs (1)
194refKind: RefKind.None,
Microsoft.VisualStudio.LanguageServices.CSharp (4)
CodeModel\CSharpCodeModelService_Prototype.cs (2)
527if (parameter.RefKind == RefKind.Ref) 531else if (parameter.RefKind == RefKind.Out)
ObjectBrowser\DescriptionBuilder.cs (2)
427if (current.RefKind == RefKind.Ref) 431else if (current.RefKind == RefKind.Out)
Microsoft.VisualStudio.LanguageServices.Implementation (9)
CodeModel\AbstractCodeModelObject_CodeGen.cs (7)
75refKind: RefKind.None, 97refKind: RefKind.None, 108refKind: RefKind.None, 153refKind: RefKind.None, 191refKind: RefKind.None, 207refKind: RefKind.None, 219refKind: RefKind.None,
CodeModel\ExternalElements\ExternalCodeParameter.cs (2)
90if (ParameterSymbol.RefKind == RefKind.Ref) 94else if (ParameterSymbol.RefKind == RefKind.Out)
Roslyn.Diagnostics.Analyzers (151)
AbstractDoNotCopyValue.cs (70)
400var parameterRefKind = operation.Parameter.RefKind; 401var sourceRefKind = Acquire(operation.Value); 503if (!operation.IsRef && Acquire(operation) != RefKind.None) 576case RefKind.None: 577case RefKind.Ref or RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter when operation.Conversion.IsIdentity: 865&& Acquire(instance) is RefKind.In or RefKindEx.RefReadOnlyParameter) 1024if (Acquire(operation) != RefKind.None) 1032&& Acquire(instance) is RefKind.In or RefKindEx.RefReadOnlyParameter) 1098if (returnedValue is not null && Acquire(returnedValue) != RefKind.None) 1104else if (returnedValue is IParameterReferenceOperation { Parameter.RefKind: RefKind.None }) 1108else if (operation.GetRefKind(_context.OwningSymbol) == RefKind.None && Cache.IsNonCopyableType(returnedValue.Type)) 1125var sourceRefKind = Acquire(value); 1129&& sourceRefKind != RefKind.None) 1266if (Acquire(resource) != RefKind.None) 1284var localRefKind = symbol.RefKind; 1285var sourceRefKind = Acquire(operation.Initializer?.Value); 1310var localRefKind = operation.Symbol.RefKind; 1311var sourceRefKind = Acquire(operation.Initializer?.Value); 1351private static bool CanAssign(RefKind sourceRefKind, RefKind targetRefKind) 1355(RefKind.None, _) => true, 1356(RefKind.Ref, RefKind.Ref or RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter) => true, 1357(RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter, RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter) => true, 1362protected RefKind Acquire(IOperation? operation) 1365return RefKind.RefReadOnly; 1370return RefKind.Ref; 1377=> RefKind.None, 1390{ ReturnsByRefReadonly: true } => RefKind.RefReadOnly, 1391{ ReturnsByRef: true } => RefKind.Ref, 1392_ => RefKind.None, 1396return RefKind.None; 1400return field.IsReadOnly ? RefKind.RefReadOnly : RefKind.Ref; 1403return _context.OwningSymbol.IsReadOnly() ? RefKind.RefReadOnly : RefKind.Ref; 1408{ ReturnsByRefReadonly: true } => RefKind.RefReadOnly, 1409{ ReturnsByRef: true } => RefKind.Ref, 1410_ => RefKind.None, 1414return RefKind.None; 1418return local.RefKind == RefKind.RefReadOnly ? RefKind.RefReadOnly : RefKind.Ref; 1421return RefKind.None; 1425return parameter.RefKind is RefKind.In or RefKindEx.RefReadOnlyParameter ? parameter.RefKind : RefKind.Ref; 1434{ ReturnsByRefReadonly: true } => RefKind.RefReadOnly, 1435{ ReturnsByRef: true } => RefKind.Ref, 1436_ => RefKind.None, 1440return RefKind.None; 1443return RefKind.None; 1446return RefKind.RefReadOnly; 1450static RefKind CombineRestrictions(RefKind first, RefKind second) 1454(RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter, _) => RefKind.RefReadOnly, 1455(_, RefKind.RefReadOnly or RefKindEx.RefReadOnlyParameter) => RefKind.RefReadOnly, 1456(RefKind.Out, _) => RefKind.Out, 1457(_, RefKind.Out) => RefKind.Out, 1458(RefKind.None, RefKind.None) => RefKind.None, 1459_ => RefKind.Ref,
AbstractExposeMemberForTesting`1.cs (3)
32protected abstract SyntaxNode GetByRefType(SyntaxNode type, RefKind refKind); 191GetByRefType(syntaxGenerator.TypeExpression(fieldSymbol.Type), fieldSymbol.IsReadOnly ? RefKind.RefReadOnly : RefKind.Ref),
ImportingConstructorShouldBeObsoleteCodeFixProvider.cs (1)
228var argument = generator.Argument("error", RefKind.None, generator.TrueLiteralExpression());
RefKindEx.cs (2)
11public const RefKind RefReadOnlyParameter = (RefKind)4;
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);
Roslyn.Diagnostics.CSharp.Analyzers (28)
CSharpDoNotCopyValue.cs (1)
43&& Acquire(instance) == RefKind.In)
CSharpExposeMemberForTesting.cs (3)
38protected override SyntaxNode GetByRefType(SyntaxNode type, RefKind refKind) 43RefKind.Ref => default, 44RefKind.RefReadOnly => SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword),
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ArgumentSyntaxExtensions.cs (7)
24public static RefKind GetRefKind(this ArgumentSyntax? argument) 27SyntaxKind.RefKeyword => RefKind.Ref, 28SyntaxKind.OutKeyword => RefKind.Out, 29SyntaxKind.InKeyword => RefKind.In, 30_ => RefKind.None, 82parameter.RefKind != RefKind.Out) 88parameter.RefKind != RefKind.Ref)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Extensions\ExpressionSyntaxExtensions.cs (1)
373ReducedFrom.Parameters: [{ RefKind: RefKind.Ref }, ..],
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Services\SyntaxFacts\CSharpSyntaxFacts.cs (1)
591public RefKind GetRefKindOfArgument(SyntaxNode node)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (3)
718if (castedSymbol is not IFieldSymbol and not ILocalSymbol and not IParameterSymbol and not IParameterSymbol { RefKind: RefKind.Ref }) 1552if (operation is IPropertyReferenceOperation { Property.RefKind: not RefKind.Ref }) 1556if (operation is IInvocationOperation { TargetMethod.RefKind: not RefKind.Ref })
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpSyntaxGeneratorInternal.cs (9)
149bool isScoped, RefKind refKind, bool isParams, bool forFunctionPointerReturnParameter = false) 161case RefKind.Out: 165case RefKind.Ref: 172case RefKind.In when !forFunctionPointerReturnParameter: 176case RefKind.RefReadOnly when forFunctionPointerReturnParameter: 181case RefKind.RefReadOnlyParameter: 296public override SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind) 301RefKind.Ref => SyntaxFactory.RefType(type), 302RefKind.RefReadOnly => SyntaxFactory.RefType(RefKeyword, ReadOnlyKeyword, type),
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\CSharpTypeInferenceService.TypeInferrer.cs (3)
731return InferTypeInArgument(index, parameterizedSymbols, name, RefKind.None); 764var refKind = argumentOpt.GetRefKind(); 773RefKind refKind)
Test.Utilities (35)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
Text.Analyzers (75)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (6)
190parameter.RefKind == RefKind.None; 508method.Parameters[0].RefKind == RefKind.Ref && 509method.Parameters[1].RefKind != RefKind.Ref && 520method.Parameters[0].RefKind == RefKind.Ref && 521method.Parameters[1].RefKind != RefKind.Ref && 522method.Parameters[2].RefKind != RefKind.Ref &&
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\CodeGeneration\Argument.cs (2)
7internal readonly struct Argument<TExpressionSyntax>(RefKind refKind, string? name, TExpressionSyntax? expression) 10public readonly RefKind RefKind = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (9)
166case RefKind.RefReadOnly: 169case RefKind.Out: 172case RefKind.Ref: 183RefKind.RefReadOnly => ValueUsageInfo.ReadableReference, 184RefKind.Ref => ValueUsageInfo.ReadableWritableReference, 221case RefKind.Ref: 224case RefKind.RefReadOnly: 233public static RefKind GetRefKind(this IReturnOperation? operation, ISymbol containingSymbol) 236return containingMethod?.RefKind ?? RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (2)
440if (parameter.RefKind is RefKind.Ref or RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Services\SyntaxFacts\ISyntaxFacts.cs (1)
313RefKind GetRefKindOfArgument(SyntaxNode node);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.cs (1)
277PooledArrayBuilder<RefKind> refKinds)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.FunctionPointerTypeSymbolKey.cs (1)
53var returnRefKind = reader.ReadRefKind();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyReader.cs (5)
31private readonly ReadFunction<RefKind> _readRefKind; 190public PooledArrayBuilder<RefKind> ReadRefKindArray() 229public RefKind ReadRefKind() 232public RefKind ReadRefKind(out string? failureReason) 235return (RefKind)ReadInteger();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\SymbolKey\SymbolKey.SymbolKeyWriter.cs (1)
321internal void WriteRefKind(RefKind refKind) => WriteInteger((int)refKind);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\IParameterSymbolExtensions.cs (2)
18case RefKind.Ref: 19case RefKind.Out:
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\ISymbolExtensions.cs (1)
500if (symbol is IMethodSymbol method && method.Parameters.All(p => p.RefKind == RefKind.None))
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Extensions\Symbols\SymbolEquivalenceComparer.ParameterSymbolEqualityComparer.cs (4)
74public static bool AreRefKindsEquivalent(RefKind rk1, RefKind rk2, bool distinguishRefFromOut) 78: (rk1 == RefKind.None) == (rk2 == RefKind.None);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\CodeGenerationSymbolFactory.cs (10)
48RefKind refKind, 79ITypeSymbol type, RefKind refKind, ImmutableArray<IPropertySymbol> explicitInterfaceImplementations, string name, 153RefKind refKind, 175RefKind refKind, 265=> CreateParameterSymbol(RefKind.None, type, name); 267public static IParameterSymbol CreateParameterSymbol(RefKind refKind, ITypeSymbol type, string name) 277ImmutableArray<AttributeData> attributes, RefKind refKind, bool isParams, ITypeSymbol type, string name, bool isOptional = false, bool hasDefaultValue = false, object? defaultValue = null) 288RefKind? refKind = null, 392refKind: RefKind.None, 464RefKind refKind,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationAbstractMethodSymbol.cs (1)
40public abstract RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructedMethodSymbol.cs (1)
37public override RefKind RefKind => _constructedFrom.RefKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConstructorSymbol.cs (1)
20refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationConversionSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationDestructorSymbol.cs (1)
16refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationFieldSymbol.cs (2)
79public RefKind RefKind => RefKind.None;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationMethodSymbol.cs (4)
28RefKind refKind, 81return RefKind == RefKind.Ref; 89return RefKind == RefKind.RefReadOnly; 93public override RefKind RefKind { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationOperatorSymbol.cs (1)
24refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationParameterSymbol.cs (2)
15RefKind refKind, 23public RefKind RefKind { get; } = refKind;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\Symbols\CodeGenerationPropertySymbol.cs (4)
18RefKind refKind, 70public RefKind RefKind => refKind; 72public bool ReturnsByRef => refKind == RefKind.Ref; 74public bool ReturnsByRefReadonly => refKind == RefKind.RefReadOnly;
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions.cs (5)
290if (parameter.RefKind != RefKind.Out && 312if (parameter.RefKind != RefKind.Out && 320refKind: RefKind.None, 350var refKind = parameter.RefKind; 354if (refKind == RefKind.Out)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_CreateEqualsMethod.cs (1)
67refKind: RefKind.None,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\SyntaxGeneratorInternalExtensions\SyntaxGeneratorInternal.cs (6)
113=> symbol is { RefKind: RefKind.Ref or RefKind.In or RefKind.RefReadOnlyParameter, ScopedKind: ScopedKind.ScopedRef } 114or { RefKind: RefKind.None, Type.IsRefLikeType: true, ScopedKind: ScopedKind.ScopedValue }; 145=> TypeExpression(typeSymbol, RefKind.None); 147public abstract SyntaxNode TypeExpression(ITypeSymbol typeSymbol, RefKind refKind);