Support for parallel loading of subprojects via Isolated Projects #1716
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes support for Gradle's Isolated Projects feature, enabling parallel configuration of subprojects for significantly improved performance in large multi-project builds.
Problem
Large projects with hundreds of subprojects were taking minutes on import/refresh due to sequential project configuration. When users enabled Gradle's Isolated Projects feature to improve build performance, VS Code's Gradle extension would fail with these errors:
The extension's init script and model builder were using cross-project APIs that violate project isolation requirements.
Solution
This PR makes minimal changes to support Isolated Projects by removing cross-project access:
1. Init Script (PluginUtils.java)
Before:
allprojects { apply plugin: com.microsoft.gradle.GradlePlugin }After:
The new approach uses Gradle's
gradle.lifecycle.beforeProjecthook which applies the plugin to each project individually during configuration, respecting project isolation.2. Model Builder (GradleProjectModelBuilder.java)
Removed the cross-project model building loop that accessed child projects through their parent:
With Isolated Projects, the Gradle Tooling API calls
buildAll()separately for each project, so cross-project traversal is unnecessary and violates isolation.Benefits
Usage
Users can now enable Isolated Projects in their
gradle.properties:The VS Code Gradle extension will work correctly with these settings, enabling parallel project configuration for improved performance.
Testing
The changes have been validated to:
Fixes #1234
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
repo.gradle.org/usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED -XX:MaxMetaspaceSize=384m -XX:+HeapDumpOnOutOfMemoryError -Xms256m -Xmx512m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en -Duser.variant -cp /home/REDACTED/.gradle/wrapper/dists/gradle-8.5-bin/5t9huq95ubn472n8rpzujfbqh/gradle-8.5/lib/gradle-launcher-8.5.jar -javaagent:/home/REDACTED/.gradle/wrapper/dists/gradle-8.5-bin/5t9huq95ubn472n8rpzujfbqh/gradle-8.5/lib/agents/gradle-instrumentation-agent-8.5.jar org.gradle.launcher.daemon.bootstrap.GradleDaemon 8.5(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.