void (DefaultProjectResolverContext ctx, DataNode<ProjectData> projectDataNode) { // since Gradle 8.0 buildSrc are available as composite build members DataNode<CompositeBuildData> compositeNode = find(projectDataNode, CompositeBuildData.KEY); if (compositeNode == null) return; GradleBuildSrcProjectsResolver.Index index = GradleBuildSrcProjectsResolver.prepareIndexes(projectDataNode); CompositeBuildData compositeBuildData = compositeNode.getData(); for (BuildParticipant participant : compositeBuildData.getCompositeParticipants()) { if (participant.getRootProjectName().endsWith("buildSrc")) { Set<String> buildSrcProjectPaths = participant.getProjects(); @NotNull Collection<DataNode<BuildScriptClasspathData>> buildClasspathNodes = index.buildClasspathNodesMap().get(Path.of(participant.getRootPath()).getParent()); @NotNull Map<String, DataNode<? extends ModuleData>> buildSrcModules = new HashMap<>(); AtomicReference<DataNode<? extends ModuleData>> buildSrcModuleNode = new AtomicReference<>(); findAll(projectDataNode, ProjectKeys.MODULE).stream() .filter(node -> buildSrcProjectPaths.contains(node.getData().getLinkedExternalProjectPath())) .forEach(node -> { buildSrcModules.put(node.getData().getId(), node); findAll(node, GradleSourceSetData.KEY).forEach( sourceSetNode -> buildSrcModules.put(sourceSetNode.getData().getId(), sourceSetNode)); if (participant.getRootPath().equals(node.getData().getLinkedExternalProjectPath())) { if (ctx.isResolveModulePerSourceSet()) { buildSrcModuleNode.set(findChild(node, GradleSourceSetData.KEY, sourceSetNode -> sourceSetNode.getData().getExternalName().endsWith(":main"))); } else { buildSrcModuleNode.set(node); } } }); GradleBuildSrcProjectsResolver.addBuildSrcToBuildScriptClasspathData(buildClasspathNodes, buildSrcModules, buildSrcModuleNode.get()); } } }