Skip to content
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

use the resolved value of const arguments in propagated annotation arguments #940

Merged
merged 1 commit into from
Mar 28, 2024

Conversation

RBusarow
Copy link
Collaborator

@RBusarow RBusarow commented Mar 27, 2024

We have a good deal of logic around parsing out the primitive values of const parameters, but that logic is not recursive. So, if a const references another const in its initializer, we wound up just copying the text of that initializer into the generated annotations, as though it's just a String. This problem was isolated to the PSI side of parsing, since the Descriptor APIs are able to parse out the final, primitive value. Our type resolution logic always defaults to the PSI models.

Now, when we need to parse out the primitive values from a PropertyReference, we first try to resolve the Descriptor version with a PropertyDescriptor. That isn't possible if the annotation is referencing a const property that was generated in the same round of compilation. In that event, the parsing will fall back to the PSI models. Anvil doesn't actually generate a const and then use it in an annotation, so this seems like a reasonable compromise.

fixes #938

@RBusarow RBusarow enabled auto-merge March 28, 2024 13:02
…arguments

We have a good deal of logic around parsing out the primitive values of `const`
parameters, but that logic is not recursive.
So, if a `const` references another `const` in its initializer, we wound up
just copying the text of that initializer into the generated annotations,
as though it's just a String.
This problem was isolated to the PSI side of parsing,
since the Descriptor APIs are able to parse out the final, primitive value.
Our type resolution logic always defaults to the PSI models.

Now, when we need to parse out the primitive values from a `PropertyReference`,
we first try to resolve the Descriptor version with a `PropertyDescriptor`.
That isn't possible if the annotation is referencing a `const`
property that was generated in the same round of compilation.
In that event, the parsing will fall back to the PSI models.
Anvil doesn't actually generate a `const`
and then use it in an annotation, so this seems like a reasonable compromise.

fixes #938
@RBusarow RBusarow merged commit 97e2cc0 into main Mar 28, 2024
17 checks passed
@RBusarow RBusarow deleted the rick/annotation-const-refs branch March 28, 2024 13:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

@ContributesMultibinding codegen missing imports for synthesized annotation constants
2 participants