Skip to content

Commit f740e17

Browse files
authored
fix(gradle): replace internal IElementType.getDebugName() with direct type equality (#254)
* 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 * 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 * 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
1 parent 1682b80 commit f740e17

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import org.jetbrains.intellij.platform.gradle.IntelliJPlatformType
22
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
33
import org.jetbrains.intellij.platform.gradle.models.ProductRelease
4+
import org.jetbrains.intellij.platform.gradle.tasks.VerifyPluginTask
45

56
plugins {
67
id("java") // Java support
@@ -99,6 +100,10 @@ val runIdeForUiTests by intellijPlatformTesting.runIde.registering {
99100

100101
intellijPlatform {
101102
pluginVerification {
103+
failureLevel = listOf(
104+
VerifyPluginTask.FailureLevel.COMPATIBILITY_PROBLEMS,
105+
VerifyPluginTask.FailureLevel.INTERNAL_API_USAGES
106+
)
102107
ides {
103108
select {
104109
types = listOf(IntelliJPlatformType.IntellijIdeaCommunity)

src/main/java/org/jboss/tools/intellij/componentanalysis/gradle/GradleCAUpdateManifestIntentionAction.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.jboss.tools.intellij.componentanalysis.gradle.build.psi.BuildGradleFile;
1313
import org.jboss.tools.intellij.componentanalysis.gradle.build.psi.BuildGradleTypes;
1414
import org.jetbrains.annotations.NotNull;
15+
import org.jetbrains.annotations.Nullable;
1516

1617
import java.util.Arrays;
1718

@@ -28,6 +29,9 @@ public GradleCAUpdateManifestIntentionAction(PsiElement element, DependencyRepor
2829
@Override
2930
protected void updateManifest(Project project, Editor editor, PsiFile file, DependencyReport dependency) {
3031
PsiElement repositories = getRepositoriesFromBuildGradle(file);
32+
if (repositories == null) {
33+
return;
34+
}
3135
String repositoriesBlock = repositories.getText();
3236
int lastRightCurlyBracket = repositoriesBlock.lastIndexOf("}");
3337
repositoriesBlock = repositoriesBlock.substring(0,lastRightCurlyBracket);
@@ -44,10 +48,9 @@ protected void updateManifest(Project project, Editor editor, PsiFile file, Depe
4448

4549
}
4650

47-
private static @NotNull PsiElement getRepositoriesFromBuildGradle(PsiFile file) {
48-
PsiElement repositories = Arrays.stream(file.getChildren()).filter(psi -> psi instanceof LeafPsiElement)
49-
.filter(psi -> ((LeafPsiElement) psi).getElementType().getDebugName().equals(BuildGradleTypes.REPOSITORIES.getDebugName())).findFirst().get();
50-
return repositories;
51+
private static @Nullable PsiElement getRepositoriesFromBuildGradle(PsiFile file) {
52+
return Arrays.stream(file.getChildren()).filter(psi -> psi instanceof LeafPsiElement)
53+
.filter(psi -> ((LeafPsiElement) psi).getElementType() == BuildGradleTypes.REPOSITORIES).findFirst().orElse(null);
5154
}
5255

5356
private static @NotNull String formatArtifactsRepository(String repositoryUrl) {
@@ -56,9 +59,12 @@ protected void updateManifest(Project project, Editor editor, PsiFile file, Depe
5659

5760
@Override
5861
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
62+
PsiElement repositoriesFromBuildGradle = getRepositoriesFromBuildGradle(file);
63+
if (repositoriesFromBuildGradle == null) {
64+
return false;
65+
}
5966
final String mavenRhGa = "https://maven.repository.redhat.com/ga/";
6067
String mavenGaRepo = formatArtifactsRepository(mavenRhGa);
61-
PsiElement repositoriesFromBuildGradle = getRepositoriesFromBuildGradle(file);
6268
return !(repositoriesFromBuildGradle.getText().contains(mavenGaRepo) || repositoriesFromBuildGradle.getText().contains(mavenRhGa));
6369
}
6470
}

0 commit comments

Comments
 (0)