DEV Community

Cover image for Google Summer of Code 2025 Final Report (Kotlin Foundation)
Victoria Chuks
Victoria Chuks

Posted on • Edited on

Google Summer of Code 2025 Final Report (Kotlin Foundation)

IntelliJ Platform Gradle Plugin - Gradle Reporting and Parallel Verifications

As part of Google Summer of Code 2025, I had the amazing opportunity to improve the IntelliJ Platform Gradle Plugin (referred to as IPGP in this report) with support from my mentor Jakub Chrzanowski. IPGP is a Gradle plugin that simplifies configuring your environment for building, testing, verifying, and publishing plugins for IntelliJ-based IDEs. It does all this whiles keeping up with the frequent changes in the IntelliJ Platform. The plugin is used by JetBrains internally, by third-party developers, and by external companies to integrate their workflows with JetBrains tools.

This project aimed to improve IPGP by bringing it closer to Gradle standards and optimizing developer workflows.


🏢 Organization

Contributor: Victoria Alajemba
Mentor: Jakub Chrzanowski
Organization: Kotlin Foundation


🎯 Project Goals

  1. Introduce Gradle Reporting API to provide detailed, configurable verification task reports. Done ✅
  2. Utilize Gradle Worker API to enable parallel execution of the verifyPlugin task against multiple IntelliJ Platform versions, reducing execution time. Done ✅
  3. Explore additional Gradle enhancements to further improve plugin development workflows. Done ✅

🚚 Final Project Deliverables

1. Worker API for VerifyPluginTask

Problem: The verifyPlugin task verifies plugins against one or more IntelliJ IDE versions. Prior to the GSOC program is was assumed that the verification against multiple IDE versions happened sequentially.

Approach: Initially implemented Worker API to enable concurrent verification against multiple IDEs. Upon discovering that IntelliJ Plugin Verifier (IPV) already utilized concurrency, further investigation revealed that the main bottleneck was downloading IDE dependencies, not the verification work itself.
We then pivoted to explore whether dependencies for the verifyPlugin task could be downloaded in parallel. This research covered renaming dependencies to avoid conflicts, experimenting with dependency substitution and forced versioning, exploring the ResolutionResult API, and even experimenting with Worker API and other custom parallel execution strategies. Ultimately, Gradle does not allow parallel resolution of configurations.

Outcome: Worker API integration was prototyped but abandoned due to Gradle dependency resolution constraints.

Status: Closed

Notes: Research on parallel dependency resolution


2. Reporting API in VerifyPluginTask

Problem: To align closely with Gradle standards, VerifyPluginTask should create its report using Reporting API.

Approach: Integrated Reporting API for VerifyPluginTask. A ReportingContainer was introduced with support for HTML, Markdown, and Plain reports. These were exposed through the IntelliJPlatformExtension, allowing users to configure which reports to generate and where to store them.

Outcome: Functionally complete, but blocked by limitations in the IntelliJ Plugin Verifier, which only accepts a single output directory. Before PR can be merged, IPV needs to be updated to allow each report's output location to be configured.

Status: Draft

Notes: Reporting API research notes


3. Problems API in VerifyPluginTask

Problem: Make use of Gradle's problems reporting tool to enforce rich reporting of issues in a user friendly manner.

Approach: Integrated the Problems API, Gradle’s newer structured issue-reporting system. Issues reported now include details, solutions, contextual file locations, and links to documentation displayed in a consistent manner across different environments.

Outcome: Verification issues are now reported in a more maintainable way with more info for developers to quickly see what's wrong whether they're in the console, an IDE, viewing a BuildScan or the Problems report.

Status: Merged

Notes: Problems API integration notes

Gradle Problems API report

Gradle Problems API output in Console


4. Reporting API in VerifyPluginProjectConfigurationTask

Problem: Gradle task that validates certain configurations of the plugin's project lacked standardized reports.

Approach: Integrated the Reporting API into VerifyPluginProjectConfigurationTask.

Outcome: Demonstrated that the Reporting API works well in simpler validation contexts where PV’s output restrictions do not apply.

Status: Merged


5. Documentation Contribution

Problem: Gradle’s Reporting API lacked practical usage documentation for plugin developers.

Approach: Authored a new Gradle Cookbook entry explaining how to wire the Reporting API into plugin tasks.

Outcome: Provides practical examples and guidance on using the Reporting API.

Status: Merged


🚧 Project Status Overview

Deliverable PR Link Status
Worker API for VerifyPluginTask #1948 Closed
Reporting API for VerifyPluginTask #1996 Draft
Problems API in VerifyPluginTask #1987 Merged
Reporting API in VerifyPluginProjectConfigurationTask #2016 Merged
Gradle Cookbook Documentation #58 Merged

🎓 Key Learnings

Throughout this project, I gained a deep understanding of several critical concepts that are essential for not only proper plugin development in the Gradle ecosystem but also as a software engineer:

Gradle Build Lifecycle: I learned when Gradle tasks are configured and executed. This knowledge was crucial for correctly integrating the new APIs and understanding the timing of dependency resolution.

Gradle's Worker API and Dependency Resolution: I explored the Worker API for parallel execution and delved into the intricacies of Gradle's dependency resolution process. This research, including the use of detachedConfiguration in IPGP to resolve dependencies, taught me the technical limitations of parallelizing certain build phases in Gradle and the importance of thorough investigation.

Codebase Navigation: I was originally a bit afraid of the IPGP codebase, but in a few weeks I became familiar with the internal structure and flow. Very grateful to Jakub for this 🙌🏾.

One of my most valuable takeaways was that research is an essential part of development, even if it doesn't lead to a final implementation. The time spent investigating parallel dependency resolution was not a failure; it provided crucial insights that prevented wasted effort and clarified the true bottlenecks in the build process.


🔮 Future Work

  • Follow-up with community on merging the open PRs.
  • Hopefully contribute to improvements in the IntelliJ Plugin Verifier to allow configurable report directories.
  • Continue writing documentation to support adoption of Gradle APIs.

🔗 Additional Links

Top comments (1)

Collapse
 
bernert profile image
BernerT

Great work and thanks for the transparency. Devil's advocate: since Gradle limits blocked parallel downloads, did you explore a separate prefetch/sync task or a remote cache/mirror for IDE artifacts to cut wall time? With IPV already handling parallelism, does adding the Worker API risk double orchestration/overhead? Also, until the IPV changes merge, are users stuck with split reporting (Problems API vs existing verifier output)? Some before/after numbers would help show the wins.