void (@NotNull IdeaModule gradleModule, @NotNull DataNode<ModuleData> ideModule, @NotNull final DataNode<ProjectData> ideProject) { ExternalProject externalProject = getExternalProject(gradleModule, resolverCtx); if (resolverCtx.isResolveModulePerSourceSet()) { final Map<String, Pair<DataNode<GradleSourceSetData>, ExternalSourceSet>> sourceSetMap = ideProject.getUserData(GradleProjectResolver.RESOLVED_SOURCE_SETS); final ArtifactMappingService artifactsMap = resolverCtx.getArtifactsMap(); assert sourceSetMap != null; assert artifactsMap != null; assert externalProject != null; processSourceSets(resolverCtx, gradleModule, externalProject, ideModule, new SourceSetsProcessor() { @Override public void process(@NotNull DataNode<? extends ModuleData> dataNode, @NotNull ExternalSourceSet sourceSet) { buildDependencies(resolverCtx, sourceSetMap, artifactsMap, dataNode, sourceSet.getDependencies(), ideProject); } }); return; } final List<? extends IdeaDependency> dependencies = gradleModule.getDependencies().getAll(); if (dependencies == null) return; List<String> orphanModules = new ArrayList<>(); Map<String, ModuleData> modulesIndex = new HashMap<>(); for (DataNode<ModuleData> dataNode : ExternalSystemApiUtil.getChildren(ideProject, ProjectKeys.MODULE)) { modulesIndex.put(dataNode.getData().getExternalName(), dataNode.getData()); } for (int i = 0; i < dependencies.size(); i++) { IdeaDependency dependency = dependencies.get(i); if (dependency == null) { continue; } DependencyScope scope = parseScope(dependency.getScope()); if (dependency instanceof IdeaModuleDependency) { ModuleDependencyData d = buildDependency(resolverCtx, ideModule, (IdeaModuleDependency)dependency, modulesIndex); d.setExported(dependency.getExported()); if (scope != null) { d.setScope(scope); } d.setOrder(i); ideModule.createChild(ProjectKeys.MODULE_DEPENDENCY, d); ModuleData targetModule = d.getTarget(); if (targetModule.getId().isEmpty() && targetModule.getLinkedExternalProjectPath().isEmpty()) { orphanModules.add(targetModule.getExternalName()); } } else if (dependency instanceof IdeaSingleEntryLibraryDependency) { LibraryDependencyData d = buildDependency(gradleModule, ideModule, (IdeaSingleEntryLibraryDependency)dependency, ideProject); d.setExported(dependency.getExported()); if (scope != null) { d.setScope(scope); } d.setOrder(i); ideModule.createChild(ProjectKeys.LIBRARY_DEPENDENCY, d); } } if (!orphanModules.isEmpty()) { ExternalSystemTaskId taskId = resolverCtx.getExternalSystemTaskId(); Project project = taskId.findProject(); if (project != null) { String title = GradleBundle.message("gradle.project.resolver.orphan.modules.error.title"); String targetOption = GradleBundle.message("gradle.settings.text.module.per.source.set", ApplicationNamesInfo.getInstance().getFullProductName()); String message = GradleBundle.message("gradle.project.resolver.orphan.modules.error.description", orphanModules.size(), join(orphanModules, ", "), targetOption); NotificationData notification = new NotificationData(title, message, NotificationCategory.WARNING, NotificationSource.PROJECT_SYNC); ExternalSystemNotificationManager.getInstance(project).showNotification(taskId.getProjectSystemId(), notification); } } }