diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java index 61cd7bfd2a7b..171ee5642327 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverUtil.java @@ -534,19 +534,6 @@ public class GradleProjectResolverUtil { DataNode depOwnerDataNode = null; if (mergedDependency instanceof ExternalProjectDependency) { - class ProjectDependencyInfo { - @NotNull final ModuleData myModuleData; - @Nullable final ExternalSourceSet mySourceSet; - final Collection dependencyArtifacts; - - ProjectDependencyInfo(@NotNull ModuleData moduleData, - @Nullable ExternalSourceSet sourceSet, - Collection dependencyArtifacts) { - this.myModuleData = moduleData; - this.mySourceSet = sourceSet; - this.dependencyArtifacts = dependencyArtifacts; - } - } final ExternalProjectDependency projectDependency = (ExternalProjectDependency)mergedDependency; @@ -583,6 +570,19 @@ public class GradleProjectResolverUtil { projectDependencyInfos.add(new ProjectDependencyInfo( entry.getKey().first.getData(), entry.getKey().second, entry.getValue())); } + + String moduleIdFromDependency = getModuleId(projectDependency); + Pair, ExternalSourceSet> projectPairFromMap = sourceSetMap.get(moduleIdFromDependency); + if (projectPairFromMap != null) { + if (doesNotContainDependencyOn(projectDependencyInfos, projectPairFromMap.first.getData())) { + final Collection artifacts = projectDependency.getProjectDependencyArtifacts(); + artifacts.removeAll(collectProcessedArtifacts(projectDependencyInfos)); + projectDependencyInfos.add(new ProjectDependencyInfo(projectPairFromMap.first.getData(), + projectPairFromMap.second, + artifacts)); + } + } + } if (projectDependencyInfos.isEmpty()) { @@ -710,6 +710,14 @@ public class GradleProjectResolverUtil { } } + private static Collection collectProcessedArtifacts(Collection infos) { + return infos.stream().flatMap((info) -> info.dependencyArtifacts.stream()).collect(Collectors.toSet()); + } + + private static boolean doesNotContainDependencyOn(Collection infos, GradleSourceSetData data) { + return infos.stream().noneMatch((info) -> info.myModuleData.equals(data)); + } + public static boolean linkProjectLibrary(@Nullable DataNode ideProject, @NotNull final LibraryData library) { if (ideProject == null) return false; @@ -767,4 +775,18 @@ public class GradleProjectResolverUtil { return name.equals(taskName) || name.equals(taskPath); }); } + + static class ProjectDependencyInfo { + @NotNull final ModuleData myModuleData; + @Nullable final ExternalSourceSet mySourceSet; + final Collection dependencyArtifacts; + + ProjectDependencyInfo(@NotNull ModuleData moduleData, + @Nullable ExternalSourceSet sourceSet, + Collection dependencyArtifacts) { + this.myModuleData = moduleData; + this.mySourceSet = sourceSet; + this.dependencyArtifacts = dependencyArtifacts; + } + } } \ No newline at end of file