Skip to content

Reduce record usage in published projects #48907

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

Merged
merged 31 commits into from
Jul 22, 2023
Merged
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
bd3ca9d
Convert CollectionModelBinder to class
david-acker Jun 18, 2023
b50f5a6
Convert AltSvcHeader to class
david-acker Jun 18, 2023
6f40f74
Convert InternalHeader to class
david-acker Jun 18, 2023
f331a08
Convert OnRegistrationClose to struct
david-acker Jun 18, 2023
923930d
Convert UnacknowledgedRenderBatch to class
david-acker Jun 19, 2023
1967540
Convert OptionsRecord to struct
david-acker Jun 19, 2023
7d44f3a
Convert BrowserOptions to class
david-acker Jun 19, 2023
2073db0
Convert LogEntry to class
david-acker Jun 19, 2023
94f0d01
Convert BodyDescriptorInfo to class
david-acker Jun 19, 2023
b5cc7ee
Convert RouteParameter to class
david-acker Jun 19, 2023
b9bec97
Convert InternalAccessTokenResult to struct
david-acker Jun 19, 2023
d075af9
Clean up spacing
david-acker Jun 20, 2023
188177a
Convert DfaBuilderWorkerWorkItem to struct
david-acker Jun 20, 2023
8d89d8d
Fix property names
david-acker Jun 20, 2023
94f9d51
Set properties to init
david-acker Jun 20, 2023
ae3478f
Clean up
david-acker Jun 20, 2023
5cd5788
Convert ComponentTypeInfoCacheEntry to class
david-acker Jun 21, 2023
384164c
Convert FormDataConverterReadParameters to class
david-acker Jun 21, 2023
5cfb980
Convert ComponentIdAndDepth to struct
david-acker Jun 21, 2023
eeee9c9
Convert MethodInfoData to struct
david-acker Jun 21, 2023
3cb6eaa
Convert BrowserTab to class
david-acker Jun 21, 2023
e67bb69
Revert unrelated changes
david-acker Jun 21, 2023
d56ac8e
Convert NamedEvent to struct
david-acker Jun 22, 2023
288b841
Merge main
david-acker Jun 22, 2023
8841a6d
Revert submodule changes
david-acker Jun 22, 2023
15aee55
Merge branch 'main' into reduce-record-usage
david-acker Jun 30, 2023
8446029
Add Deconstruct to ComponentTypeInfoCacheEntry
david-acker Jul 1, 2023
dffaa71
Merge remote-tracking branch 'origin/main' into reduce-record-usage
david-acker Jul 7, 2023
2f2fd2a
Seal InternalHeader
david-acker Jul 11, 2023
c6e4900
Merge remote-tracking branch 'origin/main' into reduce-record-usage
david-acker Jul 21, 2023
07d4abb
Convert FormDataConverterReadParameters to struct
david-acker Jul 21, 2023
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
Prev Previous commit
Next Next commit
Convert MethodInfoData to struct
  • Loading branch information
david-acker committed Jun 21, 2023
commit eeee9c961b87a38b5419e0ac9fd48b8e2a69585c
Original file line number Diff line number Diff line change
Expand Up @@ -142,34 +142,34 @@ static MethodInfoData GetMethodInfoData(MethodInfo methodInfo)
var declaringType = methodInfo.DeclaringType;
if (declaringType is null)
{
return new(IsSingleArgumentIndexer: false);
return new(isSingleArgumentIndexer: false);
}

// Check whether GetDefaultMembers() (if present in CoreCLR) would return a member of this type. Compiler
// names the indexer property, if any, in a generated [DefaultMember] attribute for the containing type.
var defaultMember = declaringType.GetCustomAttribute<DefaultMemberAttribute>(inherit: true);
if (defaultMember is null)
{
return new(IsSingleArgumentIndexer: false);
return new(isSingleArgumentIndexer: false);
}

// Find default property (the indexer) and confirm its getter is the method in this expression.
var runtimeProperties = declaringType.GetRuntimeProperties();
if (runtimeProperties is null)
{
return new(IsSingleArgumentIndexer: false);
return new(isSingleArgumentIndexer: false);
}

foreach (var property in runtimeProperties)
{
if (string.Equals(defaultMember.MemberName, property.Name, StringComparison.Ordinal) &&
property.GetMethod == methodInfo)
{
return new(IsSingleArgumentIndexer: true);
return new(isSingleArgumentIndexer: true);
}
}

return new(IsSingleArgumentIndexer: false);
return new(isSingleArgumentIndexer: false);
}
}

Expand Down Expand Up @@ -263,5 +263,13 @@ private static void FormatConstantValue(ConstantExpression constantExpression, r
}
}

private record struct MethodInfoData(bool IsSingleArgumentIndexer);
private readonly struct MethodInfoData
{
public bool IsSingleArgumentIndexer { get; }

public MethodInfoData(bool isSingleArgumentIndexer)
{
IsSingleArgumentIndexer = isSingleArgumentIndexer;
}
}
}