From 263e2926c1405f35f85a5b6ed8fbd1cf6e200441 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 30 May 2016 16:31:06 +0300 Subject: [PATCH] IDEA-156528 [GRADLE] "testCompile" dependency does not include all dependencies in "compile" configuration --- .../BaseGradleProjectResolverExtension.java | 1 + .../GradleDependenciesImportingTest.java | 44 ++++++++++++++++++- .../gradle/model/ExternalSourceSet.java | 3 ++ .../model/DefaultExternalSourceSet.java | 12 +++++ .../builder/ExternalProjectBuilderImpl.groovy | 6 +++ .../util/DependencyResolverImpl.groovy | 14 +++++- 6 files changed, 77 insertions(+), 3 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java index d91ff478255c..36bc5eae206a 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BaseGradleProjectResolverExtension.java @@ -215,6 +215,7 @@ public class BaseGradleProjectResolverExtension implements GradleProjectResolver } } } + artifacts.addAll(sourceSet.getArtifacts()); sourceSetData.setArtifacts(ContainerUtil.newArrayList(artifacts)); DataNode sourceSetDataNode = mainModuleNode.createChild(GradleSourceSetData.KEY, sourceSetData); diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleDependenciesImportingTest.java b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleDependenciesImportingTest.java index 53e81ba7b98a..a106022ef87f 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleDependenciesImportingTest.java +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleDependenciesImportingTest.java @@ -532,7 +532,49 @@ public class GradleDependenciesImportingTest extends GradleImportingTestCase { assertModules("project", "project1", "project1_main", "project1_test", "project2", "project2_main", "project2_test"); assertModuleModuleDeps("project2_main"); - assertModuleModuleDeps("project2_test", "project1_test", "project2_main"); + assertModuleModuleDeps("project2_test", "project2_main", "project1_test"); + + importProjectUsingSingeModulePerGradleProject(); + assertModules("project", "project1", "project2"); + assertModuleModuleDeps("project2", "project1"); + } + + @Test + @TargetVersions("2.0+") + public void testTestModuleDependencyAsArtifactFromTestSourceSetOutput2() throws Exception { + createSettingsFile("include 'project1'\n" + + "include 'project2'\n"); + + importProject( + "project(':project1') {\n" + + " apply plugin: 'java'\n" + + " configurations {\n" + + " testArtifacts\n" + + " }\n" + + "\n" + + " task testJar(type: Jar) {\n" + + " classifier = 'tests'\n" + + " from sourceSets.test.output\n" + + " }\n" + + "\n" + + " artifacts {\n" + + " testArtifacts testJar\n" + + " }\n" + + "}\n" + + "\n" + + "project(':project2') {\n" + + " apply plugin: 'java'\n" + + " dependencies {\n" + + " compile project(path: ':project1')\n" + + " testCompile project(path: ':project1', configuration: 'testArtifacts')\n" + + " }\n" + + "}\n" + ); + + assertModules("project", "project1", "project1_main", "project1_test", "project2", "project2_main", "project2_test"); + + assertModuleModuleDeps("project2_main", "project1_main"); + assertModuleModuleDeps("project2_test", "project2_main", "project1_main", "project1_test"); importProjectUsingSingeModulePerGradleProject(); assertModules("project", "project1", "project2"); diff --git a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ExternalSourceSet.java b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ExternalSourceSet.java index 9d13b61de116..3b01366d4358 100644 --- a/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ExternalSourceSet.java +++ b/plugins/gradle/tooling-extension-api/src/org/jetbrains/plugins/gradle/model/ExternalSourceSet.java @@ -19,6 +19,7 @@ import com.intellij.openapi.externalSystem.model.project.IExternalSystemSourceTy import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.io.Serializable; import java.util.Collection; import java.util.Map; @@ -28,6 +29,8 @@ import java.util.Map; * @since 7/14/2014 */ public interface ExternalSourceSet extends Serializable { + Collection getArtifacts(); + @NotNull String getName(); diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultExternalSourceSet.java b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultExternalSourceSet.java index 8cc09ad64301..b5af180be1e5 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultExternalSourceSet.java +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/model/DefaultExternalSourceSet.java @@ -20,6 +20,7 @@ import com.intellij.openapi.externalSystem.model.project.IExternalSystemSourceTy import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.*; /** @@ -32,6 +33,7 @@ public class DefaultExternalSourceSet implements ExternalSourceSet { private String myName; private Map mySources; private Collection myDependencies; + private Collection myArtifacts; private String mySourceCompatibility; private String myTargetCompatibility; @@ -52,6 +54,7 @@ public class DefaultExternalSourceSet implements ExternalSourceSet { for (ExternalDependency dependency : sourceSet.getDependencies()) { myDependencies.add(ModelFactory.createCopy(dependency)); } + myArtifacts = sourceSet.getArtifacts() == null ? new ArrayList() : new ArrayList(sourceSet.getArtifacts()); } @NotNull @@ -60,6 +63,15 @@ public class DefaultExternalSourceSet implements ExternalSourceSet { return myName; } + @Override + public Collection getArtifacts() { + return myArtifacts; + } + + public void setArtifacts(Collection artifacts) { + myArtifacts = artifacts; + } + @Nullable @Override public String getSourceCompatibility() { diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/builder/ExternalProjectBuilderImpl.groovy b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/builder/ExternalProjectBuilderImpl.groovy index 698ee075bbc0..3e24fbe5e640 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/builder/ExternalProjectBuilderImpl.groovy +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/builder/ExternalProjectBuilderImpl.groovy @@ -26,6 +26,7 @@ import org.gradle.api.file.ContentFilterable import org.gradle.api.file.FileCopyDetails import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.bundling.Jar import org.gradle.api.tasks.compile.JavaCompile import org.gradle.api.tasks.util.PatternFilterable @@ -226,6 +227,11 @@ class ExternalProjectBuilderImpl implements ModelBuilderService { externalSourceSet.targetCompatibility = projectTargetCompatibility } + def jarTask = project.tasks.findByName(sourceSet.jarTaskName) + if(jarTask instanceof AbstractArchiveTask) { + externalSourceSet.artifacts = [jarTask.archivePath] + } + def sources = [:] as Map ExternalSourceDirectorySet resourcesDirectorySet = new DefaultExternalSourceDirectorySet() resourcesDirectorySet.name = sourceSet.resources.name diff --git a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/DependencyResolverImpl.groovy b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/DependencyResolverImpl.groovy index 1c720729cf3b..70089c6c0437 100644 --- a/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/DependencyResolverImpl.groovy +++ b/plugins/gradle/tooling-extension-impl/src/org/jetbrains/plugins/gradle/tooling/util/DependencyResolverImpl.groovy @@ -790,8 +790,13 @@ class DependencyResolverImpl implements DependencyResolver { projectPath: componentSelector.projectPath, configurationName: it.projectConfiguration.name ) - dependency.projectDependencyArtifacts = artifactMap.get(componentResult.moduleVersion).collect { it.file } + dependency.projectDependencyArtifacts = it.projectConfiguration.allArtifacts.files.files dependency.projectDependencyArtifacts.each { resolvedDepsFiles.add(it) } + if(it.projectConfiguration.artifacts.size() == 1) { + def publishArtifact = it.projectConfiguration.allArtifacts.first() + dependency.classifier = publishArtifact.classifier + dependency.packaging = publishArtifact.extension ?: 'jar' + } if (componentResult != dependencyResult.from) { dependency.dependencies.addAll( @@ -810,8 +815,13 @@ class DependencyResolverImpl implements DependencyResolver { projectPath: componentSelector.projectPath, configurationName: it.projectConfiguration.name ) - dependency.projectDependencyArtifacts = artifactMap.get(componentResult.moduleVersion).collect { it.file } + dependency.projectDependencyArtifacts = it.projectConfiguration.allArtifacts.files.files dependency.projectDependencyArtifacts.each { resolvedDepsFiles.add(it) } + if(it.projectConfiguration.artifacts.size() == 1) { + def publishArtifact = it.projectConfiguration.allArtifacts.first() + dependency.classifier = publishArtifact.classifier + dependency.packaging = publishArtifact.extension ?: 'jar' + } if (componentResult != dependencyResult.from) { dependency.dependencies.addAll(