[IDEA-382120] Fix included GradleBuild conversion to DefaultGradleLightBuild

With IntelliJ 2025.3 more in particular ce7ec3afd6 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
This commit is contained in:
Madalin Valceleanu
2025-11-26 18:13:53 +00:00
committed by intellij-monorepo-bot
parent 8864f33342
commit 864731229f
@@ -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<? extends GradleBuild> gradleBuilds,
@NotNull GradleVersion gradleVersion
) {
Map<GradleBuild, DefaultGradleLightBuild> gradleBuildsToConverted = new LinkedHashMap<>();
Map<File, DefaultGradleLightBuild> 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<? extends GradleBuild> gradleBuilds,
Map<GradleBuild, DefaultGradleLightBuild> gradleBuildsToConverted
Map<File, DefaultGradleLightBuild> 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);
}