using System.Collections.Immutable; using Microsoft.CodeAnalysis.CSharp.Emit; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.PooledObjects; using Roslyn.Utilities; namespace Microsoft.CodeAnalysis.CSharp.Symbols; internal sealed class SynthesizedAccessorValueParameterSymbol : SourceComplexParameterSymbolBase { internal override FlowAnalysisAnnotations FlowAnalysisAnnotations { get { FlowAnalysisAnnotations flowAnalysisAnnotations = FlowAnalysisAnnotations.None; if (ContainingSymbol is SourcePropertyAccessorSymbol { AssociatedSymbol: SourcePropertySymbolBase associatedSymbol }) { if (associatedSymbol.HasDisallowNull) { flowAnalysisAnnotations |= FlowAnalysisAnnotations.DisallowNull; } if (associatedSymbol.HasAllowNull) { flowAnalysisAnnotations |= FlowAnalysisAnnotations.AllowNull; } } return flowAnalysisAnnotations; } } internal override ImmutableHashSet NotNullIfParameterNotNull => ImmutableHashSet.Empty; public override ImmutableArray RefCustomModifiers => ImmutableArray.Empty; public override bool IsImplicitlyDeclared => true; protected override IAttributeTargetSymbol AttributeOwner => (SourceMemberMethodSymbol)ContainingSymbol; public SynthesizedAccessorValueParameterSymbol(SourceMemberMethodSymbol accessor, TypeWithAnnotations paramType, int ordinal) : base(accessor, ordinal, paramType, (RefKind)0, "value", accessor.TryGetFirstLocation(), null, isParams: false, isExtensionMethodThis: false, (ScopedKind)0) { } internal override OneOrMany> GetAttributeDeclarations() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) return ((SourceMemberMethodSymbol)ContainingSymbol).GetAttributeDeclarations(); } internal override void AddSynthesizedAttributes(PEModuleBuilder moduleBuilder, ref ArrayBuilder attributes) { base.AddSynthesizedAttributes(moduleBuilder, ref attributes); if (ContainingSymbol is SourcePropertyAccessorSymbol { AssociatedSymbol: SourcePropertySymbolBase associatedSymbol }) { FlowAnalysisAnnotations flowAnalysisAnnotations = FlowAnalysisAnnotations; if ((flowAnalysisAnnotations & FlowAnalysisAnnotations.DisallowNull) != FlowAnalysisAnnotations.None) { Symbol.AddSynthesizedAttribute(ref attributes, new SynthesizedAttributeData(associatedSymbol.DisallowNullAttributeIfExists)); } if ((flowAnalysisAnnotations & FlowAnalysisAnnotations.AllowNull) != FlowAnalysisAnnotations.None) { Symbol.AddSynthesizedAttribute(ref attributes, new SynthesizedAttributeData(associatedSymbol.AllowNullAttributeIfExists)); } } } }