-
Notifications
You must be signed in to change notification settings - Fork 14
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
Handle generic type parameters in method deduplication #58
Handle generic type parameters in method deduplication #58
Conversation
I think this is obsolete after your last PR for 5.0.0? |
This fixes an error where methods with the same parameters but different _generic type parameters_ were being treated as identical during deduplication, resulting in the loss of interface methods. The fix is to use `genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters` when constucting the `SymbolDisplayFormat` used for deduplication. Before: `public void AMethod(Func<int> getValue) {}` produced a deduplication signature of `AMethod(Func)` After: `public void AMethod(Func<int> getValue) {}` produced a deduplication signature of `AMethod(Func<Int32>)`
85c5aa7
to
946fc1b
Compare
…ng seen as identical - Updated the test to show that nested generics work correctly - Added test to ensure same-named generic parameters are distinguishable from one another
946fc1b
to
45f3d3a
Compare
Hi @ChristianSauer, This PR isn't obsolete - there's still an issue with generic type parameter deduplication. I've rebased, simplified the code, and added another test now the other PR is merged. |
…ingle `FullyQualifiedDisplayFormat` These two display formats were used for method deduplication and generating type signatures from strings. It makes sense that they should follow the same rules.
new( | ||
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The main change (which makes the deduplication key include generic type parameters in type signatures)
So, finally found time to merge |
This fixes an error where methods with the same parameters but different generic type parameters were being treated as identical during deduplication, resulting in the loss of interface methods.
The fix is to use
genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters
when constucting theSymbolDisplayFormat
used for deduplication.I have also added
SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces
to prevent types with the same name from being seen as identical.Finally, I have unified
MethodSignatureDisplayFormat
andTypeDisplayFormat
into a singleFullyQualifiedDisplayFormat
. These two display formats were used for method deduplication and generating type signatures from strings. It makes sense that they should follow the same rules.The effect of the change
Given this:
Deduplication key before change:
AMethod(Func)
Deduplication key after change:
AMethod(Func<Task<System.Int32>>)
... or, given user-defined types, the key will contain fully-qualified types:
Deduplication key:
AMethod(Demo.Func<Demo.Task<System.Int32>>)
I have left the global namespaces out of the examples for the sake of simplicity
Addresses #56