You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
While working on a more source generated approach, I noticed that Refit does not correctly use incremental generator caching. While a previous PR uses some of the more modern techniques such as CreateSyntaxProvider, the lines 829-846 are functionally useless and will never successfully cache anything. This is due to how both ImmutableArray handles equality and the passing of the reference type Compilation (this will always change between re-runs).
Methods should be represented by a structurally comparable object
A benchmark could be created to confirm the benefits. Its possible that generating the code in a single pass is faster than caching.
Tests should be added to verify that the caching works as intended
Why is PreserveAttribute.cs added and then its namespace queried? Would the compiler change this? I assume it would always be global::RefitInternalGenerated.PreserveAttribute
Thanks Tim, much appreciated, I was going to head down the same rabbit hole and try to make things better, I see that AoT is important to many people too :)
I was planning on adding some tests to verify steps in the incremental generator like I've done for Mediator. I used WithTrackingName to check specific steps. Unfortunately this is only available in Roslyn 4.1+. I believe I could either:
Update InterfaceStubGenerator.Roslyn40 to InterfaceStubGenerator.Roslyn41 (probably a breaking change)
Add InterfaceStubGenerator.Roslyn41 and use it for the tests.
While working on a more source generated approach, I noticed that Refit does not correctly use incremental generator caching. While a previous PR uses some of the more modern techniques such as
CreateSyntaxProvider
, the lines 829-846 are functionally useless and will never successfully cache anything. This is due to how bothImmutableArray
handles equality and the passing of the reference typeCompilation
(this will always change between re-runs).PreserveAttribute.cs
added and then its namespace queried? Would the compiler change this? I assume it would always beglobal::RefitInternalGenerated.PreserveAttribute
CancellationToken
should be respected to reduce IDE lagI'll start work on a PR for this but I don't promise anything.
Related #1389
The text was updated successfully, but these errors were encountered: