From 864731229f06c6eb0d58e3208fa8eb06ae2f46de Mon Sep 17 00:00:00 2001 From: Madalin Valceleanu Date: Fri, 14 Nov 2025 11:34:26 +0000 Subject: [PATCH] [IDEA-382120] Fix included GradleBuild conversion to DefaultGradleLightBuild With IntelliJ 2025.3 more in particular ce7ec3afd6a17c6016bf commit, some refactor has done for composite builds as part of IDEA-370426 to add GradleLightProject.getIdentityPath. However, the GradleBuild class which doesn't implement hashCode() is defined as key map for gradleBuildsToConverted in DefaultGradleLightBuild. This fact is causing NullPointerException with Gradle 6.X since a different instance is created for same build path, failing to map included GradleBuild into DefaultGradleLightBuild closes https://github.com/JetBrains/intellij-community/pull/3304 GitOrigin-RevId: 40836130e29c29b8f493d084fe5f1ba631b0cff9 --- .../plugins/gradle/model/DefaultGradleLightBuild.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultGradleLightBuild.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultGradleLightBuild.java index 85b53871f3c7..4c4217537980 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultGradleLightBuild.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultGradleLightBuild.java @@ -10,6 +10,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.io.Serializable; import java.nio.file.Path; import java.util.*; @@ -123,11 +124,11 @@ public final class DefaultGradleLightBuild implements GradleLightBuild, Serializ @NotNull Collection gradleBuilds, @NotNull GradleVersion gradleVersion ) { - Map gradleBuildsToConverted = new LinkedHashMap<>(); + Map gradleBuildsToConverted = new LinkedHashMap<>(); // TODO traverse builds via graph to avoid separated parent build field initialization for (GradleBuild gradleBuild : gradleBuilds) { DefaultGradleLightBuild build = new DefaultGradleLightBuild(gradleBuild, gradleVersion); - gradleBuildsToConverted.put(gradleBuild, build); + gradleBuildsToConverted.put(gradleBuild.getBuildIdentifier().getRootDir(), build); } setIncludedBuildsHierarchy(gradleBuilds, gradleBuildsToConverted); setBuildSrcHierarchy(gradleBuildsToConverted.values()); @@ -137,14 +138,14 @@ public final class DefaultGradleLightBuild implements GradleLightBuild, Serializ /// Sets parent builds for included builds, relying on the data provided by Gradle. private static void setIncludedBuildsHierarchy( @NotNull Collection gradleBuilds, - Map gradleBuildsToConverted + Map gradleBuildsToConverted ) { for (GradleBuild gradleBuild : gradleBuilds) { - DefaultGradleLightBuild build = gradleBuildsToConverted.get(gradleBuild); + DefaultGradleLightBuild build = gradleBuildsToConverted.get(gradleBuild.getBuildIdentifier().getRootDir()); assert build != null; for (GradleBuild includedGradleBuild : gradleBuild.getIncludedBuilds()) { - DefaultGradleLightBuild buildToUpdate = gradleBuildsToConverted.get(includedGradleBuild); + DefaultGradleLightBuild buildToUpdate = gradleBuildsToConverted.get(includedGradleBuild.getBuildIdentifier().getRootDir()); assert buildToUpdate != null; buildToUpdate.setParentBuild(build); }