Add fast-paths for ToolLocationHelper property functions #12690
+82
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR adds fast-paths for two frequently-used ToolLocationHelper property functions to improve performance and debugging experience when building template projects.
Problem
When building a template classlib in .NET 10.0.100-preview.5 with property function reflection logging enabled, two ToolLocationHelper methods were being logged as requiring expensive reflection:
These methods were falling back to
Type.InvokeMemberwith the default binder, which:MissingMethodExceptionduring the binding processSolution
Added fast-paths in
WellKnownFunctions.csfor both methods following the established pattern used for other types likeMath,Path, andVersion:The implementation:
receiverType.FullName(since Build assembly doesn't reference Utilities assembly)GetMethod()with explicit parameter types to locate the method directlymethod.Invoke()instead of expensiveInvokeMemberbindingMissingMethodExceptionTesting
Added 3 comprehensive unit tests in
Expander_Tests.cs:PropertyFunctionToolLocationHelperGetPlatformSDKLocation- Validates GetPlatformSDKLocation fast-pathPropertyFunctionToolLocationHelperGetPlatformSDKDisplayName- Validates GetPlatformSDKDisplayName fast-pathPropertyFunctionToolLocationHelperBothMethodsTogether- Ensures both methods work together correctlyAll tests pass successfully and verify that the property functions execute without throwing exceptions.
Benefits
LogPropertyFunctionsRequiringReflectionis enabled, these methods will no longer be loggedFixes #10762
Original prompt
Fixes #12024
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.