@NotNull @Override public ExternalProjectSettings clone() { GradleProjectSettings result = new GradleProjectSettings(); copyTo(result); result.myGradleHome = myGradleHome; result.myPreferLocalInstallationToWrapper = myPreferLocalInstallationToWrapper; return result; }
@Override public void importData( @NotNull final Collection<DataNode<BuildScriptClasspathData>> toImport, @NotNull final Project project, boolean synchronous) { if (toImport.isEmpty()) { return; } if (!project.isInitialized()) { return; } final GradleInstallationManager gradleInstallationManager = ServiceManager.getService(GradleInstallationManager.class); ExternalSystemManager<?, ?, ?, ?, ?> manager = ExternalSystemApiUtil.getManager(GradleConstants.SYSTEM_ID); assert manager != null; AbstractExternalSystemLocalSettings localSettings = manager.getLocalSettingsProvider().fun(project); //noinspection MismatchedQueryAndUpdateOfCollection Map<String /* externalProjectPath */, Set<String>> externalProjectGradleSdkLibs = new FactoryMap<String, Set<String>>() { @Nullable @Override protected Set<String> create(String externalProjectPath) { GradleProjectSettings settings = GradleSettings.getInstance(project).getLinkedProjectSettings(externalProjectPath); if (settings == null || settings.getDistributionType() == null) return null; final Set<String> gradleSdkLibraries = ContainerUtil.newLinkedHashSet(); File gradleHome = gradleInstallationManager.getGradleHome( settings.getDistributionType(), externalProjectPath, settings.getGradleHome()); if (gradleHome != null && gradleHome.isDirectory()) { final Collection<File> libraries = gradleInstallationManager.getClassRoots(project, externalProjectPath); if (libraries != null) { for (File library : libraries) { gradleSdkLibraries.add(FileUtil.toCanonicalPath(library.getPath())); } } } return gradleSdkLibraries; } }; for (final DataNode<BuildScriptClasspathData> node : toImport) { if (GradleConstants.SYSTEM_ID.equals(node.getData().getOwner())) { DataNode<ProjectData> projectDataNode = ExternalSystemApiUtil.findParent(node, ProjectKeys.PROJECT); assert projectDataNode != null; String linkedExternalProjectPath = projectDataNode.getData().getLinkedExternalProjectPath(); DataNode<ModuleData> moduleDataNode = ExternalSystemApiUtil.findParent(node, ProjectKeys.MODULE); if (moduleDataNode == null) continue; String externalModulePath = moduleDataNode.getData().getLinkedExternalProjectPath(); GradleProjectSettings settings = GradleSettings.getInstance(project).getLinkedProjectSettings(linkedExternalProjectPath); if (settings == null || settings.getDistributionType() == null) continue; final Set<String> buildClasspath = ContainerUtil.newLinkedHashSet(); BuildScriptClasspathData buildScriptClasspathData = node.getData(); for (BuildScriptClasspathData.ClasspathEntry classpathEntry : buildScriptClasspathData.getClasspathEntries()) { for (String path : classpathEntry.getSourcesFile()) { buildClasspath.add(FileUtil.toCanonicalPath(path)); } for (String path : classpathEntry.getClassesFile()) { buildClasspath.add(FileUtil.toCanonicalPath(path)); } } ExternalProjectBuildClasspathPojo projectBuildClasspathPojo = localSettings.getProjectBuildClasspath().get(linkedExternalProjectPath); if (projectBuildClasspathPojo == null) { projectBuildClasspathPojo = new ExternalProjectBuildClasspathPojo( moduleDataNode.getData().getExternalName(), ContainerUtil.<String>newArrayList(), ContainerUtil.<String, ExternalModuleBuildClasspathPojo>newHashMap()); localSettings .getProjectBuildClasspath() .put(linkedExternalProjectPath, projectBuildClasspathPojo); } List<String> projectBuildClasspath = ContainerUtil.newArrayList(externalProjectGradleSdkLibs.get(linkedExternalProjectPath)); // add main java root of buildSrc project projectBuildClasspath.add(linkedExternalProjectPath + "/buildSrc/src/main/java"); // add main groovy root of buildSrc project projectBuildClasspath.add(linkedExternalProjectPath + "/buildSrc/src/main/groovy"); projectBuildClasspathPojo.setProjectBuildClasspath(projectBuildClasspath); projectBuildClasspathPojo .getModulesBuildClasspath() .put( externalModulePath, new ExternalModuleBuildClasspathPojo( externalModulePath, ContainerUtil.newArrayList(buildClasspath))); } } GradleBuildClasspathManager.getInstance(project).reload(); }