void (@NotNull IdeaModule gradleModule, @NotNull DataNode<ModuleData> ideModule) { ModuleData moduleData = ideModule.getData(); moduleData.useExternalCompilerOutput(resolverCtx.isDelegatedBuild()); File ideaOutDir = new File(moduleData.getLinkedExternalProjectPath(), "out"); ExternalProject externalProject = getExternalProject(gradleModule, resolverCtx); if (resolverCtx.isResolveModulePerSourceSet()) { DataNode<ProjectData> projectDataNode = ideModule.getDataNode(ProjectKeys.PROJECT); assert projectDataNode != null; final Map<String, Pair<String, ExternalSystemSourceType>> moduleOutputsMap = projectDataNode.getUserData(MODULES_OUTPUTS); assert moduleOutputsMap != null; Set<String> outputDirs = new HashSet<>(); assert externalProject != null; processSourceSets(resolverCtx, gradleModule, externalProject, ideModule, new SourceSetsProcessor() { @Override public void process(@NotNull DataNode<? extends ModuleData> dataNode, @NotNull ExternalSourceSet sourceSet) { MultiMap<ExternalSystemSourceType, String> gradleOutputMap = dataNode.getUserData(GradleProjectResolver.GRADLE_OUTPUTS); if (gradleOutputMap == null) { gradleOutputMap = MultiMap.create(); dataNode.putUserData(GradleProjectResolver.GRADLE_OUTPUTS, gradleOutputMap); } final ModuleData moduleData = dataNode.getData(); moduleData.useExternalCompilerOutput(resolverCtx.isDelegatedBuild()); for (Map.Entry<? extends IExternalSystemSourceType, ? extends ExternalSourceDirectorySet> directorySetEntry : sourceSet.getSources().entrySet()) { ExternalSystemSourceType sourceType = ExternalSystemSourceType.from(directorySetEntry.getKey()); ExternalSourceDirectorySet sourceDirectorySet = directorySetEntry.getValue(); File ideOutputDir = getIdeOutputDir(sourceDirectorySet); File gradleOutputDir = getGradleOutputDir(sourceDirectorySet); File outputDir = resolverCtx.isDelegatedBuild() ? gradleOutputDir : ideOutputDir; moduleData.setCompileOutputPath(sourceType, ideOutputDir == null ? null : ideOutputDir.getPath()); moduleData.setExternalCompilerOutputPath(sourceType, gradleOutputDir == null ? null : gradleOutputDir.getPath()); moduleData.setInheritProjectCompileOutputPath(sourceDirectorySet.isCompilerOutputPathInherited()); if (outputDir != null) { outputDirs.add(outputDir.getPath()); for (File file : sourceDirectorySet.getGradleOutputDirs()) { String gradleOutputPath = ExternalSystemApiUtil.toCanonicalPath(file.getPath()); gradleOutputMap.putValue(sourceType, gradleOutputPath); if (!file.getPath().equals(outputDir.getPath())) { moduleOutputsMap.put(gradleOutputPath, Pair.create(moduleData.getId(), sourceType)); } } } } } }); if (outputDirs.stream().anyMatch(path -> FileUtil.isAncestor(ideaOutDir, new File(path), false))) { GradleUtil.excludeOutDir(ideModule, ideaOutDir); } return; } IdeaCompilerOutput moduleCompilerOutput = gradleModule.getCompilerOutput(); boolean inheritOutputDirs = moduleCompilerOutput != null && moduleCompilerOutput.getInheritOutputDirs(); if (moduleCompilerOutput != null) { File outputDir = moduleCompilerOutput.getOutputDir(); if (outputDir != null) { moduleData.setCompileOutputPath(ExternalSystemSourceType.SOURCE, outputDir.getPath()); moduleData.setCompileOutputPath(ExternalSystemSourceType.RESOURCE, outputDir.getPath()); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.SOURCE, outputDir.getPath()); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.RESOURCE, outputDir.getPath()); } else { moduleData.setCompileOutputPath(ExternalSystemSourceType.SOURCE, new File(ideaOutDir, "production/classes").getPath()); moduleData.setCompileOutputPath(ExternalSystemSourceType.RESOURCE, new File(ideaOutDir, "production/resources").getPath()); if (externalProject != null) { File gradleOutputDir = getGradleOutputDir(externalProject, "main", ExternalSystemSourceType.SOURCE); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.SOURCE, gradleOutputDir == null ? null : gradleOutputDir.getPath()); File gradleResourceOutputDir = getGradleOutputDir(externalProject, "main", ExternalSystemSourceType.RESOURCE); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.RESOURCE, gradleResourceOutputDir == null ? null : gradleResourceOutputDir.getPath()); } } File testOutputDir = moduleCompilerOutput.getTestOutputDir(); if (testOutputDir != null) { moduleData.setCompileOutputPath(ExternalSystemSourceType.TEST, testOutputDir.getPath()); moduleData.setCompileOutputPath(ExternalSystemSourceType.TEST_RESOURCE, testOutputDir.getPath()); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.TEST, testOutputDir.getPath()); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.TEST_RESOURCE, testOutputDir.getPath()); } else { moduleData.setCompileOutputPath(ExternalSystemSourceType.TEST, new File(ideaOutDir, "test/classes").getPath()); moduleData.setCompileOutputPath(ExternalSystemSourceType.TEST_RESOURCE, new File(ideaOutDir, "test/resources").getPath()); if (externalProject != null) { File gradleOutputDir = getGradleOutputDir(externalProject, "test", ExternalSystemSourceType.TEST); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.TEST, gradleOutputDir == null ? null : gradleOutputDir.getPath()); File gradleResourceOutputDir = getGradleOutputDir(externalProject, "test", ExternalSystemSourceType.TEST_RESOURCE); moduleData.setExternalCompilerOutputPath(ExternalSystemSourceType.TEST_RESOURCE, gradleResourceOutputDir == null ? null : gradleResourceOutputDir.getPath()); } } if (!resolverCtx.isDelegatedBuild() && !inheritOutputDirs && (outputDir == null || testOutputDir == null)) { GradleUtil.excludeOutDir(ideModule, ideaOutDir); } } moduleData.setInheritProjectCompileOutputPath(inheritOutputDirs); }