Files
2026-08-27 10:56:38 -06:00

114 lines
3.2 KiB
C#

using System.Collections.Immutable;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp.Symbols;
internal abstract class SourceClonedParameterSymbol : SourceParameterSymbolBase
{
private readonly bool _suppressOptional;
protected readonly SourceParameterSymbol _originalParam;
public override bool IsImplicitlyDeclared => true;
public override bool IsDiscard => _originalParam.IsDiscard;
public override ImmutableArray<SyntaxReference> DeclaringSyntaxReferences => ImmutableArray<SyntaxReference>.Empty;
public override bool IsParams
{
get
{
if (!_suppressOptional)
{
return _originalParam.IsParams;
}
return false;
}
}
internal override bool IsMetadataOptional
{
get
{
if (!_suppressOptional)
{
return _originalParam.IsMetadataOptional;
}
return _originalParam.HasOptionalAttribute;
}
}
internal sealed override ScopedKind EffectiveScope => _originalParam.EffectiveScope;
internal override bool HasUnscopedRefAttribute => _originalParam.HasUnscopedRefAttribute;
internal sealed override bool UseUpdatedEscapeRules => _originalParam.UseUpdatedEscapeRules;
internal override ConstantValue ExplicitDefaultConstantValue
{
get
{
if (!_suppressOptional)
{
return _originalParam.ExplicitDefaultConstantValue;
}
return _originalParam.DefaultValueFromAttributes;
}
}
internal override ConstantValue DefaultValueFromAttributes => _originalParam.DefaultValueFromAttributes;
public override TypeWithAnnotations TypeWithAnnotations => _originalParam.TypeWithAnnotations;
public override RefKind RefKind => _originalParam.RefKind;
internal override bool IsMetadataIn => _originalParam.IsMetadataIn;
internal override bool IsMetadataOut => _originalParam.IsMetadataOut;
public override ImmutableArray<Location> Locations => _originalParam.Locations;
public sealed override string Name => _originalParam.Name;
public override ImmutableArray<CustomModifier> RefCustomModifiers => _originalParam.RefCustomModifiers;
internal override MarshalPseudoCustomAttributeData MarshallingInformation => _originalParam.MarshallingInformation;
internal override bool IsIDispatchConstant => _originalParam.IsIDispatchConstant;
internal override bool IsIUnknownConstant => _originalParam.IsIUnknownConstant;
internal override FlowAnalysisAnnotations FlowAnalysisAnnotations => FlowAnalysisAnnotations.None;
internal override ImmutableHashSet<string> NotNullIfParameterNotNull => ImmutableHashSet<string>.Empty;
internal override ImmutableArray<int> InterpolatedStringHandlerArgumentIndexes
{
get
{
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Symbols/Source/SourceClonedParameterSymbol.cs", 148);
}
}
internal override bool HasInterpolatedStringHandlerArgumentError
{
get
{
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Symbols/Source/SourceClonedParameterSymbol.cs", 150);
}
}
internal SourceClonedParameterSymbol(SourceParameterSymbol originalParam, Symbol newOwner, int newOrdinal, bool suppressOptional)
: base(newOwner, newOrdinal)
{
_suppressOptional = suppressOptional;
_originalParam = originalParam;
}
public override ImmutableArray<CSharpAttributeData> GetAttributes()
{
return _originalParam.GetAttributes();
}
}