Skip to content

Conversation

@guan404ming
Copy link
Member

Why

  • Using refl::init() to define a constructor that takes Any fails to compile
  • The reflection system converts Any to Any&& internally
  • No Type2Str<Any&&> specialization existed to handle this case

How

  • Added Type2Str<Any&&> specialization in any.h
  • Added forward declaration of Any in type_traits.h

@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @guan404ming, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a compilation failure in the reflection system when attempting to define constructors that accept Any types. The issue stemmed from the internal conversion of Any to Any&& without a corresponding Type2Str specialization. By adding this specialization and a necessary forward declaration, the PR ensures that refl::init<Any>() functions as expected, allowing for robust reflection of Any parameters.

Highlights

  • Reflection System Fix: Resolved a compilation error when using refl::init<Any>() by adding a Type2Str specialization for Any&&, which was previously missing.
  • Type Trait Enhancement: Introduced a Type2Str<Any&&> specialization in any.h to correctly handle rvalue references of Any objects within the reflection system.
  • Dependency Resolution: Added a forward declaration for class Any in type_traits.h to ensure proper compilation order and resolve potential circular dependencies.
  • Test Coverage: Included new unit tests in test_reflection.cc to validate that refl::init<Any>() now correctly initializes objects with Any type parameters using various underlying data types.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request correctly addresses a compilation failure when using refl::init<Any>() by adding the missing Type2Str<Any&&> specialization. The changes are minimal and well-targeted. A new test case has been added to verify the fix, which is great. I've added a few suggestions to improve the robustness of the new test by using ASSERT_TRUE for null checks to prevent potential crashes during test execution.

@guan404ming guan404ming force-pushed the fix/any-typestr-trait branch from 26d0e1d to 175669a Compare January 9, 2026 13:32
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
@guan404ming guan404ming marked this pull request as ready for review January 9, 2026 13:39

struct TestObjWithAny : public Object {
Any value;
explicit TestObjWithAny(Any value) : value(std::move(value)) {}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you also try

Suggested change
explicit TestObjWithAny(Any value) : value(std::move(value)) {}
explicit TestObjWithAny(AnyView value) : value(value) {}

and see if it compiles?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code fails to compile with the same missing TypeStr error when using refl::init<AnyView>() so I also add Type2Str<AnyView&&> specialization and related tests.

Copy link
Member

@junrushao junrushao left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks for the fix!

@junrushao junrushao merged commit 38914fa into apache:main Jan 10, 2026
8 checks passed
@guan404ming guan404ming deleted the fix/any-typestr-trait branch January 10, 2026 09:00
@guan404ming
Copy link
Member Author

Thanks!

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.

2 participants