From 5f32975e5f8059c68bf0a9ff473df4fd7a8c6b54 Mon Sep 17 00:00:00 2001 From: Ruben Romero Montes Date: Mon, 20 Apr 2026 20:38:20 +0200 Subject: [PATCH 1/3] fix(gradle): replace internal IElementType.getDebugName() with direct type equality Use direct == comparison on IElementType singleton instances instead of comparing debug name strings via the internal getDebugName() API. Implements TC-4167 Assisted-by: Claude Code --- .../gradle/GradleCAUpdateManifestIntentionAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java b/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java index b277c90e..c097d04f 100644 --- a/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java +++ b/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java @@ -46,7 +46,7 @@ protected void updateManifest(Project project, Editor editor, PsiFile file, Depe private static @NotNull PsiElement getRepositoriesFromBuildGradle(PsiFile file) { PsiElement repositories = Arrays.stream(file.getChildren()).filter(psi -> psi instanceof LeafPsiElement) - .filter(psi -> ((LeafPsiElement) psi).getElementType().getDebugName().equals(BuildGradleTypes.REPOSITORIES.getDebugName())).findFirst().get(); + .filter(psi -> ((LeafPsiElement) psi).getElementType() == BuildGradleTypes.REPOSITORIES).findFirst().get(); return repositories; } From f8e00ca1b5e82abb2c1aae631e79006c156b900d Mon Sep 17 00:00:00 2001 From: Ruben Romero Montes Date: Mon, 20 Apr 2026 21:37:20 +0200 Subject: [PATCH 2/3] ci: fail verifyPlugin on internal API usages Configure pluginVerification to treat INTERNAL_API_USAGES as a build failure, preventing future internal API regressions from passing CI. Implements TC-4167 Assisted-by: Claude Code --- build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build.gradle.kts b/build.gradle.kts index ce264462..1cb1edc7 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,7 @@ import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType import org.jetbrains.intellij.platform.gradle.TestFrameworkType import org.jetbrains.intellij.platform.gradle.models.ProductRelease +import org.jetbrains.intellij.platform.gradle.tasks.VerifyPluginTask plugins { id("java") // Java support @@ -99,6 +100,10 @@ val runIdeForUiTests by intellijPlatformTesting.runIde.registering { intellijPlatform { pluginVerification { + failureLevel = listOf( + VerifyPluginTask.FailureLevel.COMPATIBILITY_PROBLEMS, + VerifyPluginTask.FailureLevel.INTERNAL_API_USAGES + ) ides { select { types = listOf(IntelliJPlatformType.IntellijIdeaCommunity) From 0b577db7d1fa0259b5d5816362b8f7f76a28ca3d Mon Sep 17 00:00:00 2001 From: Ruben Romero Montes Date: Mon, 20 Apr 2026 22:23:02 +0200 Subject: [PATCH 3/3] fix(gradle): guard against missing repositories block in build.gradle Return null instead of throwing NoSuchElementException when the repositories block is not found, preventing IDE crashes when querying intentions for build.gradle files without a repositories block. Implements TC-4167 Assisted-by: Claude Code --- .../GradleCAUpdateManifestIntentionAction.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java b/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java index c097d04f..51077cf7 100644 --- a/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java +++ b/src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java @@ -12,6 +12,7 @@ import org.jboss.tools.intellij.componentanalysis.gradle.build.psi.BuildGradleFile; import org.jboss.tools.intellij.componentanalysis.gradle.build.psi.BuildGradleTypes; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.Arrays; @@ -28,6 +29,9 @@ public GradleCAUpdateManifestIntentionAction(PsiElement element, DependencyRepor @Override protected void updateManifest(Project project, Editor editor, PsiFile file, DependencyReport dependency) { PsiElement repositories = getRepositoriesFromBuildGradle(file); + if (repositories == null) { + return; + } String repositoriesBlock = repositories.getText(); int lastRightCurlyBracket = repositoriesBlock.lastIndexOf("}"); repositoriesBlock = repositoriesBlock.substring(0,lastRightCurlyBracket); @@ -44,10 +48,9 @@ protected void updateManifest(Project project, Editor editor, PsiFile file, Depe } - private static @NotNull PsiElement getRepositoriesFromBuildGradle(PsiFile file) { - PsiElement repositories = Arrays.stream(file.getChildren()).filter(psi -> psi instanceof LeafPsiElement) - .filter(psi -> ((LeafPsiElement) psi).getElementType() == BuildGradleTypes.REPOSITORIES).findFirst().get(); - return repositories; + private static @Nullable PsiElement getRepositoriesFromBuildGradle(PsiFile file) { + return Arrays.stream(file.getChildren()).filter(psi -> psi instanceof LeafPsiElement) + .filter(psi -> ((LeafPsiElement) psi).getElementType() == BuildGradleTypes.REPOSITORIES).findFirst().orElse(null); } private static @NotNull String formatArtifactsRepository(String repositoryUrl) { @@ -56,9 +59,12 @@ protected void updateManifest(Project project, Editor editor, PsiFile file, Depe @Override public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) { + PsiElement repositoriesFromBuildGradle = getRepositoriesFromBuildGradle(file); + if (repositoriesFromBuildGradle == null) { + return false; + } final String mavenRhGa = "https://maven.repository.redhat.com/ga/"; String mavenGaRepo = formatArtifactsRepository(mavenRhGa); - PsiElement repositoriesFromBuildGradle = getRepositoriesFromBuildGradle(file); return !(repositoriesFromBuildGradle.getText().contains(mavenGaRepo) || repositoriesFromBuildGradle.getText().contains(mavenRhGa)); } }