[gradle] [IDEA-314169] do not download dependency sources if registry flag set

GitOrigin-RevId: 85c53509498f4450f86c187f23872646dc5c2713
This commit is contained in:
Alexander.Glukhov
2023-06-27 10:08:07 +00:00
committed by intellij-monorepo-bot
parent 84a915c3f9
commit ea3ca486a8
3 changed files with 116 additions and 0 deletions
@@ -576,6 +576,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
private static void configureExecutionArgumentsAndVmOptions(@NotNull GradleExecutionSettings executionSettings,
@NotNull DefaultProjectResolverContext resolverCtx,
boolean isBuildSrcProject) {
if (!Registry.is("idea.disable.gradle.download.sources", true)) {
executionSettings.withArgument("-Didea.disable.gradle.download.sources=false");
}
executionSettings.withArgument("-Didea.sync.active=true");
if (resolverCtx.isResolveModulePerSourceSet()) {
executionSettings.withArgument("-Didea.resolveSourceSetDependencies=true");
@@ -1941,6 +1941,79 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
}, "project.main", "lib-1.jar", "lib-2.jar");
}
@Test
public void testSourcesExcludedFromGradleCacheOnDisabledFlag() throws Exception {
setRegistryPropertyForTest("idea.disable.gradle.download.sources", "false");
overrideGradleUserHome("project/cache");
var dependency = "junit:junit:4.12";
var dependencyName = "Gradle: junit:junit:4.12";
var dependencyJar = "junit-4.12.jar";
importProject(script(it -> {
it
.withJavaPlugin()
.withMavenCentral()
.addTestImplementationDependency(dependency);
}));
LibraryOrderEntry regularLibFromGradleCache = assertSingleLibraryOrderEntry("project.test", dependencyName);
assertNoSourcesAndDocsInGradleCache(dependencyJar, regularLibFromGradleCache);
}
@Test
public void testSourcesExcludedFromGradleCacheOnDisabledFlagWithIdeaPlugin() throws Exception {
setRegistryPropertyForTest("idea.disable.gradle.download.sources", "false");
overrideGradleUserHome("project/cache");
var dependency = "junit:junit:4.12";
var dependencyName = "Gradle: junit:junit:4.12";
var dependencyJar = "junit-4.12.jar";
importProject(script(it -> {
it
.withJavaPlugin()
.withIdeaPlugin()
.withMavenCentral()
.addTestImplementationDependency(dependency);
}));
LibraryOrderEntry regularLibFromGradleCache = assertSingleLibraryOrderEntry("project.test", dependencyName);
assertNoSourcesAndDocsInGradleCache(dependencyJar, regularLibFromGradleCache);
}
@Test
public void testSourcesExcludedFromGradleMultiModuleProjectCacheOnDisabledFlag() throws Exception {
setRegistryPropertyForTest("idea.disable.gradle.download.sources", "false");
overrideGradleUserHome("project/cache");
var dependency = "junit:junit:4.12";
var dependencyName = "Gradle: junit:junit:4.12";
var dependencyJar = "junit-4.12.jar";
createSettingsFile("include 'projectA', 'projectB' ");
importProject(
createBuildScriptBuilder()
.project(":projectA", it -> {
it
.withJavaPlugin()
.withIdeaPlugin()
.withMavenCentral()
.addTestImplementationDependency(dependency);
})
.project(":projectB", it -> {
it
.withJavaPlugin()
.withMavenCentral()
.addTestImplementationDependency(dependency);
})
.generate()
);
LibraryOrderEntry projectADependencyEntry = assertSingleLibraryOrderEntry("project.projectA.test", dependencyName);
assertNoSourcesAndDocsInGradleCache(dependencyJar, projectADependencyEntry);
LibraryOrderEntry projectBDependencyEntry = assertSingleLibraryOrderEntry("project.projectB.test", dependencyName);
assertNoSourcesAndDocsInGradleCache(dependencyJar, projectBDependencyEntry);
}
@Test
public void testSourcesJavadocAttachmentFromGradleCache() throws Exception {
var dependency = "junit:junit:4.12";
@@ -2218,6 +2291,24 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase {
});
}
private void assertNoSourcesAndDocsInGradleCache(String dependencyJar, LibraryOrderEntry regularLibFromGradleCache) {
assertThat(regularLibFromGradleCache.getRootFiles(OrderRootType.CLASSES))
.hasSize(1)
.allSatisfy(file -> assertEquals(dependencyJar, file.getName()));
String binaryPath = PathUtil.getLocalPath(regularLibFromGradleCache.getRootFiles(OrderRootType.CLASSES)[0]);
Ref<Boolean> sourceFound = Ref.create(false);
Ref<Boolean> docFound = Ref.create(false);
try {
checkIfSourcesOrJavadocsCanBeAttached(binaryPath, sourceFound, docFound);
}
catch (IOException e) {
throw new IllegalStateException("Unable to lookup dependency artifacts in " + binaryPath);
}
assertFalse(sourceFound.get());
assertFalse(docFound.get());
}
private static void checkIfSourcesOrJavadocsCanBeAttached(String binaryPath,
Ref<Boolean> sourceFound,
Ref<Boolean> docFound) throws IOException {
@@ -587,4 +587,26 @@ public abstract class GradleImportingTestCase extends JavaExternalSystemImportin
protected void enableGradleDebugWithSuspend() {
GradleSystemSettings.getInstance().setGradleVmOptions("-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005");
}
protected void overrideGradleUserHome(@NotNull String relativeUserHomePath) throws IOException {
String gradleUserHome = "%s/%s".formatted(myTestDir.getPath(), relativeUserHomePath);
String gradleCachedFolderName = "gradle-%s-bin".formatted(gradleVersion);
File cachedGradleDistribution = findGradleDistributionInCache(gradleCachedFolderName);
if (cachedGradleDistribution != null) {
File targetGradleDistribution = Path.of(gradleUserHome + "/wrapper/dists/" + gradleCachedFolderName)
.toFile();
FileUtil.copyDir(cachedGradleDistribution, targetGradleDistribution);
}
GradleSettings.getInstance(myProject).setServiceDirectoryPath(gradleUserHome);
}
@Nullable
private static File findGradleDistributionInCache(String gradleCachedFolderName) {
Path pathToGradleWrapper = StartParameter.DEFAULT_GRADLE_USER_HOME.toPath().resolve("wrapper/dists/" + gradleCachedFolderName);
File gradleWrapperFile = pathToGradleWrapper.toFile();
if (gradleWrapperFile.exists()) {
return gradleWrapperFile;
}
return null;
}
}