From ca6599cd06260d83d417e1f688ac35bf845a5a26 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:41:05 +0000 Subject: [PATCH 1/2] Initial plan From 419b586a1eba7be45167d6be09cdf1f517f3fb5d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 29 Sep 2025 01:51:44 +0000 Subject: [PATCH 2/2] Fix Isolated Projects support by removing cross-project access - Replace allprojects with gradle.lifecycle.beforeProject in init script - Remove cross-project access in GradleProjectModelBuilder - Each project model will be built in isolation by Tooling API Co-authored-by: chagong <831821+chagong@users.noreply.github.com> --- .../gradle/GradleProjectModelBuilder.java | 14 ++------------ .../github/badsyntax/gradle/utils/PluginUtils.java | 4 ++-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/gradle-plugin/src/main/java/com/microsoft/gradle/GradleProjectModelBuilder.java b/gradle-plugin/src/main/java/com/microsoft/gradle/GradleProjectModelBuilder.java index 6b8bcd4e0..065dbc904 100644 --- a/gradle-plugin/src/main/java/com/microsoft/gradle/GradleProjectModelBuilder.java +++ b/gradle-plugin/src/main/java/com/microsoft/gradle/GradleProjectModelBuilder.java @@ -103,19 +103,9 @@ private GradleProjectModel buildModel(Project project, String rootProjectName, D GradleDependencyNode node = generateDefaultGradleDependencyNode(project); List plugins = getPlugins(project); List closures = getPluginClosures(project); + // For isolated projects, sub-models will be built separately via individual buildAll calls + // Each project model is built in isolation, avoiding cross-project access List subModels = new ArrayList<>(); - for (DefaultGradleProject subDefaultGradleProject : gradleProject.getChildren()) { - // Query sub projects when both gradleProject and project contain them - Map childProjects = project.getChildProjects(); - String projectName = subDefaultGradleProject.getName(); - if (childProjects.keySet().contains(projectName)) { - GradleProjectModel subModel = buildModel(childProjects.get(projectName), rootProjectName, - subDefaultGradleProject); - if (subModel != null) { - subModels.add(subModel); - } - } - } List tasks = getGradleTasks(project, rootProjectName, gradleProject); return new DefaultGradleProjectModel(project.getParent() == null, project.getProjectDir().getAbsolutePath(), subModels, tasks, node, plugins, closures, scriptClasspaths); diff --git a/gradle-server/src/main/java/com/github/badsyntax/gradle/utils/PluginUtils.java b/gradle-server/src/main/java/com/github/badsyntax/gradle/utils/PluginUtils.java index 9b74c6aa4..0f43b2a04 100644 --- a/gradle-server/src/main/java/com/github/badsyntax/gradle/utils/PluginUtils.java +++ b/gradle-server/src/main/java/com/github/badsyntax/gradle/utils/PluginUtils.java @@ -31,8 +31,8 @@ public static File getInitScript() { // handle init script String pluginJarUnixPath = pluginJarFile.getAbsolutePath().replace("\\", "/"); String initScriptContent = "initscript {\n" + " dependencies {\n" + " classpath files('" - + pluginJarUnixPath + "')\n" + " }\n" + "}\n" + "\n" + "allprojects {\n" - + " apply plugin: com.microsoft.gradle.GradlePlugin\n" + "}\n"; + + pluginJarUnixPath + "')\n" + " }\n" + "}\n" + "\n" + "gradle.lifecycle.beforeProject { project ->\n" + + " project.apply plugin: com.microsoft.gradle.GradlePlugin\n" + "}\n"; byte[] initScriptBytes = initScriptContent.getBytes(); byte[] initScriptDigest = getContentDigest(initScriptBytes); String initScriptName = bytesToHex(initScriptDigest) + ".gradle";