Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simplify shape of APIs used for Overload Resolution Priority feature #75891

Merged
merged 2 commits into from
Nov 15, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ internal override ObsoleteAttributeData ObsoleteAttributeData
get { return null; }
}

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;

bool ISynthesizedMethodBodyImplementationSymbol.HasMethodBodyDependency
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ public FieldSymbol BackingField
get { return _backingField; }
}

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;

public override bool Equals(Symbol obj, TypeCompareKind compareKind)
{
Expand Down
4 changes: 2 additions & 2 deletions src/Compilers/CSharp/Portable/Symbols/ErrorMethodSymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,6 @@ public ErrorPropertySymbol(Symbol containingSymbol, TypeSymbol type, string name

public override ImmutableArray<CustomModifier> RefCustomModifiers { get { return ImmutableArray<CustomModifier>.Empty; } }

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -866,9 +866,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol? bui
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1702,11 +1702,12 @@ internal override bool HasAsyncMethodBuilderAttribute(out TypeSymbol builderArgu
return builderArgument is not null;
}

internal override int? TryGetOverloadResolutionPriority()
internal override int TryGetOverloadResolutionPriority()
{
if (!_packedFlags.IsOverloadResolutionPriorityPopulated)
{
if (_containingType.ContainingPEModule.Module.TryGetOverloadResolutionPriorityValue(_handle, out int priority))
if (_containingType.ContainingPEModule.Module.TryGetOverloadResolutionPriorityValue(_handle, out int priority) &&
priority != 0)
{
Interlocked.CompareExchange(ref AccessUncommonFields()._lazyOverloadResolutionPriority, priority, 0);
}
Expand All @@ -1721,7 +1722,7 @@ internal override bool HasAsyncMethodBuilderAttribute(out TypeSymbol builderArgu
_packedFlags.SetIsOverloadResolutionPriorityPopulated();
}

return _uncommonFields?._lazyOverloadResolutionPriority;
return _uncommonFields?._lazyOverloadResolutionPriority ?? 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1043,12 +1043,13 @@ internal override bool HasRuntimeSpecialName
get { return null; }
}

internal override int? TryGetOverloadResolutionPriority()
internal override int TryGetOverloadResolutionPriority()
{
Debug.Assert(IsIndexer || IsIndexedProperty);
if (!_flags.IsOverloadResolutionPriorityPopulated)
{
if (_containingType.ContainingPEModule.Module.TryGetOverloadResolutionPriorityValue(_handle, out int priority))
if (_containingType.ContainingPEModule.Module.TryGetOverloadResolutionPriorityValue(_handle, out int priority) &&
priority != 0)
{
Interlocked.CompareExchange(ref AccessUncommonFields()._lazyOverloadResolutionPriority, priority, 0);
}
Expand All @@ -1063,7 +1064,7 @@ internal override bool HasRuntimeSpecialName
_flags.SetOverloadResolutionPriorityPopulated();
}

return _uncommonFields?._lazyOverloadResolutionPriority;
return _uncommonFields?._lazyOverloadResolutionPriority ?? 0;
}

private sealed class PEPropertySymbolWithCustomModifiers : PEPropertySymbol
Expand Down
4 changes: 2 additions & 2 deletions src/Compilers/CSharp/Portable/Symbols/MethodSymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1192,9 +1192,9 @@ internal virtual void AddSynthesizedReturnTypeAttributes(PEModuleBuilder moduleB
/// <remarks>
/// Do not call this method from early attribute binding, cycles will occur.
/// </remarks>
internal int OverloadResolutionPriority => CanHaveOverloadResolutionPriority ? (TryGetOverloadResolutionPriority() ?? 0) : 0;
internal int OverloadResolutionPriority => CanHaveOverloadResolutionPriority ? TryGetOverloadResolutionPriority() : 0;

internal abstract int? TryGetOverloadResolutionPriority();
internal abstract int TryGetOverloadResolutionPriority();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TryGetOverloadResolutionPriority

Should this method be called GetOverloadResolutionPriority now rather than TryGet... since we're no longer distinguishing between unset and set to default?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am fine with the name as it is.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Or should this be a property? internal abstract int OverloadResolutionPriority { get; }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I do not think there is a requirement for that.


internal bool CanHaveOverloadResolutionPriority =>
MethodKind is MethodKind.Ordinary
Expand Down
4 changes: 2 additions & 2 deletions src/Compilers/CSharp/Portable/Symbols/PropertySymbol.cs
Original file line number Diff line number Diff line change
Expand Up @@ -350,11 +350,11 @@ internal int OverloadResolutionPriority
return 0;
}

return TryGetOverloadResolutionPriority() ?? 0;
return TryGetOverloadResolutionPriority();
}
}

internal abstract int? TryGetOverloadResolutionPriority();
internal abstract int TryGetOverloadResolutionPriority();

internal bool CanHaveOverloadResolutionPriority => !IsOverride && !IsExplicitInterfaceImplementation && (IsIndexer || IsIndexedProperty);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil

#nullable enable

internal override int? TryGetOverloadResolutionPriority()
internal override int TryGetOverloadResolutionPriority()
{
return _reducedFrom.TryGetOverloadResolutionPriority();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,7 @@ internal override bool IsMetadataFinal

internal sealed override bool UseUpdatedEscapeRules => true;

internal sealed override int? TryGetOverloadResolutionPriority() => throw ExceptionUtilities.Unreachable();
internal sealed override int TryGetOverloadResolutionPriority() => throw ExceptionUtilities.Unreachable();

#endregion
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ public SignatureOnlyPropertySymbol(

public override bool IsIndexer { get { throw ExceptionUtilities.Unreachable(); } }

internal override int? TryGetOverloadResolutionPriority() => throw ExceptionUtilities.Unreachable();
internal override int TryGetOverloadResolutionPriority() => throw ExceptionUtilities.Unreachable();

#endregion Not used by PropertySignatureComparer
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -201,9 +201,9 @@ internal sealed override System.AttributeTargets GetAttributeTarget()
return System.AttributeTargets.Delegate;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}

private sealed class Constructor : SourceDelegateMethodSymbol
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -177,9 +177,9 @@ internal override bool GenerateDebugInfo
get { return true; }
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,9 @@ protected string GetOverriddenAccessorName(SourceEventSymbol @event, bool isAdde
return null;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1744,7 +1744,7 @@ internal override System.Reflection.MethodImplAttributes ImplementationAttribute
}
}

internal override int? TryGetOverloadResolutionPriority()
=> GetEarlyDecodedWellKnownAttributeData()?.OverloadResolutionPriority;
internal override int TryGetOverloadResolutionPriority()
=> GetEarlyDecodedWellKnownAttributeData()?.OverloadResolutionPriority ?? 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -1701,10 +1701,10 @@ private void ValidateIndexerNameAttribute(CSharpAttributeData attribute, Attribu
}
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
Debug.Assert(this.IsIndexer);
return GetEarlyDecodedWellKnownAttributeData()?.OverloadResolutionPriority;
return GetEarlyDecodedWellKnownAttributeData()?.OverloadResolutionPriority ?? 0;
}

#endregion
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,6 @@ internal SynthesizedReadOnlyListProperty(

internal override ObsoleteAttributeData? ObsoleteAttributeData => null;

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ internal static bool VerifyOverridesMethodFromObject(MethodSymbol overriding, Sp
return reportAnError;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -320,9 +320,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal override int? TryGetOverloadResolutionPriority()
internal override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}

/// <summary> A synthesized entrypoint that forwards all calls to an async Main Method </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -362,9 +362,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -514,9 +514,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal override int? TryGetOverloadResolutionPriority()
internal override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -292,9 +292,9 @@ private static bool IsNullableAnalysisEnabled(CSharpCompilation compilation, Com
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -441,9 +441,9 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol? bui
return false;
}

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return null;
return 0;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ internal override bool GenerateDebugInfo

internal sealed override bool UseUpdatedEscapeRules => UnderlyingMethod.UseUpdatedEscapeRules;

internal sealed override int? TryGetOverloadResolutionPriority()
internal sealed override int TryGetOverloadResolutionPriority()
{
return UnderlyingMethod.TryGetOverloadResolutionPriority();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,6 @@ internal override bool HasRuntimeSpecialName
}
}

internal override int? TryGetOverloadResolutionPriority() => _underlyingProperty.OverloadResolutionPriority;
internal override int TryGetOverloadResolutionPriority() => _underlyingProperty.OverloadResolutionPriority;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -76,9 +76,9 @@ public bool HasSetsRequiredMembersAttribute
#endregion

#region OverloadResolutionPriorityAttribute
private int? _overloadResolutionPriority = null;
private int _overloadResolutionPriority = 0;
[DisallowNull]
public int? OverloadResolutionPriority
public int OverloadResolutionPriority
{
get
{
Expand All @@ -88,7 +88,6 @@ public int? OverloadResolutionPriority
set
{
VerifySealed(expected: false);
Debug.Assert(value != null);
_overloadResolutionPriority = value;
SetDataStored();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ public ObsoleteAttributeData? ObsoleteAttributeData
#endregion

#region OverloadResolutionPriorityAttribute
private int? _overloadResolutionPriority = null;
private int _overloadResolutionPriority = 0;
[DisallowNull]
public int? OverloadResolutionPriority
public int OverloadResolutionPriority
{
get
{
Expand All @@ -50,7 +50,6 @@ public int? OverloadResolutionPriority
set
{
VerifySealed(expected: false);
Debug.Assert(value != null);
_overloadResolutionPriority = value;
SetDataStored();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -765,6 +765,6 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -285,7 +285,7 @@ internal sealed override bool HasAsyncMethodBuilderAttribute(out TypeSymbol buil
return false;
}

internal override int? TryGetOverloadResolutionPriority() => null;
internal override int TryGetOverloadResolutionPriority() => 0;

#if DEBUG
protected override MethodSymbolAdapter CreateCciAdapter()
Expand Down