diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index e18c60fbd74d..fedf482354db 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -576,6 +576,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver { + 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 sourceFound = Ref.create(false); + Ref 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 sourceFound, Ref docFound) throws IOException { diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java index 10d98138edb3..5d82f2a63990 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleImportingTestCase.java @@ -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; + } }