void (final @NotNull CompileContext context) { if (shouldBeBuiltByExternalSystem(myProject)) return; if (!hasGradleModules(context)) return; final BuildManager buildManager = BuildManager.getInstance(); final File projectSystemDir = buildManager.getProjectSystemDirectory(myProject); final File gradleConfigFile = new File(projectSystemDir, GradleProjectConfiguration.CONFIGURATION_FILE_RELATIVE_PATH); final Map<String, GradleModuleResourceConfiguration> affectedGradleModuleConfigurations = generateAffectedGradleModulesConfiguration(context); if (affectedGradleModuleConfigurations.isEmpty()) return; boolean configurationUpdateRequired = context.isRebuild() || !gradleConfigFile.exists(); final Map<String, Integer> affectedConfigurationHash = new HashMap<>(); for (Map.Entry<String, GradleModuleResourceConfiguration> entry : affectedGradleModuleConfigurations.entrySet()) { Integer moduleLastConfigurationHash = myModulesConfigurationHash.get(entry.getKey()); int moduleCurrentConfigurationHash = entry.getValue().computeConfigurationHash(); if (moduleLastConfigurationHash == null || moduleLastConfigurationHash.intValue() != moduleCurrentConfigurationHash) { configurationUpdateRequired = true; } affectedConfigurationHash.put(entry.getKey(), moduleCurrentConfigurationHash); } final GradleProjectConfiguration projectConfig = loadLastConfiguration(gradleConfigFile); projectConfig.moduleConfigurations.putAll(affectedGradleModuleConfigurations); final Element element = new Element("gradle-project-configuration"); XmlSerializer.serializeInto(projectConfig, element); final boolean finalConfigurationUpdateRequired = configurationUpdateRequired; buildManager.runCommand(() -> { if (finalConfigurationUpdateRequired) { buildManager.clearState(myProject); } FileUtil.createIfDoesntExist(gradleConfigFile); try { JDOMUtil.write(element, gradleConfigFile.toPath()); myModulesConfigurationHash.putAll(affectedConfigurationHash); } catch (IOException e) { throw new RuntimeException(e); } }); }