<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog</title>
	<atom:link href="https://blog.jetbrains.com/idea/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.jetbrains.com</link>
	<description>Developer Tools for Professionals and Teams</description>
	<lastBuildDate>Mon, 22 Jun 2026 16:38:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://blog.jetbrains.com/wp-content/uploads/2024/01/cropped-mstile-310x310-1-32x32.png</url>
	<title>IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog</title>
	<link>https://blog.jetbrains.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Your JetBrains IDE Expertise, Now on LinkedIn</title>
		<link>https://blog.jetbrains.com/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</link>
		
		<dc:creator><![CDATA[Ekaterina Ryabukha]]></dc:creator>
		<pubDate>Wed, 17 Jun 2026 13:11:02 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/Blog-Featured-1280x720-4.png</featuredImage>		<product ><![CDATA[clion]]></product>
		<product ><![CDATA[dotnet]]></product>
		<product ><![CDATA[go]]></product>
		<product ><![CDATA[idea]]></product>
		<product ><![CDATA[phpstorm]]></product>
		<product ><![CDATA[pycharm]]></product>
		<product ><![CDATA[ruby]]></product>
		<product ><![CDATA[rust]]></product>
		<product ><![CDATA[webstorm]]></product>
		<category><![CDATA[news]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=blog&#038;p=711459</guid>

					<description><![CDATA[Every developer has tools they rely on daily. The workflows they&#8217;ve built around them, the ways they&#8217;ve learned to move faster, debug smarter, and write better code – that kind of hands-on experience can be hard to put into words. We’re collaborating with LinkedIn to make it easier for you to showcase your expertise with [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Every developer has tools they rely on daily. The workflows they&#8217;ve built around them, the ways they&#8217;ve learned to move faster, debug smarter, and write better code – that kind of hands-on experience can be hard to put into words.</p>



<p>We’re collaborating with LinkedIn to make it easier for you to showcase your expertise with JetBrains IDEs on the world’s largest professional network. You can now connect your IDE to LinkedIn and let your real tool usage speak for itself.</p>



<p align="center"><a class="jb-download-button" href="https://plugins.jetbrains.com/plugin/32011-linkedin-connected-apps" target="_blank" rel="noopener" data-test="blog-article-cta"><i class="download-icon"></i>Connect your IDE</a></p>



<p>IntelliJ IDEA, PyCharm, WebStorm, PhpStorm, Rider, GoLand, CLion, RustRover, and RubyMine are already supported via a free plugin, while support for DataGrip is coming soon.</p>



<p>In this blog post, we’ll explain what LinkedIn connected apps are, what they mean for your profile, and how to get started.</p>



<h2 class="wp-block-heading">What this is about</h2>



<p>Building on early <a href="https://www.linkedin.com/pulse/title-newways-stand-out-verify-skills-unlock-new-hari-srinivasan-zhtvc/" target="_blank" rel="noopener">collaboration</a> with Descript, Duolingo, Lovable, Relay.app, and Replit, LinkedIn is expanding the range of apps you can feature on your LinkedIn profile, turning real-world product usage into a credible, visible signal of practical tool experience. We’re glad to join forces with them to bring this to JetBrains IDE users.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
<cite>“We&#8217;re building new ways for members to show real, credible proof of what they&#8217;re capable of, right on their LinkedIn profile. And for the brands behind these tools, there&#8217;s no better endorsement than a customer who&#8217;s actively using and loving your product.”<br>– Dan Shapero, CEO of LinkedIn</cite></blockquote>



<p>Connected apps let you link the tools you use in your daily work directly to your LinkedIn profile, where they appear prominently, helping you stand out to your professional network. Once connected, each app generates a simple statement based on how you actually use it. Unlike manually added skills, this is based on real usage and updates automatically as your experience evolves.</p>



<figure class="wp-block-image size-full is-style-default"><img style="width:100% !important; height:auto !important; max-width:100% !important;" fetchpriority="high" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/In-LinkedIn-4.png" alt="" class="wp-image-713887"/></figure>



<h2 class="wp-block-heading">How to get started</h2>



<p>Open your JetBrains IDE, go to <em>Settings | Plugins</em>, search for the <em>LinkedIn Connected Apps</em> plugin under the <em>Marketplace</em> tab, and install it.&nbsp;</p>



<p>Once installed, the plugin starts collecting data locally about how you use your IDE. Depending on your usage history, you may receive an initial statement right away, which will then be updated once the plugin has collected enough data to better reflect your real IDE expertise.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/LinkedIn-integration-in-JetBrains-IDEs-example-1.png" alt="LinkedIn-integration-in-JetBrains-IDEs-example " class="wp-image-713131"/></figure>



<p><strong>Your IDE usage data stays on your machine</strong>. When you are ready, you can connect your LinkedIn account and share your IDE expertise badge there. If you keep the plugin installed, your badge will update automatically as your IDE usage evolves.</p>



<p>The plugin is free for all JetBrains IDE users.</p>



<h2 class="wp-block-heading">What’s included in this release</h2>



<p>This is the first version of the integration, delivered as a standalone plugin rather than being built directly into the IDE. It covers IntelliJ IDEA, PyCharm, WebStorm, GoLand, PhpStorm, Rider, CLion, RustRover, and RubyMine; DataGrip is not yet supported.&nbsp;</p>



<p>Usage is detected within the IDE itself, so if you use AI features via an external tool or terminal, those won&#8217;t be reflected yet.</p>



<h2 class="wp-block-heading">How your IDE expertise is determined</h2>



<p>The model is intentionally simple for now. It is designed to represent your practical use of JetBrains tools, <em>not </em>to rank developers or certify skill levels. Our goal was to provide a solid starting point, but we know there&#8217;s more to capture about how developers work with their IDEs.</p>



<p>Statements map to different levels of experience and are generated based on how you interact with your IDE – from writing and editing code using basic features to working with debugging tools, version control, and AI-assisted workflows. For more information, see <a href="https://www.jetbrains.com/help/idea/linkedin-connected-apps.html" target="_blank" rel="noopener">our documentation</a>.</p>



<h2 class="wp-block-heading">What’s coming next</h2>



<p>We’re already working on the next version, planned for later this year. We’ll focus on improving how IDE usage, including AI feature usage, is represented, expanding support to DataGrip, and making the overall experience feel more integrated.</p>



<h2 class="wp-block-heading">FAQ</h2>



<h3 class="wp-block-heading">Which JetBrains IDEs are supported?</h3>



<p>IntelliJ IDEA, PyCharm, WebStorm, GoLand, PhpStorm, Rider, CLion, RustRover, and RubyMine. Support for DataGrip is coming soon.</p>



<h3 class="wp-block-heading">Why isn’t DataGrip supported yet?</h3>



<p>DataGrip is designed for working with databases and includes workflows that differ from our other IDEs. We plan to support it soon.</p>



<h3 class="wp-block-heading">Can I connect multiple IDEs?</h3>



<p>Yes, if you use multiple supported JetBrains IDEs, you can connect each of them. You’ll get a badge for all connected IDEs.</p>



<p><strong>Note</strong>: If you use multiple JetBrains accounts across different IDE instances but link them all to the same LinkedIn profile, IDE usage statements from each account will be displayed on that LinkedIn profile.</p>



<h3 class="wp-block-heading">Do I need to keep the plugin installed after connecting?&nbsp;</h3>



<p>You can share your IDE usage statement once and then remove the plugin, but note that it must remain installed if you want to track your ongoing progress and have any changes reflected on LinkedIn.</p>



<h3 class="wp-block-heading">Is this feature free?</h3>



<p>Yes, it’s available to all JetBrains IDE users at no cost.</p>



<h3 class="wp-block-heading">Is this a certification?</h3>



<p>Connected apps reflect real IDE usage and are designed to showcase applied experience, not to act as a formal certification or skill ranking. Certifications, degrees, and licenses remain important markers of professional achievement. Connected apps on LinkedIn add a different kind of signal: partner-validated tool usage that reflects practical work and can update over time.</p>



<h3 class="wp-block-heading">What data is shared with LinkedIn and JetBrains?</h3>



<p>Only the information required to represent your connected account and IDE usage statement.&nbsp;</p>



<h3 class="wp-block-heading">Will this help me get hired?</h3>



<p>Having connected apps on your LinkedIn profile is extra proof of your practical experience with leading tools. While connected apps make your expertise visible, they are just one part of your profile. Think of it as a way to let your tooling speak for itself.</p>



<p>Give it a try and let us know what you think in the comments below. We&#8217;re continuing to develop this integration, and your feedback will help shape what comes next.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[de]]></code>
                        <url>https://blog.jetbrains.com/de/blog/2026/06/17/your-jetbrains-ide-expertise-now-on-linkedin/</url>
                    </language>
                	</item>
		<item>
		<title>Java Annotated Monthly – June 2026 </title>
		<link>https://blog.jetbrains.com/idea/2026/06/java-annotated-monthly-june-2026/</link>
		
		<dc:creator><![CDATA[Irina Mariasova]]></dc:creator>
		<pubDate>Fri, 05 Jun 2026 10:46:22 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/IJ-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[ai]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[spring-2]]></category>
		<category><![CDATA[java-annotated]]></category>
		<category><![CDATA[java-annotated-monthly]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=711733</guid>

					<description><![CDATA[A fresh edition of Java Annotated Monthly has landed! The world of software development keeps moving at full speed, and this month&#8217;s selection helps you keep up without drowning in tabs. Inside, you&#8217;ll find hand-picked articles, podcasts, videos, and thought-provoking reads covering Java, Kotlin, AI, and the technologies shaping the next generation of development. Grab [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>A fresh edition of Java Annotated Monthly has landed!</p>



<p>The world of software development keeps moving at full speed, and this month&#8217;s selection helps you keep up without drowning in tabs. Inside, you&#8217;ll find hand-picked articles, podcasts, videos, and thought-provoking reads covering Java, Kotlin, AI, and the technologies shaping the next generation of development.</p>



<p>Grab a coffee, pick a topic that catches your eye, and get ready to discover what&#8217;s new in the world of software development.</p>



<p>Let’s go!</p>



<h2 class="wp-block-heading">Java News</h2>



<p>The latest from the Java world is here. Let&#8217;s see what&#8217;s new, what&#8217;s changing, and what&#8217;s next:&nbsp;</p>



<ul class="wp-block-list">
<li>Java News Roundup <a href="https://www.infoq.com/news/2026/05/java-news-roundup-may04-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">1</a>, <a href="https://www.infoq.com/news/2026/05/java-news-roundup-may11-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">2</a>, <a href="https://www.infoq.com/news/2026/05/jdk-news-roundup-may18-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">3</a>, <a href="https://www.infoq.com/news/2026/06/java-news-roundup-may25-2026/" target="_blank" rel="noopener">4</a>&nbsp;</li>



<li><a href="https://inside.java/2026/05/08/jep532-target-jdk27/" target="_blank" rel="noopener">JEP targeted to JDK 27: 532: Primitive Types in Patterns, instanceof, and switch (5th Preview)</a></li>



<li><a href="https://inside.java/2026/05/11/jep533-target-jdk27/" target="_blank" rel="noopener">JEP targeted to JDK 27: 533: Structured Concurrency (7th Preview)</a></li>



<li><a href="https://www.infoq.com/news/2026/05/jep-533-jdk-27/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">JEP 533 Tightens Exception Handling in Java&#8217;s Structured Concurrency for JDK 27</a></li>



<li><a href="https://inside.java/2026/05/13/quality-heads-up/" target="_blank" rel="noopener">Quality Outreach Heads-up &#8211; JDK 27: Removal of Deprecated Java Launcher Options</a></li>



<li><a href="https://inside.java/2026/05/19/javaone-better-jdk26/" target="_blank" rel="noopener">Java 26: Better Language, Better APIs, Better Runtime</a></li>



<li><a href="https://inside.java/2026/05/20/quality-heads-up/" target="_blank" rel="noopener">Quality Outreach Heads-Up &#8211; JDK 27: Numeric Fields in JSON Thread Dumps</a></li>



<li><a href="https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/" target="_blank" rel="noopener">Skills, Java 17, and Theme Accents With Codename One</a></li>
</ul>



<h2 class="wp-block-heading">Java Tutorials and Tips</h2>



<p>From quick tips to deep dives, here are some Java tutorials worth adding to your reading list:</p>



<ul class="wp-block-list">
<li><a href="https://tidyfirst.substack.com/p/genie-tarpit" target="_blank" rel="noopener">Genie Tarpit</a></li>



<li><a href="https://inside.java/2026/05/03/jdk-client-desktop/" target="_blank" rel="noopener">The JDK Client Desktop: 2026 and Still Swinging</a></li>



<li><a href="https://foojay.io/today/java-is-not-the-dark-side-why-learning-java-is-easier-than-you-think/" target="_blank" rel="noopener">Java is Not the Dark Side: Why Learning Java Is Easier Than You Think</a></li>



<li><a href="https://dzone.com/articles/top-genai-java-frameworks" target="_blank" rel="noopener">Comparing Top Gen AI Frameworks for Java in 2026</a></li>



<li><a href="https://foojay.io/today/foojay-podcast-95/" target="_blank" rel="noopener">Foojay Podcast #95: Is Your Java App Actually Secure, Or Does It Just Look That Way?</a></li>



<li><a href="https://inside.java/2026/05/12/javaone-post-native-interop/" target="_blank" rel="noopener">Native Interoperability With JDK 25 and the FFM API</a></li>



<li><a href="https://inside.java/2026/05/28/podcast-059/" target="_blank" rel="noopener">Episode 59 “Java Is Memory Efficient” [AtA]</a></li>



<li><a href="https://www.youtube.com/watch?v=jm7o2I_QOpM" target="_blank" rel="noopener">The Legendary Marit van Dijk</a></li>



<li><a href="https://donraab.medium.com/fat-free-lambdas-in-java-bf228da0613b" target="_blank" rel="noopener">“Fat-Free” Lambdas in Java</a></li>
</ul>



<h2 class="wp-block-heading">Kotlin Corner</h2>



<p>From ecosystem updates to productivity-boosting tricks, here&#8217;s what&#8217;s happening in the world of Kotlin:</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/kotlin/2026/05/kotlinconf26-keynote-highlights/">KotlinConf&#8217;26 Keynote Highlights&nbsp;</a></li>



<li><a href="https://blog.jetbrains.com/ai/2026/05/koog-1-0-is-out-stable-core-better-interop-and-multiplatform-observability/">Koog 1.0 Is Out!&nbsp;</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/05/official-kotlin-support-for-visual-studio-code-is-now-available-in-alpha/">Official Kotlin Support for Visual Studio&nbsp;</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/05/the-road-to-name-based-destructuring/">The Road to Name-Based Destructuring&nbsp;</a></li>
</ul>



<h2 class="wp-block-heading">AI&nbsp;</h2>



<p>Here&#8217;s what caught our eye in the world of AI this month:</p>



<ul class="wp-block-list">
<li><a href="https://adamtornhill.substack.com/p/compressed-cognition-the-hidden-cost" target="_blank" rel="noopener">Compressed Cognition: The Cost of Faster Coding</a></li>



<li><a href="https://www.infoq.com/presentations/ai-products/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Next Generation of AI Products</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/05/teaching-an-ai-agent-to-debug-flaky-tests/">Teaching an AI Agent to Debug Flaky Tests</a></li>



<li><a href="https://inside.java/2026/05/26/openjdk-ai-agents/" target="_blank" rel="noopener">Agentic AI Workflows for OpenJDK Development</a></li>



<li><a href="https://foojay.io/today/enterprise-java-quality-gates-ai/" target="_blank" rel="noopener">Why Enterprise Java Teams Need Quality Gates Even More in the Age of AI</a></li>



<li><a href="https://nolanlawson.com/2026/05/25/using-ai-to-write-better-code-more-slowly/" target="_blank" rel="noopener">Using AI to Write Better Code More Slowly</a></li>
</ul>



<h2 class="wp-block-heading">Languages, Frameworks, Libraries, and Technologies</h2>



<p>The tech world is bigger than just Java and Kotlin. Explore the latest updates and happenings across technologies:&nbsp;</p>



<ul class="wp-block-list">
<li>This Week in Spring <a href="https://spring.io/blog/2026/05/05/this-week-in-spring-may-05-2026" target="_blank" rel="noopener">1</a>, <a href="https://spring.io/blog/2026/05/12/this-week-in-spring-may-12-2026" target="_blank" rel="noopener">2</a>, <a href="https://spring.io/blog/2026/05/19/this-week-in-spring-may-19-2026" target="_blank" rel="noopener">3</a>, <a href="https://spring.io/blog/2026/05/26/this-week-in-spring-may-26-2026" target="_blank" rel="noopener">4</a></li>



<li><a href="https://www.youtube.com/watch?v=0Gb1z-2SjHY" target="_blank" rel="noopener">How a Group of Developers Took Back Control from Enterprise Java | Spring: The Documentary</a></li>



<li><a href="https://micronaut.io/2026/05/20/micronaut-framework-5-0-0-released/" target="_blank" rel="noopener">Micronaut Framework 5.0.0 Released!</a></li>



<li><a href="https://www.youtube.com/watch?v=Y8M70rOo2P0" target="_blank" rel="noopener">Kubernetes Made Easy. Deploy. Monitor. Debug. All From IntelliJ IDEA</a></li>



<li><a href="https://www.infoq.com/articles/platform-reliability-cycle/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Three Pillars of Platform Engineering: A Virtuous Cycle</a></li>



<li><a href="https://foojay.io/today/ai-shepherd-senior-developer/" target="_blank" rel="noopener">The Code Was Always the Door</a></li>



<li><a href="https://foojay.io/today/when-should-you-use-a-cache-with-mongodb/" target="_blank" rel="noopener">When Should You Use a Cache With MongoDB?</a></li>



<li><a href="https://foojay.io/today/building-an-ai-powered-operations-assistant-with-spring-ai-and-mongodb-atlas-part-1-rag-foundation/" target="_blank" rel="noopener">Building an AI-Powered Operations Assistant With Spring AI and MongoDB Atlas – Part 1: RAG Foundation</a></li>



<li><a href="http://hollycummins.com/quarkus-cool-things-riviera-dev/" target="_blank" rel="noopener">Five (and a Half) Cool Things You Can Do With Quarkus</a></li>



<li><a href="https://spring.io/blog/2026/05/14/a-bootiful-podcast-daniel-adib-saikali" target="_blank" rel="noopener">A Bootiful Podcast: The Legendary Adib Saikali</a></li>



<li><a href="https://www.infoq.com/news/2026/05/ai-agents-kubernetes-rag/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Benchmarking AI Agents on Kubernetes</a></li>



<li><a href="https://www.infoq.com/presentations/product-cloud-native/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Product Thinking for Cloud Native Engineers</a></li>



<li><a href="https://spring.io/blog/2026/05/21/a-bootiful-podcast-hadi-hariri" target="_blank" rel="noopener">A Bootiful Podcast: Hadi Hariri, JetBrains Legend</a></li>



<li><a href="https://spring.io/blog/2026/05/28/a-bootiful-podcast-martijn-verburg" target="_blank" rel="noopener">A Bootiful Podcast: Microsoft&#8217;s Martijn Verburg</a></li>
</ul>



<h2 class="wp-block-heading">Conferences and Events</h2>



<p>Mark your calendar:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://jprime.io" target="_blank" rel="noopener">JPrime</a> – Sofia, Bulgaria, June 3–4</li>



<li><a href="https://jspring.nl" target="_blank" rel="noopener">JSpring</a> – Utrecht, Netherlands, June 4</li>



<li><a href="https://jsail.ijug.eu" target="_blank" rel="noopener">JSail Unconference</a> – Hemelum, Netherlands, June 8–12</li>



<li><a href="https://www.devbcn.com/2026" target="_blank" rel="noopener">DevBcn</a> – Barcelona, Spain, June 16–17</li>



<li><a href="https://devoxx.pl/" target="_blank" rel="noopener">Devoxx Poland</a> – Kraków, Poland, June 17–19</li>



<li><a href="https://luxembourg.voxxeddays.com/en/" target="_blank" rel="noopener">Voxxed Days Luxembourg</a> – Mondorf-les-Bains, Luxembourg, June 18–19</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://lp.jetbrains.com/intellij-idea-conf-2026/?utm_source=newsletter&amp;utm_medium=jam&amp;utm_campaign=intellijideaconf" target="_blank" rel="noopener"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/06/image-4.png" alt="" class="wp-image-711734"/></a></figure>



<h2 class="wp-block-heading">Culture and Community</h2>



<p>Code is only part of the story. Explore the ideas, conversations, and people shaping the developer community:</p>



<ul class="wp-block-list">
<li><a href="https://www.infoq.com/podcasts/some-developers-thrive-while-others-struggle/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The AI Joy Gap: Why Some Developers Thrive While Others Struggle</a></li>



<li><a href="https://www.infoq.com/presentations/ai-assisted-engineering/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Leadership in AI-Assisted Engineering</a></li>



<li><a href="https://www.infoq.com/presentations/ai-native-engineering/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">AI Native Engineering</a></li>
</ul>



<h2 class="wp-block-heading">And Finally…</h2>



<p>Check out the latest blog posts from IntelliJ IDEA:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/">Improving Accessibility in JetBrains IDEs: What’s New and What’s Next in 2026</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/05/hibernate-7-4-new-features/">Hibernate 7.4 New Features</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/05/teaching-an-ai-agent-to-debug-flaky-tests/">Teaching an AI Agent to Debug Flaky Tests</a></li>
</ul>



<p>That’s it for today! We’re always collecting ideas for the next Java Annotated Monthly – send us your suggestions via <a href="https://mail.google.com/mail/u/0/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com" target="_blank" rel="noopener">email</a> or <a href="https://x.com/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor">X</a> by June 20. Don’t forget to check out our archive of <a href="https://www.jetbrains.com/lp/jam/" target="_blank" rel="noopener">past JAM issues</a> for any articles you might have missed!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2026.1.3 Is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/06/intellij-idea-2026-1-3/</link>
		
		<dc:creator><![CDATA[Julia Shashkova]]></dc:creator>
		<pubDate>Thu, 04 Jun 2026 13:24:16 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/IJ-social-BlogFeatured-2026-1-3.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=711393</guid>

					<description><![CDATA[We’ve just released IntelliJ IDEA 2026.1.3. You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our website. The latest update brings the following improvements: For a comprehensive overview of the fixes, see the release notes. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We’ve just released IntelliJ IDEA 2026.1.3. You can update to this version from inside the IDE, using the <a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener">website</a>.</p>



<p>The latest update brings the following improvements:</p>



<ul class="wp-block-list">
<li>In tmux, the terminal cursor is no longer rendered above the current line. [<a href="https://youtrack.jetbrains.com/issue/IJPL-102697" target="_blank" rel="noopener">IJPL-102697</a>]</li>



<li>The Markdown preview now correctly displays images when referencing files outside the project directory. [<a href="https://youtrack.jetbrains.com/issue/IJPL-171896" target="_blank" rel="noopener">IJPL-171896</a>]</li>



<li>Custom colors are rendered correctly in various UI components in the <em>Database</em> tool window. [<a href="https://youtrack.jetbrains.com/issue/DBE-25711" target="_blank" rel="noopener">DBE-25711</a>]</li>



<li>Launching WSL via <code>wsl.exe -d &lt;distribution&gt;</code> no longer causes shell integration and process detection issues. [<a href="https://youtrack.jetbrains.com/issue/IJPL-236576" target="_blank" rel="noopener">IJPL-236576</a>]</li>
</ul>



<p>For a comprehensive overview of the fixes, see the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662689/IntelliJ-IDEA-2026.1.3-261.25134.95-build-Release-Notes" data-type="link" data-id="https://youtrack.jetbrains.com/articles/IDEA-A-2100662689/IntelliJ-IDEA-2026.1.3-261.25134.95-build-Release-Notes" target="_blank" rel="noopener">release notes</a>. If you spot any issues, let us know via the <a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2025.3.6 Is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/06/intellij-idea-2025-3-6/</link>
		
		<dc:creator><![CDATA[Julia Shashkova]]></dc:creator>
		<pubDate>Wed, 03 Jun 2026 13:12:33 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/06/IJ-social-BlogFeatured-2025-3-6.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=711482</guid>

					<description><![CDATA[IntelliJ IDEA 2025.3.6 is now available with the latest Oracle critical patch update for Java 21. The update includes the corresponding JetBrains Runtime changes and fixes the issue [IDEA-389015], providing improved reliability and security. You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>IntelliJ IDEA 2025.3.6 is now available with the latest Oracle critical patch update for Java 21. The update includes the corresponding JetBrains Runtime changes and fixes the issue [<a href="https://youtrack.jetbrains.com/issue/IDEA-389015/jbr25.0.3-resourcemanager.sketchImporter.ResourceFileGeneratorTest-throws-ComparisonFailure" target="_blank" rel="noopener">IDEA-389015</a>], providing improved reliability and security.</p>



<p>You can update to this version from inside the IDE, using the <a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener">website</a>.</p>



<p>For a comprehensive overview of the fixes, see the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662688" data-type="link" data-id="https://youtrack.jetbrains.com/articles/IDEA-A-2100662688" target="_blank" rel="noopener">release notes</a>. If you spot any issues, let us know via the <a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Hibernate 7.4 New Features</title>
		<link>https://blog.jetbrains.com/idea/2026/05/hibernate-7-4-new-features/</link>
		
		<dc:creator><![CDATA[Siva Katamreddy]]></dc:creator>
		<pubDate>Fri, 29 May 2026 14:29:53 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/IJ-social-BlogFeatured-1280x720-1-1.png</featuredImage>		<category><![CDATA[java]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[jpa]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=709833</guid>

					<description><![CDATA[Hibernate 7.4 introduced several improvements that simplify loading a page of data along with their associated child collection, historical data access, and audit logging. The article will focus on the following features: You can check out the sample code for this article in this GitHub repository. Limits and Fetch Joins One common requirement in data-driven [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Hibernate 7.4 introduced <a href="https://docs.hibernate.org/orm/7.4/whats-new/" target="_blank" rel="noopener">several improvements</a> that simplify loading a page of data along with their associated child collection, historical data access, and audit logging.</p>



<p>The article will focus on the following features:</p>



<ul class="wp-block-list">
<li><strong>Limits and Fetch Joins</strong>: How Hibernate 7.4 improves working with paginated queries that include fetched associations.</li>



<li><strong>History and Audit Tables</strong>: How the new capabilities support querying entity state across time and working with historical data.</li>
</ul>



<p><br><strong>You can check out the sample code for this article in this </strong><a href="https://github.com/sivaprasadreddy/hibernate-7.4-demo" target="_blank" rel="noopener"><strong>GitHub repository</strong></a><strong>.</strong></p>



<h2 class="wp-block-heading">Limits and Fetch Joins</h2>



<p>One common requirement in data-driven applications is loading a page of parent entities along with an associated child entity collection. For example, suppose an application has an <code>Order</code> entity with a <code>Set&lt;OrderItem&gt;</code> collection, and we want to load the first few orders together with their order items.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">List&lt;Order> orders = session
        .createSelectionQuery(
            "select o from Order o join fetch o.items order by o.id",
            Order.class
        )
        .setMaxResults(10)
        .getResultList();</pre>



<p>In Hibernate versions before 7.4, applying a limit to a query that used a collection fetch join could not be safely pushed down to the database. Because each <code>Order</code> may have multiple <code>OrderItem</code> rows, limiting the SQL result directly could cut off part of an order&#8217;s item collection. To avoid returning incomplete collections, Hibernate loaded all matching rows from the database and applied pagination in memory at the application layer.</p>



<p>That behavior was correct, but it could be expensive. A query intended to load only 10 orders might still read many more rows if the table contained a large number of orders and order items.</p>



<p>Before Hibernate 7.4, the generated SQL would look like the following:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">select
    o1_0.id, i1_0.order_id, i1_0.id, i1_0.product_code,
    i1_0.quantity, o1_0.order_number, o1_0.status
from
    orders o1_0
        join
    order_items i1_0
    on o1_0.id=i1_0.order_id</pre>



<p>As you can see, the limit(pagination) is not applied at the SQL query level. So, it will load all the <code>orders</code> and their associated <code>order_items</code>, which could be a very expensive operation and may result in <em>OutOfMemoryException</em>.</p>



<p>You can see a WARNING logged by Hibernate as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">[WARN] HHH90003004: firstResult/maxResults specified with collection fetch; applying in memory</pre>



<p>One option to prevent Hibernate performing pagination in memory is by setting the following property:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">hibernate.query.fail_on_pagination_over_collection_fetch=true</pre>



<p>By configuring this property, Hibernate throws an exception instead of performing pagination in memory.</p>



<p>Hibernate 7.4 fixes this problem by using nested queries. Instead of applying the limit directly to the joined result set, Hibernate first determines the limited set of parent entity identifiers and then fetches the associated collection for only those parent rows.&nbsp;</p>



<p>This allows pagination to happen in the database while still returning complete items collections for each selected Order.</p>



<p>With Hibernate 7.4, the SQL will be generated as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">select
        o1_0.id, i1_0.order_id, i1_0.id, i1_0.product_code,
        i1_0.quantity, o1_0.order_number,o1_0.status 
    from
        (select
            o1_0.id, o1_0.order_number, o1_0.status 
        from
            orders o1_0 
        where
            exists(select
                1 from order_items i1_0 
            where
                o1_0.id=i1_0.order_id) 
        offset
            ? rows 
        fetch
            first ? rows only) o1_0(id, order_number, status) 
    join
        order_items i1_0 
            on o1_0.id=i1_0.order_id</pre>



<p>This improvement makes fetch joins more practical for paginated screens, such as an order listing page that displays each order with its line items, without forcing the application to load the full result set first.</p>



<h2 class="wp-block-heading">History and Audit Tables</h2>



<p>Hibernate 7.4 adds built-in support for temporal history tables and audit tables. Both features help track changes to entity data, but they serve slightly different use cases: history tables let us query the state of an entity at a point in time, while audit tables record the sequence of changes that happened to an entity.</p>



<p>Consider the following <code>Product</code> entity:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Entity
@Table(name = "products")
class Product {
    //fields id, code, name, price
}</pre>



<h3 class="wp-block-heading">History Tables</h3>



<p>To enable temporal history for <code>Product</code>, annotate the entity with <code>@Temporal</code> and optionally specify the history table name using <code>@Temporal.HistoryTable</code>.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Entity
@Table(name = "products")
@Temporal
@Temporal.HistoryTable(name="products_history")
class Product {
    //fields id, code, name, price
}</pre>



<p>With this mapping, Hibernate stores previous versions of product rows in the <code>products_history</code> table. The table includes the entity columns plus two temporal columns: <strong><em>effective</em></strong>, which marks when a version became active, and <strong><em>superseded</em></strong>, which marks when that version was replaced.</p>



<p><strong>products_history</strong> table:</p>



<figure class="wp-block-table"><table><thead><tr><th><strong>id</strong></th><th><strong>code</strong></th><th><strong>name</strong></th><th><strong>price</strong></th><th><strong>effective</strong></th><th><strong>superseded</strong></th></tr></thead><tbody><tr><td>2251</td><td>P1000</td><td>Product-1000</td><td>40.00</td><td>2026-05-15 08:21:39.949001 +00:00</td><td>null</td></tr><tr><td>2301</td><td>P1001</td><td>Product-1001</td><td>90.00</td><td>2026-05-15 08:22:24.765883 +00:00</td><td>2026-05-15 08:22:24.778067 +00:00</td></tr><tr><td>2301</td><td>P1001</td><td>Product-1001</td><td>100.00</td><td>2026-05-15 08:22:24.778067 +00:00</td><td>null</td></tr></tbody></table></figure>



<p>We can get the Product entity data at a given point of time as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Instant someTime = ...
try (var session = sessionFactory.withOptions().asOf(someTime).open()) {
    var product = session.find(Product.class, productId);
    
}</pre>



<p>This makes temporal queries feel like normal entity lookups while Hibernate resolves the correct historical row behind the scenes.</p>



<p>Hibernate offers several different strategies(NATIVE, SINGLE_TABLE, HISTORY_TABLE) for mapping temporal entities. For more info check out the <a href="https://docs.hibernate.org/orm/7.4/introduction/html_single/#temporal-data" target="_blank" rel="noopener">Temporal data</a> section.</p>



<h3 class="wp-block-heading">Audit Tables</h3>



<p>Previously, Hibernate-based applications typically used the separate <a href="https://hibernate.org/orm/envers/" target="_blank" rel="noopener">Hibernate Envers</a> library for auditing entity changes. Hibernate 7.4 brings audit table support into Hibernate ORM itself, so applications can use auditing features natively without adding <strong>Envers</strong> for this use case.</p>



<p>Audit support is enabled by adding <code>@Audited</code> and can be mapped to a custom table using <code>@Audited.Table</code>.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@Entity
@Table(name = "products")
@Audited
@Audited.Table(name="products_aud_log")
class Product {
    //fields id, code, name, price
}</pre>



<p>When auditing is enabled, Hibernate writes one row per change into the audit table. Unlike the history table, the audit table focuses on recording what operation happened and when.</p>



<figure class="wp-block-table"><table><thead><tr><th><strong>id</strong></th><th><strong>code</strong></th><th><strong>name</strong></th><th><strong>price</strong></th><th><strong>rev</strong></th><th><strong>revtype</strong></th></tr></thead><tbody><tr><td>2001</td><td>P1002</td><td>Product-1002</td><td>90.00</td><td>2026-05-13 14:58:17.505775 +00:00</td><td>0</td></tr><tr><td>2001</td><td>P1002</td><td>Product-1002</td><td>100.00</td><td>2026-05-13 14:58:17.518194 +00:00</td><td>1</td></tr></tbody></table></figure>



<p>The <code>rev</code> values are the timestamps at which the change happened. The <code>revtype</code> values are represented using <code>ModificationType</code> enum as follows:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">public enum ModificationType {
    /**
    * Creation, encoded as 0
    */
    ADD,
    /**
    * Modification, encoded as 1
    */
    MOD,
    /**
    * Deletion, encoded as 2
    */
    DEL
}</pre>



<p>For more info check out the <a href="https://docs.hibernate.org/orm/7.4/introduction/html_single/#audit-logs" target="_blank" rel="noopener">Audit logs</a> section.</p>



<h2 class="wp-block-heading">Summary</h2>



<p>Most of the applications use pagination to show a list of resources, and we used to write custom logic to load paginated data along with the associated child collection. Now this is being handled at the framework level itself. Also, we used to rely on external libraries like <strong>Envers</strong> to implement auditing, which is now provided by Hibernate itself.</p>



<p>Hibernate 7.4 brings practical improvements that address real problems in JPA/ Hibernate-based applications. Whether we are optimizing pagination query behavior or tracking historical data, Hibernate 7.4 reduces the amount of custom infrastructure needed and provides better support out of the box without requiring additional libraries.</p>



<p>Go ahead and explore these new features using this <a href="https://github.com/sivaprasadreddy/hibernate-7.4-demo" target="_blank" rel="noopener"><strong>GitHub repository</strong></a><strong>.</strong></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2026.2 EAP Is Open</title>
		<link>https://blog.jetbrains.com/idea/2026/05/intellij-idea-2026-2-eap/</link>
		
		<dc:creator><![CDATA[Dmitriy Smirnov]]></dc:creator>
		<pubDate>Tue, 26 May 2026 14:40:15 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/IntelliJ-IDEA-2026.2-EAP.png</featuredImage>		<category><![CDATA[eap]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=709481</guid>

					<description><![CDATA[The Early Access Program (EAP) for IntelliJ IDEA 2026.2 is now ongoing. The first EAP builds are already available in the Toolbox App, on the website, and as a snap for Ubuntu. As always, EAP builds are free to use until the release ships, and the feedback you send genuinely helps shape the final version. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>The Early Access Program (EAP) for IntelliJ IDEA 2026.2 is now ongoing. The first EAP builds are already available in the <a href="https://www.jetbrains.com/toolbox-app" target="_blank" rel="noopener">Toolbox App</a>, on the <a href="https://www.jetbrains.com/idea/nextversion" target="_blank" rel="noopener">website</a>, and as a snap for Ubuntu. As always, EAP builds are free to use until the release ships, and the feedback you send genuinely helps shape the final version.</p>



<p>In this post, we’d like to share the general direction we’re taking for this release cycle.</p>



<p>Most importantly, we are working to maintain the balance between AI-assisted coding and classic development workflows (where manual coding is still the main activity).</p>



<p><strong>For AI users</strong>, we are introducing <a href="https://blog.jetbrains.com/ai/2026/04/skill-manager-and-skill-repository/">the skill repository</a> for your agents right in the IDE and actively working to improve next edit suggestions, add AI-powered full method generation, and expose more IDE knowledge via MCP.</p>



<p>With <strong>full method generation</strong>, when you call a method that doesn&#8217;t exist yet, the IDE&#8217;s AI will give you the option to generate both the signature stub and the full implementation body, using the same <em>Tab-to-accept</em> flow you are already familiar with.</p>



<p>MCP will make more debugging capabilities visible to agents. This will allow agents to set breakpoints, including newly introduced logpoints.</p>



<p>Now that agents have moved into the CLI, we are working to ensure that IntelliJ IDEA&#8217;s built-in terminal offers ideal support for them. It will support drag-and-drop file paths and image pasting when you&#8217;re talking to a CLI coding agent, plus the project&#8217;s JDK is available without manual PATH setup.</p>



<p><strong>For those who prefer classic development workflows</strong>, we’re bringing revamped dependency completion to build scripts. In the dependency section, the IDE will provide completion only where relevant – artifact coordinates, scopes, and relevant version – based on the local cache and server-side knowledge.</p>



<p>You’ll also be able to run Flyway and Liquibase migrations from the same context menu and data source view you use for everything else, with dedicated run configurations for each tool. This keeps migrations in the same workflow – whether you&#8217;re spinning up a new module or fixing a broken state on staging.</p>



<p><strong>But no matter your preferred way of coding </strong>(even if you combine methods), you are still in control of what ships, so understanding, reviewing, and debugging the code is just as important as ever.</p>



<p>We’re continually improving <strong>Spring Debugger </strong>to provide even more runtime information. The editor will show security indicators next to your endpoints and tell you which roles unlock them, so you can see at a glance whether a controller method is protected and how.</p>



<p>We’re also working to bring a new <strong>Hibernate Debugger</strong> that shows the SQL or HQL that Hibernate is about to issue, lets you jump from a query straight to the line of Kotlin or Java code that triggered it, and allows you to run the query in the application&#8217;s own configuration. If you&#8217;ve ever asked, <em>&#8220;Where is that query coming from?&#8221;</em>, this feature is for you.</p>



<p><strong>Logpoints</strong> are the &#8220;println debugger&#8221; you’ve always wished you had. Investigating a bug used to mean sprinkling <code>System.out.println</code> calls and rebuilding. In 2026.2, AI can place logpoints with the expressions you actually care about during a debugging session – no suspending, no recompile, and no leftover prints to clean up.</p>



<p>A <strong>cornerstone</strong> of IntelliJ IDEA is that we stay on the cutting edge in supporting underlying tech. Early support for Java 27, Kotlin 2.4.x updates, and Gradle 10 is coming.</p>



<p>Following the Kotlin and JPA improvements in 2026.1, in this release cycle, we’re continuing to sharpen Kotlin in Spring projects: clearer Kotlin-aware diagnostics, smoother data class interop, and fewer surprises when migrating an existing Java/Spring codebase to Kotlin.</p>



<p>And it should go without saying that we’re always working to boost product performance and overall quality, fix freezes and bugs, and reduce resource consumption.</p>



<p>Not every EAP build will have a dedicated blog post, but once the features we’re working on land in public builds, we’ll cover them in dedicated posts. Stay tuned!</p>



<p><strong>Share your feedback</strong></p>



<p>Take part in the Early Access Program by trying out the EAP builds and sharing your feedback with us. You can get in touch with us on <a href="https://x.com/intellijidea">X</a>, <a href="https://bsky.app/profile/intellijidea.com" target="_blank" rel="noopener">Bluesky</a>, or <a href="https://www.linkedin.com/showcase/intellijidea" target="_blank" rel="noopener">LinkedIn</a>, or leave a comment below. If you come across a bug or something that doesn’t work as expected, please report it via our <a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Improving Accessibility in JetBrains IDEs: What’s New and What’s Next in 2026</title>
		<link>https://blog.jetbrains.com/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</link>
		
		<dc:creator><![CDATA[Ekaterina Valeeva]]></dc:creator>
		<pubDate>Thu, 21 May 2026 06:45:13 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/Blog-Featured-1280x720-1-1.png</featuredImage>		<product ><![CDATA[clion]]></product>
		<product ><![CDATA[go]]></product>
		<product ><![CDATA[idea]]></product>
		<product ><![CDATA[phpstorm]]></product>
		<product ><![CDATA[pycharm]]></product>
		<product ><![CDATA[ruby]]></product>
		<product ><![CDATA[rust]]></product>
		<product ><![CDATA[webstorm]]></product>
		<category><![CDATA[news]]></category>
		<category><![CDATA[accessibility]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=platform&#038;p=707397</guid>

					<description><![CDATA[Making software accessible often comes down to removing small but repeated points of friction in everyday workflows. Today, on Global Accessibility Awareness Day, we’re sharing recent improvements in JetBrains IDEs across several areas: compatibility with assistive technologies on various platforms, keyboard navigation, and non-visual feedback. Some of these improvements are already available, and some are [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>Making software accessible often comes down to removing small but repeated points of friction in everyday workflows. Today, on <a href="https://accessibility.day/" target="_blank" rel="noopener">Global Accessibility Awareness Day</a>, we’re sharing recent improvements in JetBrains IDEs across several areas: compatibility with assistive technologies on various platforms, keyboard navigation, and non-visual feedback. Some of these improvements are already available, and some are coming later this year.</p>



<p><em>You can use the audio player below to listen to this blog post.</em></p>


                                    <audio class="article-audio" preload="metadata" style="width: 100%;" controls>
                <source type="audio/mp4" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/Accessibility-Blog-Post-Audio.mp4">
                <a href="https://blog.jetbrains.com/wp-content/uploads/2026/05/Accessibility-Blog-Post-Audio.mp4">
                    Accessibility Blog Post Audio                </a>
            </audio>
            


<h2 class="wp-block-heading">Better compatibility with assistive technologies</h2>



<p>One of the key areas we’ve been working on is improving how JetBrains IDEs interact with OS-level accessibility tools.</p>



<h3 class="wp-block-heading">Improved Magnifier support on Windows</h3>



<p>Screen magnifiers are among the most commonly used assistive technologies in JetBrains IDEs. Until recently, the built-in Windows Magnifier didn’t reliably follow the text cursor in the editor, making navigation and editing more difficult for low-vision users. We’ve implemented support for cursor tracking so Magnifier follows text as you type, just as it does in other applications.</p>



<figure class="wp-block-video" alt="Video demonstrating how Windows Magnifier follows the text caret while typing in a code editor"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/MAgnifier_output.mp4"></video></figure>



<p>This builds on earlier work on macOS, where we addressed text cursor tracking with macOS Zoom. Now, the same support is being extended to Windows.</p>



<h3 class="wp-block-heading">Orca and GNOME Magnifier support on Linux</h3>



<p>With version 2026.2, coming this summer, JetBrains IDEs will allow you to use the Orca screen reader and GNOME Magnifier in <a href="https://www.jetbrains.com/help/idea/2026.1/installation-guide.html#operating-systems" target="_blank" rel="noopener">supported Linux environments</a>.&nbsp;</p>



<p>This is an active area of work, with multiple related tasks already underway. Accessibility shouldn’t depend on your operating system, and we’re continuing to improve support across platforms.</p>



<h2 class="wp-block-heading">More predictable keyboard navigation</h2>



<p>We’ve also been making it easier to move through the IDE without relying on a mouse.</p>



<h3 class="wp-block-heading">Main menu access with <em>Alt </em>on Windows</h3>



<p>In native Windows applications, pressing <em>Alt</em> moves the focus to the main menu, allowing you to navigate it with the keyboard. This behavior was previously missing from JetBrains IDEs, and screen readers, such as NVDA, would sometimes announce the system menu instead.</p>



<p>Now, the main menu behaves in a way that feels familiar and predictable for keyboard-only and screen-reader users, and the bright focus indicator helps low-vision users identify the selected item.&nbsp;&nbsp;</p>



<figure class="wp-block-video" alt="Video demonstrating how the IDE main menu receives focus and is highlighted with a blue frame when pressing the Alt key"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/AltF_output.mp4"></video></figure>



<h3 class="wp-block-heading">Navigating between major parts of the IDE</h3>



<p>Another focus area is the experience of moving between different parts of the IDE interface, such as toolbars, panels, and the editor. We’re working on a more structured model for navigating through the big component groups:</p>



<ul class="wp-block-list">
<li><em>Tab</em> and <em>Shift+Tab</em> move the focus within the current area.</li>



<li>A dedicated shortcut lets you jump between larger sections of the IDE.</li>
</ul>



<p>This reduces the effort required to reach essential controls and makes the overall layout easier to navigate. For the current iteration, we made it possible to bring the main toolbar and status bar into focus, and we fixed the <em>Project</em><strong> </strong>and <em>Git</em> toolbar widgets, which were not selectable by screen readers, even though other elements already were.&nbsp;</p>



<figure class="wp-block-video" alt="Video demonstrating how the IDE main toolbar receives focus and is highlighted with a blue frame when the Alt+PgUp shortcut is pressed"><video controls src="https://blog.jetbrains.com/wp-content/uploads/2026/05/AltPgUp_output.mp4"></video></figure>



<p>As the next step, we’ll polish specific controls and include tool window bars on both sides of the IDE frame in the navigation flow.</p>



<h2 class="wp-block-heading">Exploring richer non-visual feedback with audio cues</h2>



<p>Accessibility is not only about reaching controls, but also about understanding what’s happening while you work. We’re exploring ways to provide richer audio feedback in the IDE. Two directions we’re currently investigating:</p>



<ul class="wp-block-list">
<li>Contextual signals when the caret lands on lines with errors, warnings, breakpoints, or version control changes. We want the IDE to provide immediate, non-visual feedback in context.</li>



<li>More general audio notifications for IDE actions and state changes.</li>
</ul>



<p>The goal is to reduce the need to rely on visual indicators or switch contexts just to understand what changed. Instead, we want the IDE to provide that information more directly.</p>



<h2 class="wp-block-heading">Accessibility as an ongoing effort</h2>



<p>We’re improving accessibility in JetBrains IDEs across multiple areas at once, including by providing compatibility with assistive technologies like screen readers and magnifiers, as well as by offering more consistent keyboard navigation and clearer feedback for events that are otherwise mostly visual.</p>



<p>These improvements build on earlier updates, such as support for VoiceOver and NVDA, a high-contrast UI theme, and color schemes for red-green vision deficiency. There’s still more to do, and we’ll continue working in this direction.</p>



<h2 class="wp-block-heading">We’d love to hear from you</h2>



<p>We’re eager to hear from developers who rely on accessibility features, as well as from anyone interested in improving the experience of using them.</p>



<p>If you have ideas or feedback about accessibility in JetBrains IDEs, you can reach us directly at <strong>accessibility@jetbrains.com</strong>. You can also report issues through <a href="https://youtrack.jetbrains.com/newIssue?project=IJPL" target="_blank" rel="noopener">YouTrack</a> or the <a href="https://www.jetbrains.com/support/" target="_blank" rel="noopener">support request form</a>.</p>



<p>If you’d like to stay informed about accessibility improvements, you can subscribe to updates <a href="https://lp.jetbrains.com/ij-accessibility/" target="_blank" rel="noopener">here</a>.</p>
]]></content:encoded>
					
		
		
		                    <language>
                        <code><![CDATA[zh-hans]]></code>
                        <url>https://blog.jetbrains.com/zh-hans/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[pt-br]]></code>
                        <url>https://blog.jetbrains.com/pt-br/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ko]]></code>
                        <url>https://blog.jetbrains.com/ko/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[ja]]></code>
                        <url>https://blog.jetbrains.com/ja/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[fr]]></code>
                        <url>https://blog.jetbrains.com/fr/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[es]]></code>
                        <url>https://blog.jetbrains.com/es/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                                    <language>
                        <code><![CDATA[de]]></code>
                        <url>https://blog.jetbrains.com/de/platform/2026/05/improving-accessibility-in-jetbrains-ides-what-s-new-and-what-s-next-in-2026/</url>
                    </language>
                	</item>
		<item>
		<title>IntelliJ IDEA 2026.1.2 Is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/05/intellij-idea-2026-1-2/</link>
		
		<dc:creator><![CDATA[Maria Kosukhina]]></dc:creator>
		<pubDate>Fri, 15 May 2026 14:26:49 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/IntelliJ-IDEA-2026.1.2.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=707477</guid>

					<description><![CDATA[IntelliJ IDEA 2026.1.2 has arrived with several valuable fixes. You can update to this version from inside the IDE, using the&#160;Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our&#160;website. Here are the most notable updates included in this version: To find out more details about the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>IntelliJ IDEA 2026.1.2 has arrived with several valuable fixes.</p>



<p>You can update to this version from inside the IDE, using the&nbsp;<a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noreferrer noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our&nbsp;<a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noreferrer noopener">website</a>.</p>



<p>Here are the most notable updates included in this version:</p>



<ul class="wp-block-list">
<li>Projects can now be opened correctly via <code>.ipr</code> files generated by the Gradle <code>idea</code> task. [<a href="https://youtrack.jetbrains.com/issue/IJPL-242321/Project-cannot-be-opened-via-.ipr-file-generated-by-Gradle-idea-task" target="_blank" rel="noopener">IJPL-242321</a>]</li>
</ul>



<ul class="wp-block-list">
<li>The indentation for Java ternary expressions with chained method calls has been fixed. [<a href="https://youtrack.jetbrains.com/issue/IDEA-387867/Java-code-formatting-for-chained-method-calls-in-ternary-expressions-changed" target="_blank" rel="noopener">IDEA-387867</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Pressing the <em>Alt+Enter</em> key combination on Windows no longer opens the context menu unexpectedly. [<a href="https://youtrack.jetbrains.com/issue/IJPL-47743/Alt-key-calls-context-menu-on-Windows" target="_blank" rel="noopener">IJPL-47743</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Live templates with <code>groovyScript</code> now work as expected again. [<a href="https://youtrack.jetbrains.com/issue/IJPL-241581/IDE-2026.1-broke-Live-Templates-with-groovyScript" target="_blank" rel="noopener">IJPL-241581</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Dragging and dropping selected code with the mouse onto its original position no longer causes the code to disappear. [<a href="https://youtrack.jetbrains.com/issue/IJPL-235895/Drag-and-drop-with-mouse-of-code-on-its-own-spot-makes-the-code-disssapear" target="_blank" rel="noopener">IJPL-235895</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>It is once again possible to open a diff in an external tool by double-clicking a file in the <em>Commit </em>tool window. [<a href="https://youtrack.jetbrains.com/issue/IJPL-241256/Cannot-Show-Diff-In-External-Tool" target="_blank" rel="noopener">IJPL-241256</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>The MCP Server no longer reports illegal character errors for projects with spaces in their paths [<a href="https://youtrack.jetbrains.com/issue/IJPL-241803/MCP-Server-Illegal-character-in-path-for-project-paths-containing-spaces" target="_blank" rel="noopener">IJPL-241803</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Workspaces once again function as expected. [<a href="https://youtrack.jetbrains.com/issue/IDEA-388445/Workspaces-compatibility-with-2026.1-is-broken" target="_blank" rel="noopener">IDEA-388445</a>]&nbsp;</li>
</ul>



<ul class="wp-block-list">
<li>Several IDE freezes have been resolved. [<a href="https://youtrack.jetbrains.com/issue/IJPL-235455/Long-read-action-in-com.intellij.codeInsight.daemon.impl.HighlightInfoUpdaterImpl.addEvictedInfos" target="_blank" rel="noopener">IJPL-235455</a>] [<a href="https://youtrack.jetbrains.com/issue/IJPL-224542/IDE-Freeze-FUS-Telemetry-Deadlock" target="_blank" rel="noopener">IJPL-224542</a>] [<a href="https://youtrack.jetbrains.com/issue/IJPL-203153/PhpStorm-2025.2-Freezes-After-Update-with-settingsSync-enabled-stuck-in-R.e.getIdToken" target="_blank" rel="noopener">IJPL-203153</a>]</li>
</ul>



<p></p>



<p>To find out more details about the issues resolved, please refer to the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662679/IntelliJ-IDEA-2026.1.2-261.24374.151-build-Release-Notes" data-type="link" data-id="https://youtrack.jetbrains.com/articles/IDEA-A-2100662679/IntelliJ-IDEA-2026.1.2-261.24374.151-build-Release-Notes" target="_blank" rel="noopener">release notes</a>.</p>



<p>If you encounter any bugs, please report them to our&nbsp;<a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noreferrer noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2025.3.5 is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/05/intellij-idea-2025-3-5/</link>
		
		<dc:creator><![CDATA[Julia Shashkova]]></dc:creator>
		<pubDate>Wed, 06 May 2026 17:11:39 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/IJ-social-BlogFeatured-253-5.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=705084</guid>

					<description><![CDATA[We’ve just released IntelliJ IDEA 2025.3.5. This version includes performance improvements for Spring projects – specifically for users who haven’t yet updated to v2026.1: You can update to this version from inside the IDE, using the Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our website. [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>We’ve just released IntelliJ IDEA 2025.3.5. This version includes performance improvements for Spring projects – specifically for users who haven’t yet updated to v2026.1:</p>



<ul class="wp-block-list">
<li>Searches for declared Spring beans are no longer triggered during typing or completion, ensuring code completion works smoothly in Spring-based projects. [<a href="https://youtrack.jetbrains.com/issue/IDEA-378966" target="_blank" rel="noopener">IDEA-378966</a>]</li>
</ul>



<p>You can update to this version from inside the IDE, using the <a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our <a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noopener">website</a>.</p>



<p>For a comprehensive overview of the fixes, see the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662673" target="_blank" rel="noopener">release notes</a>. If you spot any issues, let us know via the <a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Java Annotated Monthly – May 2026</title>
		<link>https://blog.jetbrains.com/idea/2026/05/java-annotated-monthly-may-2026/</link>
		
		<dc:creator><![CDATA[Irina Mariasova]]></dc:creator>
		<pubDate>Tue, 05 May 2026 12:33:33 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/05/IJ-social-BlogFeatured-1280x720-1.png</featuredImage>		<category><![CDATA[ai]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[kotlin]]></category>
		<category><![CDATA[news]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=705190</guid>

					<description><![CDATA[April flew by. The pace of tech development didn’t slow, and the flow of news and knowledge didn’t either. This month, Emily Bache joins us to share some sharp finds about AI agents and test-driven development. Java stays busy with fresh updates and practical tips, and Kotlin keeps pushing forward right next to it. The [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>April flew by. The pace of tech development didn’t slow, and the flow of news and knowledge didn’t either.</p>



<p>This month, <a href="http://bacheconsulting.com/" target="_blank" rel="noopener">Emily Bache</a> joins us to share some sharp finds about AI agents and test-driven development. Java stays busy with fresh updates and practical tips, and Kotlin keeps pushing forward right next to it. The AI section is, as usual, packed with things worth your attention.</p>



<p>You’ll also find upcoming events to plan for and a few ideas to challenge your thinking.</p>



<h2 class="wp-block-heading">Featured Content </h2>


    <div class="about-author ">
        <div class="about-author__box">
            <div class="row">
                                                            <div class="about-author__box-img">
                            <img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-2.png" alt="" loading="lazy">
                        </div>
                                        <div class="about-author__box-text">
                                                    <h4>Emily Bache</h4>
                                                <p><span style="font-weight: 400;">Emily Bache is an independent consultant, YouTuber, author, and Technical Coach, with over 25 years of experience working with Java and other programming languages and tools. She works with developers, training and coaching effective agile practices like refactoring and test-driven development. Emily has written two books about software development and contributed to several others. Emily founded the Samman Technical Coaching Society in order to promote technical excellence and support coaches everywhere.</span></p>
                    </div>
                            </div>
        </div>
    </div>



<p>It&#8217;s my pleasure to bring to your attention some interesting content that appeared in April. The huge change that is sweeping through our industry right now is the adoption of AI coding agents, which many people are using instead of hand-coding changes to software. One of the most important new skills to master is designing a &#8220;harness&#8221; for your AI tool, and this month Birgitta Böckeler has published the <a href="https://martinfowler.com/articles/harness-engineering.html" target="_blank" rel="noopener">best reference</a> I&#8217;ve seen so far about what that is and a mental model for how to think about it. Chris Parsons has also published an extensive guide titled <a href="https://www.chrismdp.com/coding-with-ai/" target="_blank" rel="noopener"><em>How I use AI to Code</em></a>, which is a really great resource for experienced developers looking to create their own harness and mentor others to do the same.</p>



<p>Perhaps as a contrast, I&#8217;d also like to highlight Michael Taggart&#8217;s <a href="https://taggart-tech.com/reckoning/" target="_blank" rel="noopener">introspective experience report</a> on his use of AI. He wrestles with his conscience over using these tools at all. An interesting metaphor for AI-assisted coding came up in an article by Drew Breunig – we run the risk of building a <a href="https://www.dbreunig.com/2026/03/26/winchester-mystery-house.html" target="_blank" rel="noopener">Winchester Mystery House</a>. After you read that, listen to Kevlin Henney’s talk <a href="https://youtu.be/vpYJMr1pJRY?si=EE528ERYChpGhHHw" target="_blank" rel="noopener"><em>Being the Human in the Loop</em></a>, where he takes a look at the engineering skills we still need – ones that could perhaps prevent the kind of thing Drew writes about from happening.&nbsp;</p>



<p>I have a particular interest in test-driven development, which, as a technical coach, is a big part of what I teach to others. I wrote an initial assessment of <a href="https://coding-is-like-cooking.info/2026/03/test-driven-development-with-agentic-ai/" target="_blank" rel="noopener">what TDD looks like these days</a>, based on interviews with several practitioners I trust who are all using agentic AI. For those of you who’d like to see me in action writing code,&nbsp; I have a demo of a <a href="https://www.youtube.com/watch?v=pqz_efj61q8" target="_blank" rel="noopener">narrow integration test for an outbound port in a hexagonal architecture</a>, in Kotlin.</p>



<h2 class="wp-block-heading">Java News</h2>



<p>Catch what shipped and track what’s next:</p>



<ul class="wp-block-list">
<li>Java News Roundup <a href="https://www.infoq.com/news/2026/04/java-news-roundup-apr06-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">1</a>, <a href="https://www.infoq.com/news/2026/04/java-news-roundup-apr13-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">2</a>, <a href="https://www.infoq.com/news/2026/04/java-news-roundup-apr20-2026/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">3</a>, <a href="https://www.infoq.com/news/2026/05/java-news-roundup-apr27-2026/" target="_blank" rel="noopener">4</a></li>



<li><a href="https://inside.java/2026/04/12/newsletter/" target="_blank" rel="noopener">Newsletter: Java 26 Is Now Available | JDK 27 Heads-Ups</a></li>



<li><a href="https://inside.java/2026/04/21/quality-heads-up/" target="_blank" rel="noopener">Quality Outreach Heads-up – JDK 27: Obsolete Translation Resources Removed</a></li>



<li><a href="https://www.youtube.com/watch?v=Hy-Hf-G0Fp8" target="_blank" rel="noopener">Update Your JDK, Read More Code, and Talk to Your Users: Interviews From VoxxedDays Amsterdam (#93)</a></li>
</ul>



<h2 class="wp-block-heading">Java Tutorials and Tips</h2>



<p>Steal these tricks:</p>



<ul class="wp-block-list">
<li><a href="https://nipafx.dev/inside-java-newscast-109" target="_blank" rel="noopener">Analysing Crashed JVMs – Inside Java Newscast #109</a></li>



<li><a href="https://foojay.io/today/the-javafx-revival/" target="_blank" rel="noopener">Oracle’s Java Verified Portfolio and JavaFX: What It Actually Means</a></li>



<li><a href="https://www.youtube.com/watch?v=9h0FEgNYyr8" target="_blank" rel="noopener">10 Things I Hate About Java by Adele Carpenter</a></li>



<li><a href="https://www.youtube.com/watch?v=Jts62hWkRO8" target="_blank" rel="noopener">Is AI Ruining Java Open Source? – Andres Almiray | The Marco Show</a></li>



<li><a href="https://medium.com/@achrafhasbi/java-26-updates-you-must-know-7dbbdd489a28" target="_blank" rel="noopener">Java 26: Updates You Must Know</a></li>



<li><a href="https://www.youtube.com/live/RDNrCz4EiFI" target="_blank" rel="noopener">Java and Gen AI: JVM Agents With Embabel by Rod Johnson (Spring Creator)</a></li>



<li><a href="https://spring.io/blog/2026/04/02/a-bootiful-podcast-ana-maria-mihalceanu" target="_blank" rel="noopener">A Bootiful Podcast: Java Developer Advocate Ana-Maria Mihalceanu</a></li>



<li><a href="https://foojay.io/today/does-java-really-use-too-much-memory-lets-look-at-the-facts-jeps/" target="_blank" rel="noopener">Does Java Really Use Too Much Memory? Let’s Look at the Facts (JEPs)</a></li>



<li><a href="https://foojay.io/today/java-native-memory-access-modes/" target="_blank" rel="noopener">Thread-Safe Native Memory in Java: VarHandle Access Modes Explained</a></li>



<li><a href="https://inside.java/2026/04/09/podcast-054/" target="_blank" rel="noopener">Episode 54 “How JDK 26 Improves G1’s Throughput” [AtA]</a></li>



<li><a href="https://nipafx.dev/inside-java-newscast-110" target="_blank" rel="noopener">You Must Avoid Final Field Mutation – Inside Java Newscast #110</a></li>



<li><a href="https://inside.java/2026/04/19/generics-optimization/" target="_blank" rel="noopener">How the JVM Optimizes Generic Code</a></li>



<li><a href="https://4comprehension.com/enum-map-serialization/" target="_blank" rel="noopener">The Curious Case of Enum and Map Serialization</a></li>



<li><a href="https://inside.java/2026/04/27/avoiding-final-field-mutation/" target="_blank" rel="noopener">Avoiding Final Field Mutation</a></li>
</ul>



<h2 class="wp-block-heading">Kotlin Corner</h2>



<ul class="wp-block-list">
<li><a href="https://javapro.io/2026/04/16/kotlin-kontra-java-part-1-ecosystem/" target="_blank" rel="noopener">Kotlin kontra Java – Part 1 – Ecosystem</a></li>



<li><a href="https://blog.jetbrains.com/kotlin/2026/04/kotlin-professional-certificate-by-jetbrains-now-on-linkedin-learning/">Kotlin Professional Certificate by JetBrains – Now on LinkedIn Learning</a></li>



<li><a href="https://blog.jetbrains.com/ai/2026/04/introducing-koog-integration-for-spring-ai-smarter-orchestration-for-your-agents/">Introducing Koog Integration for Spring AI: Smarter Orchestration for Your Agents</a></li>



<li><a href="https://www.youtube.com/watch?v=Tg3BN36v-wQ" target="_blank" rel="noopener">Reliable AI Agents Using Domain Modeling With Koog in Java</a></li>
</ul>



<h2 class="wp-block-heading">AI&nbsp;</h2>



<p>Cut the hype, test the tools, and boost your flow:&nbsp;</p>



<ul class="wp-block-list">
<li><a href="https://foojay.io/today/how-we-built-a-java-ai-agent-by-connecting-the-dots-the-ecosystem-already-had/" target="_blank" rel="noopener">How We Built a Java AI Agent by Connecting the Dots the Ecosystem Already Had</a></li>



<li><a href="https://www.infoq.com/articles/ai-agent-transport-layer/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Stateful Continuation for AI Agents: Why Transport Layers Now Matter</a></li>



<li><a href="https://spring.io/blog/2026/04/09/a-bootiful-podcast-ana-mark-kropf" target="_blank" rel="noopener">A Bootiful Podcast: Mark Kropf on AI Orchestration</a></li>



<li><a href="https://www.youtube.com/watch?v=2mGr7kdstJs" target="_blank" rel="noopener">Embabel Tools &amp; MCP Servers: Supercharge Your Java AI Agents</a></li>



<li><a href="https://blog.jetbrains.com/qodana/2026/04/adversarial-ai-threats/">Adversarial AI: Understanding the Threats to Modern AI Systems</a></li>



<li><a href="https://foojay.io/today/why-java-developers-over-trust-ai-dependency-suggestions/" target="_blank" rel="noopener">Why Java Developers Over-Trust AI Dependency Suggestions</a></li>



<li><a href="https://blog.frankel.ch/agentic-github-workflows/" target="_blank" rel="noopener">A GitHub Agentic Workflow</a>&nbsp;</li>



<li><a href="https://blog.pollack.ai/p/8a0a3a73-144a-4615-a992-560da556f13c/" target="_blank" rel="noopener">ACP Java SDK: Building IDE Agents in Java</a>&nbsp;</li>



<li><a href="https://spring.io/blog/2026/04/15/spring-ai-session-management" target="_blank" rel="noopener">Spring AI Agentic Patterns (Part 7): Session API – Event-Sourced Short-Term Memory with Context Compaction</a></li>



<li><a href="https://www.infoq.com/articles/beyond-rag-context-aware/" target="_blank" rel="noopener">Beyond RAG: Architecting Context-Aware AI Systems With Spring Boot</a>&nbsp;</li>



<li><a href="https://spring.io/blog/2026/04/07/spring-ai-agentic-patterns-6-memory-tools" target="_blank" rel="noopener">Spring AI Agentic Patterns (Part 6): AutoMemoryTools – Persistent Agent Memory Across Sessions</a>&nbsp;</li>



<li><a href="https://foojay.io/today/best-practices-for-working-with-ai-agents-subagents-skills-and-mcp/" target="_blank" rel="noopener">5 Best Practices for Working with AI Agents, Subagents, Skills, and MCP</a>&nbsp;</li>



<li><a href="https://www.infoq.com/presentations/deepfakes-ai/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Deepfakes, Disinformation, and AI Content Are Taking Over the Internet</a></li>



<li><a href="https://www.infoq.com/articles/mcp-java-architectural-strategy-llm-integrations/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">MCP in the Java World: Bringing Architectural Strategy to LLM Integrations</a></li>
</ul>



<h2 class="wp-block-heading">Languages, Frameworks, Libraries, and Technologies</h2>



<p>Explore new tools and technologies, and revisit the old ones:</p>



<ul class="wp-block-list">
<li>This Week in Spring <a href="https://spring.io/blog/2026/04/07/this-week-in-spring-april-07-2026" target="_blank" rel="noopener">1</a>, <a href="https://spring.io/blog/2026/04/14/this-week-in-spring-april-14-2026" target="_blank" rel="noopener">2</a>, <a href="https://spring.io/blog/2026/04/21/this-week-in-spring-april-21-2026" target="_blank" rel="noopener">3</a>, <a href="https://spring.io/blog/2026/04/28/this-week-in-spring-april-28-2026" target="_blank" rel="noopener">4</a></li>



<li><a href="https://www.infoq.com/articles/beyond-rag-context-aware/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Article: Beyond RAG: Architecting Context-Aware AI Systems With Spring Boot</a></li>



<li><a href="http://hollycummins.com/quarkus-ridiculous-things-devoxx-poland/" target="_blank" rel="noopener">Six and a Half Ridiculous Things to Do With Quarkus</a></li>



<li><a href="https://www.infoq.com/articles/spring-team-spring-7-boot-4/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">The Spring Team on Spring Framework 7 and Spring Boot 4</a></li>



<li><a href="https://spring.io/blog/2026/04/16/a-bootiful-podcast-craig-walls" target="_blank" rel="noopener">A Bootiful Podcast: The Legendary Craig Walls</a></li>



<li><a href="https://quarkus.io/blog/reflection-free-jsckson-serializers/" target="_blank" rel="noopener">Enabling Reflection-Free Jackson Serializers by Default</a>&nbsp;</li>



<li><a href="https://dandreamsofcoding.com/2026/03/31/understanding-performance/" target="_blank" rel="noopener">Understanding Performance</a>&nbsp;</li>



<li><a href="https://spring.io/blog/2026/04/23/a-bootiful-podcast-venkat-james" target="_blank" rel="noopener">A Bootiful Podcast: A Bootiful Podcast: Dr. Venkat Subramaniam and James Ward on Intelligent Kotlin and So Much More</a></li>



<li><a href="https://foojay.io/today/the-road-to-docker-official-images-for-java-the-azul-zulu-story/" target="_blank" rel="noopener">The Road to Docker Official Images for Java: The Azul Zulu Story</a></li>



<li><a href="https://www.youtube.com/watch?v=cUofXEeCCXo" target="_blank" rel="noopener">Spring Debugger New Power: Where Should I Click to Demystify Spring Boot Magic?</a></li>
</ul>



<h2 class="wp-block-heading">Conferences and Events</h2>



<p>Join the crowd online or offline:</p>



<ul class="wp-block-list">
<li><a href="https://jax.de/mainz-en" target="_blank" rel="noopener">JAX</a> – Mainz, Germany or Online, May 4–8</li>



<li><a href="https://www.devoxx.co.uk" target="_blank" rel="noopener">Devoxx UK</a> – London, United Kingdom, May 6–7; JetBrains will have a booth at the event. Also, come and listen to our JetBrains speakers: <a href="https://maritvandijk.com/" target="_blank" rel="noopener">Marit van Dijk</a>, <a href="https://cheuk.dev/" target="_blank" rel="noopener">Cheuk Ting Ho</a>, and <a href="https://www.linkedin.com/in/vergauwensimon/" target="_blank" rel="noopener">Simon Vergauwen</a>. The Spring documentary will premiere there, followed by a panel with <a href="https://joshlong.com/" target="_blank" rel="noopener">Josh Long</a>, <a href="https://www.linkedin.com/in/noregressions/" target="_blank" rel="noopener">Steve Poole</a>, and <a href="https://maritvandijk.com/" target="_blank" rel="noopener">Marit van Dijk</a>.</li>
</ul>



<ul class="wp-block-list">
<li><a href="https://2026.geecon.org" target="_blank" rel="noopener">GeeCon</a> – Kraków, Poland, May 14–15; <a href="https://maritvandijk.com/" target="_blank" rel="noopener">Marit van Dijk</a> is speaking and moderating a panel on Java to discuss what excites each of them most about Java in 2026.&nbsp;</li>



<li><a href="http://jalba.scot" target="_blank" rel="noopener">JAlba</a> – Edinburgh, Scotland, May 14–16</li>



<li><a href="https://jnation.pt" target="_blank" rel="noopener">JNation Conference</a> – Coimbra, Portugal, May 26–27; <a href="https://www.linkedin.com/in/antonarhipov/" target="_blank" rel="noopener">Anton Arhipov</a> and <a href="https://maritvandijk.com/" target="_blank" rel="noopener">Marit van Dijk</a> from JetBrains are the speakers.&nbsp;</li>



<li><a href="https://makeit.si" target="_blank" rel="noopener">JCON Slovenia</a> – Portorož, Slovenia, May 27–29</li>
</ul>



<figure class="wp-block-image size-full"><a href="https://kotlinconf.com/" target="_blank" rel="noopener"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/image-1.png" alt="" class="wp-image-705191"/></a></figure>



<h2 class="wp-block-heading">Culture and Community</h2>



<p>Where do you stand on these topics?</p>



<ul class="wp-block-list">
<li><a href="https://www.infoq.com/presentations/panel-positive-culture/?utm_campaign=infoq_content&amp;utm_source=infoq&amp;utm_medium=feed&amp;utm_term=global" target="_blank" rel="noopener">Panel: Building a Culture That Works</a></li>



<li><a href="https://sive.rs/balance" target="_blank" rel="noopener">How to Do What You Love and Make Good Money</a>&nbsp;</li>



<li><a href="https://www.paulgraham.com/ds.html" target="_blank" rel="noopener">Do Things That Don’t Scale</a>&nbsp;</li>



<li><a href="https://martinfowler.com/articles/reduce-friction-ai/encoding-team-standards.html" target="_blank" rel="noopener">Encoding Team Standards</a>&nbsp;</li>



<li><a href="https://blog.scottlogic.com/2026/04/01/beyond-the-hype-is-ai-taking-fun-out-of-software-development.html" target="_blank" rel="noopener">Beyond the Hype: Is AI Taking the Fun out of Software Development?</a>&nbsp;</li>
</ul>



<h2 class="wp-block-heading">And Finally…</h2>



<p>One last thing before you close the article. Don’t skip it!</p>



<ul class="wp-block-list">
<li><a href="https://blog.jetbrains.com/idea/2026/03/using-spring-data-jpa-with-kotlin/">Using Spring Data JPA With Kotlin</a></li>



<li><a href="https://blog.jetbrains.com/idea/2026/04/using-spring-data-jdbc-with-kotlin/">Using Spring Data JDBC With Kotlin</a></li>



<li><a href="https://blog.jetbrains.com/platform/2026/04/speeding-up-interactive-rebase-in-jetbrains-ides/">Speeding up Interactive Rebase in JetBrains IDEs</a></li>



<li><a href="https://blog.jetbrains.com/platform/2026/04/from-java-to-wayland-a-pixel-s-journey/">From Java to Wayland: A Pixel’s Journey</a></li>
</ul>



<p>That’s it for today! We’re always collecting ideas for the next Java Annotated Monthly – send us your suggestions via <a href="https://mail.google.com/mail/u/0/?fs=1&amp;tf=cm&amp;source=mailto&amp;to=JAM@jetbrains.com" target="_blank" rel="noopener">email</a> or <a href="https://x.com/intellijidea?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor">X</a> by May 20. And don’t forget to check out our archive of <a href="https://www.jetbrains.com/lp/jam/" target="_blank" rel="noopener">past JAM issues</a> for any articles you might have missed!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Teaching an AI Agent to Debug Flaky Tests</title>
		<link>https://blog.jetbrains.com/idea/2026/05/teaching-an-ai-agent-to-debug-flaky-tests/</link>
		
		<dc:creator><![CDATA[Igor Kulakov]]></dc:creator>
		<pubDate>Mon, 04 May 2026 09:14:46 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/04/IJ-social-BlogFeatured-1280x720-1-3.png</featuredImage>		<category><![CDATA[ai]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[tutorials]]></category>
		<category><![CDATA[ai-agent]]></category>
		<category><![CDATA[ai-agents]]></category>
		<category><![CDATA[ai-skills]]></category>
		<category><![CDATA[intellij-idea]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=704196</guid>

					<description><![CDATA[If you&#8217;ve been connected to the internet for a while, you&#8217;ve surely heard of AI Agent Skills. They teach your agent to do this and that. You might have even used or written a couple of them yourself. If you aren&#8217;t yet familiar with them, the idea is simple: Instead of prompting instructions for a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>If you&#8217;ve been connected to the internet for a while, you&#8217;ve surely heard of <a href="https://blog.jetbrains.com/idea/2026/03/ai-assisted-java-application-development-with-agent-skills/">AI Agent Skills</a>. They teach your agent to do this and that. You might have even used or written a couple of them yourself.</p>



<p>If you aren&#8217;t yet familiar with them, the idea is simple: Instead of prompting instructions for a specific task each time, you define them once and reuse them later. A Skill is an AI equivalent of a knowledge base article: a plain text document that lives in a discoverable location and describes steps, a set of conventions, or domain-specific knowledge.</p>



<p>Most Skills you see in the wild are for simple things like enforcing code style or commit message conventions. But they can be much more powerful than that. In this article, we&#8217;ll combine AI Skills, good old developer tools, and a bit of creative thinking to address a notoriously challenging task: making AI <em>deterministically</em> find the root cause of flaky tests.</p>



<h2 class="wp-block-heading"><strong>The problem</strong></h2>



<p>Quoting the <a href="https://www.jetbrains.com/teamcity/ci-cd-guide/concepts/flaky-tests/" target="_blank" rel="noopener">TeamCity CI/CD guide</a>:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p></p>
<cite>Flaky tests are defined as tests that return both passes and failures despite no changes to the code or the test itself.</cite></blockquote>



<p><em>Flakiness</em> undermines the whole point of tests: When a test fails, you can&#8217;t tell whether something is actually broken. You can&#8217;t fully rely on the test results, and at the same time, you can&#8217;t ignore them. This wastes both human and infrastructure resources.</p>



<p>And as if the underlying bugs weren&#8217;t difficult enough on their own, flaky tests often have this property of failing once in several thousand runs, making them extremely hard to reproduce and debug.</p>



<h2 class="wp-block-heading"><strong>Example project</strong></h2>



<p>For the example project, let&#8217;s take the <a href="https://github.com/flounder4130/webshop-demo" target="_blank" rel="noopener">webshop demo</a> from this article: <a href="https://flounder.dev/posts/your-programs-are-not-single-threaded/" target="_blank" rel="noopener">Your Programs Are Not Single-Threaded</a>. It is a Spring Boot project, in which one of the services has a <a href="https://en.wikipedia.org/wiki/Time-of-check_to_time-of-use" target="_blank" rel="noopener">TOCTOU (time-of-check to time-of-use)</a> problem: It checks a condition and then acts on it, but another thread can change the state in between. In this particular case, it may sometimes cause duplicate invoice numbers and also makes the corresponding test flaky.</p>



<p>Here&#8217;s the problematic test:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">@SpringBootTest
class InvoiceServiceTest {

    @Autowired
    private OrderService orderService;

    @Test
    void firstTwoOrdersGetInvoiceNumbersOneAndTwo() {
        CompletableFuture&lt;Invoice> alice = CompletableFuture.supplyAsync(
                () -> orderService.checkout("Alice", BigDecimal.TEN));
        CompletableFuture&lt;Invoice> bob = CompletableFuture.supplyAsync(
                () -> orderService.checkout("Bob", BigDecimal.TEN));

        String num1 = alice.join().getInvoiceNumber();
        String num2 = bob.join().getInvoiceNumber();

        assertEquals(Set.of("INV-00001", "INV-00002"), Set.of(num1, num2));
    }
}
</pre>



<p>The test creates two orders concurrently and checks that the resulting invoices get numbers <code>INV-00001</code> and <code>INV-00002</code>. Because of a bug in <code>InvoiceService</code>, it can either pass or fail randomly.</p>


                    <div class="alert ">
            <p><strong>Note:</strong> If you&#8217;re using IntelliJ IDEA, you can test whether a test is actually flaky by using the Run until failure option in the test runner. Leave the suspect spinning for some time and see if it eventually fails.<br />
</p>
        </div>
    






<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>If we knew nothing about the underlying bug, and only had the test, is there a tool that could help us find the root cause? Or can we make one ourselves? Furthermore, could we delegate both building and using the tool to AI?</p>



<h2 class="wp-block-heading"><strong>The intuition</strong></h2>



<p>Let&#8217;s come up with some intuition for this class of problem.</p>



<p>To produce two kinds of results, the execution must follow different code paths. The difference might be minimal, possibly just one extra method call or one <code>if</code> branch taken instead of another. But it has to be there; otherwise, the result would be consistent. So, if we could record the code path for a passing run and a failing run and then compare them, the diff should at least point us in the right direction. And ideally, by following the call tree, we could find the place where execution splits. This line must be exactly where the flakiness originates.</p>



<p>Does this reasoning make sense? Let&#8217;s put it to the test.</p>



<h2 class="wp-block-heading"><strong>Build the tools</strong></h2>



<p>What tool can we use for recording code paths? While not designed specifically for tracing, a test coverage tool can give us the information we&#8217;re after.</p>



<p>There are a couple of Java coverage tools to choose from, such as <a href="https://www.jacoco.org/jacoco/" target="_blank" rel="noopener">JaCoCo</a> and <a href="https://www.jetbrains.com/help/idea/code-coverage.html" target="_blank" rel="noopener">IntelliJ IDEA&#8217;s coverage tool</a>. We&#8217;ll go with IntelliJ IDEA&#8217;s, because it includes a hit counting feature that is very useful. We may need this extra granularity because the flakiness might stem not only from <em>what</em> is executed, but also <em>how many times</em>.</p>



<h3 class="wp-block-heading"><strong>Run coverage from the command line</strong></h3>



<p>IntelliJ IDEA&#8217;s coverage tool has a familiar UI, but we need a way to launch it programmatically. Fortunately, coverage can also be collected from the command line by attaching the coverage agent to the JVM via <a href="https://maven.apache.org/surefire/maven-surefire-plugin/" target="_blank" rel="noopener">Maven Surefire</a>:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">mvn surefire:test \
  -Dtest=com.example.webshop.service.InvoiceServiceTest \
  "-DargLine=-Didea.coverage.calculate.hits=true \
    -javaagent:\$AGENT_JAR=\$IC_FILE,true,false,false,true,com.example.webshop.*"
</pre>



<p>The <code>-Didea.coverage.calculate.hits=true</code> flag tells the agent to record invocation counts per line rather than just a boolean hit/not-hit mask. After the test finishes, the results are written to a binary <code>.ic</code> file.</p>



<p>So far so good, but we need the report in a human (and AI)-readable format.</p>



<h3 class="wp-block-heading"><strong>Add text output</strong></h3>



<p>Luckily, the <a href="https://github.com/JetBrains/intellij-coverage" target="_blank" rel="noopener">IntelliJ coverage agent</a> is open-source. Let&#8217;s clone the project and ask AI to add a text reporter that converts binary reports to plain text.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/image6-1.png" alt="" class="wp-image-704276"/></figure>



<p>The agent creates a new class called <code>TextCoverageStatistics</code>. After we build the project and run the reporter against our <code>.ic</code> file, we get something like this:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">=== Coverage Summary ===

  Instructions: 236/618  38,2%
  Branches    : 0/20   0,0%
  Lines       : 56/150  37,3%
  ...

=== Per-Class Coverage ===

Class                                                           Lines    Line%  Methods    Meth%
--------------------------------------------------------------------------------------------
...
com.example.webshop.service.InvoiceNumberGenerator              4/4    100,0%    2/2    100,0%
com.example.webshop.service.InvoiceService                     10/10   100,0%    3/3    100,0%
com.example.webshop.service.OrderService                        6/6    100,0%    2/2    100,0%
...
</pre>



<p>The first part of the report gives a high-level overview: How many lines, branches, and methods were covered across the entire project. Below that, there&#8217;s a per-class breakdown showing the same metrics for each class individually.</p>



<p>Then it is followed by per-line hit counts for each class:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">--- com.example.webshop.service.InvoiceService ---
  Line       Hits  Branch
  19            2
  20            1
  22            2
  23            2
  24            2
  ...</pre>



<p>For every line that the coverage agent instrumented, we see how many times it was executed and whether any branches were taken. The actual report is longer, but you get the idea. Now we have a text representation of which lines were executed, and exactly how many times.</p>



<p>This is the raw material we need for the diff. So far, so good!</p>



<h3 class="wp-block-heading"><strong>Diff the reports</strong></h3>



<p>Supposedly, the obtained reports contain the necessary information, and a very determined developer could peruse them and find the bug. But we&#8217;re not here for mundane tasks like that, right?</p>



<p>Let&#8217;s upgrade the tool so that it gets multiple report variations and presents the diff. The most controllable way would be to do one &#8220;brick&#8221; at a time, but I think we&#8217;re safe to delegate the entire thing to AI here, including the automation:</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/image1-2.png" alt="" class="wp-image-704287"/></figure>



<p>The resulting script runs the test in a loop until <em>both</em> of the following happen:</p>



<ul class="wp-block-list">
<li>We get at least one passing and one failing run.</li>



<li>The specified number of runs have passed.</li>
</ul>



<p>Both conditions are important because test failures can be very rare, and the specified number of runs might not be enough. At the same time, there can be finer grained variations within pass and fail runs, so we might want to catch those too.</p>



<p>After the reports are collected, the script summarizes the lines that have variations between the runs. Here&#8217;s what it looks like:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Collected 20 runs: 12 pass, 8 fail

Lines that vary across runs:

  Invoice:29                           Hits(1,2)
  Invoice:31                           Hits(1,2)
  Invoice:32                           Hits(1,2)
  InvoiceNumberGenerator:15            Hits(1,2)
  InvoiceService:19                    Hits(1,2)  Branch(1/2)
  InvoiceService:20                    Hits(1,2)
  InvoiceService:22                    Hits(1,2)
  InvoiceService:24                    Hits(1,2)</pre>



<p>All variations have the same pattern: the difference is not which lines were executed, but <em>how many times</em>. As we expected, the hit counting feature of IntelliJ IDEA&#8217;s coverage agent proved useful!</p>



<p>The varying lines point at a lazy initialization block in <code>InvoiceService</code> and its downstream effects in <code>InvoiceNumberGenerator</code> and <code>Invoice</code>. The variation in hit counts means that the initialization sometimes runs more than once, which shouldn&#8217;t happen. That&#8217;s exactly where the flakiness comes from.</p>



<p>If you missed the article that describes the problem, here&#8217;s why double initialization causes this bug. The <code>createGenerator()</code> method queries the database for the last used invoice number and creates a counter starting from that value. When two threads both enter the <code>if (generator == null)</code> block before either finishes, each reads the same number from the database and creates its own generator starting from the same value. The result is duplicate invoice numbers.</p>



<p>The coverage diff has pointed us at the very same <a href="https://flounder.dev/posts/your-programs-are-not-single-threaded/" target="_blank" rel="noopener">TOCTOU race</a> discussed in more detail in the previous article. But, what is novel in our current approach is that it doesn’t solely rely on human expertise and is easily accessible for AI.</p>



<h2 class="wp-block-heading"><strong>Turning it into a Skill</strong></h2>



<p>Now, I&#8217;d say that AI-assisted modifications to open-source tools that help you solve the task at hand, all within minutes, are amazing on their own. But let&#8217;s keep our eyes on the bigger picture.</p>



<p>Here&#8217;s what we&#8217;ve done so far: We started with an intuition: Flaky tests take different code paths, and coverage analysis can reveal where they diverge. Then we turned that intuition into a concrete, repeatable procedure. Does this warrant a knowledge base article, or an AI Agent Skill, perhaps? Yes!</p>



<p>In the same agent session, let&#8217;s ask the agent to:</p>



<ol class="wp-block-list">
<li>Make sure all the scripts are self-contained and runnable.</li>



<li>Document the entire procedure in a <code>SKILL.md</code> file, step by step, so that another agent can follow it without any prior context.</li>
</ol>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/image5-1.png" alt="" class="wp-image-704298"/></figure>



<p>The agent packages everything and writes a guide that describes when to apply the Skill, what tools are needed, and what steps to follow.



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/image-38.png" alt="" class="wp-image-704198"/></figure>



The only follow-up during review was to align the Skill with the <a href="https://agentskills.io/specification" target="_blank" rel="noopener">specification</a>. The original Skill written by the agent lacks meta in frontmatter. Agents are good at sorting out Skills that omit minor details, but meta is important for discoverability. Without it, a Skill might not be picked up by an agent in the first place.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/04/image-39.png" alt="" class="wp-image-704235"/></figure>



<h2 class="wp-block-heading"><strong>Testing the Skill</strong></h2>



<p>To verify that the Skill actually works, let&#8217;s start a fresh agent session. No warm-up, no hints. Instead, let&#8217;s deliberately phrase it in a very general way, something like &#8220;find and fix the cause of flakiness in <code>InvoiceServiceTest</code>&#8220;.</p>



<figure class="wp-block-image size-full"><img style="width:100% !important; height:auto !important; max-width:100% !important;" loading="lazy" decoding="async" src="https://blog.jetbrains.com/wp-content/uploads/2026/05/skill-used.png" alt="An agent uses the skill" class="wp-image-704309"/></figure>



<p>The agent matches the Skill description from <code>SKILL.md</code> with the problem description, discovers the instructions, and executes them: It runs the coverage script, reads the diff, and identifies the race condition. Instead of guesswork, it follows the established steps and arrives at the same conclusion every time. That’s about as deterministic as generative AI can get!</p>



<h2 class="wp-block-heading"><strong>Summary</strong></h2>



<p>The changes that we’ve made to the coverage agent are already published with the new version <a href="https://mvnrepository.com/artifact/org.jetbrains.intellij.deps/intellij-coverage-agent/1.0.774" target="_blank" rel="noopener">1.0.774</a>. And the Skill is available <a href="https://github.com/flounder4130/webshop-demo/blob/main/.claude/skills/analyze-flaky-coverage/SKILL.md" target="_blank" rel="noopener">here</a>. </p>



<p>In this article, we started with an intuition about flaky tests, built custom tooling around an open-source coverage agent, used it to find a race condition, and packaged the entire procedure into a reusable AI Skill. You can use this Skill for finding flaky tests in your own projects, but I hope this post conveys the bigger idea.</p>



<p>AI Skills allow you to teach agents to solve virtually anything, as long as you can stack text interfaces together. Many hard programming problems can be broken down into simpler ones and solved using familiar tools. And with AI orchestrating all this, we can even make the process enjoyable. As was the case long before AI, curiosity is the only real prerequisite. </p>



<p>Have you been inspired to solve a tough problem in your own work? Would you like to share the Skills you wrote or find most useful? Let us know in the comments!</p>



<p>Happy debugging!</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>IntelliJ IDEA 2026.1.1 Is Out!</title>
		<link>https://blog.jetbrains.com/idea/2026/04/intellij-idea-2026-1-1/</link>
		
		<dc:creator><![CDATA[Maria Kosukhina]]></dc:creator>
		<pubDate>Thu, 23 Apr 2026 13:04:22 +0000</pubDate>
		<featuredImage>https://blog.jetbrains.com/wp-content/uploads/2026/04/IntelliJ-IDEA-2026.1.1.png</featuredImage>		<category><![CDATA[releases]]></category>
		<guid isPermaLink="false">https://blog.jetbrains.com/?post_type=idea&#038;p=702902</guid>

					<description><![CDATA[IntelliJ IDEA 2026.1.1 has arrived with several valuable fixes. You can update to this version from inside the IDE, using the&#160;Toolbox App, or using snaps if you are a Ubuntu user. You can also download it from our&#160;website. Here are the most notable updates included in this version: To find out more details about the [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>IntelliJ IDEA 2026.1.1 has arrived with several valuable fixes.</p>



<p>You can update to this version from inside the IDE, using the&nbsp;<a href="https://www.jetbrains.com/toolbox-app/" target="_blank" rel="noreferrer noopener">Toolbox App</a>, or using snaps if you are a Ubuntu user. You can also download it from our&nbsp;<a href="https://www.jetbrains.com/idea/download/" target="_blank" rel="noreferrer noopener">website</a>.</p>



<p>Here are the most notable updates included in this version:</p>



<ul class="wp-block-list">
<li>It’s once again possible to set up a WSL Python SDK. [<a href="https://youtrack.jetbrains.com/issue/IJPL-240728/Unable-to-add-WSL-Python-SDK" target="_blank" rel="noopener">IJPL-240728</a>]</li>



<li>Emmet in remote development now works as expected. [<a href="https://youtrack.jetbrains.com/issue/IJPL-168255" target="_blank" rel="noopener">IJPL-168255</a>]&nbsp;</li>



<li>Gradle sync no longer fails due to a class cast error involving <code>InternalIdeaModule</code> and <code>org.gradle.tooling.model.ProjectModel</code>. [<a href="https://youtrack.jetbrains.com/issue/IDEA-386409/Gradle-sync-fails-with-InternalIdeaModule-cannot-be-cast-to-class-org.gradle.tooling.model.ProjectModel" target="_blank" rel="noopener">IDEA-386409</a>]</li>



<li>The IDE now correctly connects to the WildFly admin process after server startup, restoring deployment and the <em>Open browser after launch</em> option. [<a href="https://youtrack.jetbrains.com/issue/IDEA-387483" target="_blank" rel="noopener">IDEA-387483</a>]&nbsp;</li>



<li>The IDE no longer fails to locate the WSL 2 JDK. [<a href="https://youtrack.jetbrains.com/issue/IJPL-222935" target="_blank" rel="noopener">IJPL-222935</a>]&nbsp;</li>



<li>Double-clicking an Ant target in the <em>Ant</em> tool window now runs the target and shows the build output in the <em>Messages </em>tool window. [<a href="https://youtrack.jetbrains.com/issue/IDEA-387507" target="_blank" rel="noopener">IDEA-387507</a>]&nbsp;</li>



<li>Search for context actions and code completion in large Spring projects are now more responsive and faster. [<a href="https://youtrack.jetbrains.com/issue/IDEA-378966" target="_blank" rel="noopener">IDEA-378966</a>]&nbsp;&nbsp;</li>



<li>The IDE now correctly supports creating a run configuration for a local WebLogic server.<a href="https://youtrack.jetbrains.com/issue/IDEA-387617" target="_blank" rel="noopener"> [IDEA-387617</a>]</li>



<li>The <em>Find and Replace</em> action now works as expected when pressing <em>Enter</em>. [<a href="https://youtrack.jetbrains.com/issue/IJPL-240373" target="_blank" rel="noopener">IJPL-240373</a>]</li>
</ul>



<p></p>



<p>To find out more details about the issues resolved, please refer to the <a href="https://youtrack.jetbrains.com/articles/IDEA-A-2100662664" data-type="link" data-id="https://youtrack.jetbrains.com/articles/IDEA-A-2100662664" target="_blank" rel="noopener">release notes</a>.</p>



<p>If you encounter any bugs, please report them to our&nbsp;<a href="https://youtrack.jetbrains.com/issues/IDEA" target="_blank" rel="noreferrer noopener">issue tracker</a>.</p>



<p>Happy developing!</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
