From 3f288223d4da6004f6738b6629763d7dd5350c23 Mon Sep 17 00:00:00 2001 From: William Price Date: Mon, 8 Sep 2025 21:33:32 -0500 Subject: [PATCH] Fix Gradle 9 ProjectDependency resolution to other project --- .../gradle/tooling/NbProjectInfoBuilder.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java index d47d7096a08d..f797c28ce570 100644 --- a/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java +++ b/extide/gradle/netbeans-gradle-tooling/src/main/java/org/netbeans/modules/gradle/tooling/NbProjectInfoBuilder.java @@ -49,6 +49,7 @@ import java.util.Optional; import java.util.Set; import java.util.function.Consumer; +import java.util.function.Function; import java.util.function.Supplier; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -1562,6 +1563,23 @@ private void detectDependencies(NbProjectInfoModel model) { boolean ignoreUnresolvable = (project.getPlugins().hasPlugin("java-platform") && Boolean.TRUE.equals(getProperty(project, "javaPlatform", "allowDependencies"))); + // https://github.com/apache/netbeans/issues/8764 + Function projDependencyToProject = + sinceGradleOrDefault( + "9.0", + () -> { + Method getPath = ProjectDependency.class.getMethod("getPath"); + return dep -> { + try { + String path = (String) getPath.invoke(dep); + return project.findProject(path); + } catch (ReflectiveOperationException e) { + throw new UnsupportedOperationException(e); + } + }; + }, + () -> ProjectDependency::getDependencyProject); // removed in Gradle 9 + visibleConfigurations.forEach(it -> { String propBase = "configuration_" + it.getName() + "_"; model.getInfo().put(propBase + "non_resolving", !resolvable(it)); @@ -1660,7 +1678,7 @@ private void detectDependencies(NbProjectInfoModel model) { String a; if (d instanceof ProjectDependency) { sb.append("*project:"); // NOI18N - Project other = ((ProjectDependency)d).getDependencyProject(); + Project other = projDependencyToProject.apply((ProjectDependency) d); g = other.getGroup().toString(); a = other.getName(); } else { @@ -1679,7 +1697,7 @@ private void detectDependencies(NbProjectInfoModel model) { long time_project_deps = System.currentTimeMillis(); model.registerPerf(depPrefix + "module", time_project_deps - time_inspect_conf); it.getDependencies().withType(ProjectDependency.class).forEach(it2 -> { - Project prj = it2.getDependencyProject(); + Project prj = projDependencyToProject.apply(it2); projects.put(prj.getPath(), prj.getProjectDir()); projectNames.add(prj.getPath()); });