Skip to content

PicoCLI Native Support (fixes #1153) #1155

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

Merged
merged 3 commits into from
Mar 2, 2025

Conversation

vorburger
Copy link
Member

Relates to #337, fixes #1153, illustrates #1154.

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.

Hello @vorburger, 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!

Summary of Changes

This pull request introduces native support for PicoCLI, addressing issue #1153. It involves adding the picocli-codegen dependency and integrating it as a Java plugin in the Bazel build system. The changes also include enabling native image generation for the demo application and refactoring the BUILD files to accommodate the new dependencies and plugin.

Highlights

  • PicoCLI Integration: The pull request adds info.picocli:picocli-codegen:4.7.6 as a new Maven dependency in MODULE.bazel and maven_install.json to enable PicoCLI's code generation capabilities.
  • Bazel Plugin Configuration: A new java_plugin named picocli is added in tools/bazel/java_plugin/BUILD, utilizing picocli.codegen.aot.graalvm.processor.NativeImageConfigGeneratorProcessor to generate native image configurations.
  • BUILD File Refactoring: The java_binary target enola in java/dev/enola/cli/BUILD is modified to depend on a new java_library target lib, and the picocli plugin is added to the java_binary target. Test dependencies are updated to use :lib instead of :enola.
  • Native Image Support: Native image generation is enabled for the demo application in java/dev/enola/cli/demo/BUILD by uncommenting the native_image target and adding the picocli plugin to the demolib target.

Changelog

Click here to see the changelog
  • MODULE.bazel
    • Added info.picocli:picocli-codegen:4.7.6 to the list of Maven dependencies.
  • java/dev/enola/cli/BUILD
    • Created a java_library target lib for the main application code.
    • Modified the enola java_binary to depend on :lib and use the picocli plugin.
    • Updated test dependencies to use :lib instead of :enola.
  • java/dev/enola/cli/demo/BUILD
    • Enabled native image generation for the demo application.
    • Added the picocli plugin to the demolib target.
  • maven_install.json
    • Added metadata for the info.picocli:picocli-codegen dependency, including shasums, dependencies, and service providers.
    • Updated hashes for input and resolved artifacts.
  • tools/bazel/java_plugin/BUILD
    • Added a java_plugin definition for picocli, specifying the processor class and dependencies.
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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

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 issue 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 is currently in preview and 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 to provide feedback.

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.


The command line, a textual stage,
Where arguments in order engage.
PicoCLI helps us define,
Each option with purpose aligned,
Making interfaces clear and sage.

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

The pull request introduces native support for PicoCLI by adding the picocli-codegen dependency and configuring the Bazel build files to use the PicoCLI Java plugin. This enables the generation of native images using GraalVM. The changes look good overall.

Merge Readiness

The pull request appears to be well-structured and addresses the issue of PicoCLI native support. However, due to the limitations of the review process (specifically, the inability to add review comments), I cannot provide detailed feedback on specific lines of code. Therefore, I recommend that another reviewer with more in-depth knowledge of the codebase and Bazel build system review the changes before merging. I am unable to approve this pull request, and users should have others review and approve this code before merging.

@vorburger vorburger merged commit 4ff1014 into enola-dev:main Mar 2, 2025
9 checks passed
@vorburger vorburger deleted the native_image2-PicoCLI-APT branch March 2, 2025 00:49
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.

PicoCLI Native Support
1 participant