[release/8.0] Fix Options Source Gen with Length attributes applied on properties of Interface type #93482
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.
Fixes #93403
Backport of #93426 to release/8.0
/cc @tarekgh
Customer Impact
When Length validation attributes are applied to a property of an interface type, the Options source generator will generate a diagnostic warning during the build, and the generated code will disregard the property validation. This issue represents a regression from a prior change. This problem became evident when building the extensions repro and resulted in test failures in that context.
Details
This corrects a regression stemming from the recent changes made in #93088. The issue arose when searching for the
Count
property within a type. In cases where the type is an interface, the lookup was failing becauseITypeSymbol.GetMembers
did not report the members of the extended interfaces. The solution involves conducting the property lookup within all interfaces implemented by the given type.Testing
The changes have successfully passed all regression tests and have allowed for a successful build of the extensions repository, with all tests running without any issues. I added more regression tests to cover the failure cases.
Risk
The risk associated with these changes is low, as they are focused on addressing a specific failed case and do not significantly alter the existing logic, except for enhancing the lookup within the type interfaces.
IMPORTANT: If this backport is for a servicing release, please verify that:
The PR target branch is
release/X.0-staging
, notrelease/X.0
.If the change touches code that ships in a NuGet package, you have added the necessary package authoring and gotten it explicitly reviewed.