From 1c8d26245a1f598ae6bf5b95f66c7364b3e0bf43 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Wed, 6 Apr 2016 10:39:47 +0300 Subject: [PATCH] IDEA-140313 Gradle auto-import refreshes wrong project --- .../project/GradleAutoImportAware.java | 31 +++++++++---------- 1 file changed, 14 insertions(+), 17 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java index 6c8a5308ddc5..6c79d0f14eac 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleAutoImportAware.java @@ -21,14 +21,13 @@ import com.intellij.openapi.externalSystem.settings.AbstractExternalSystemSettin import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings; import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil; import com.intellij.openapi.project.Project; -import com.intellij.util.containers.ContainerUtilRt; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.text.StringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.gradle.util.GradleConstants; -import java.io.File; import java.util.Collection; -import java.util.Map; /** * @author Denis Zhdanov @@ -50,21 +49,19 @@ public class GradleAutoImportAware implements ExternalSystemAutoImportAware { if (projectsSettings.isEmpty()) { return null; } - Map rootPaths = ContainerUtilRt.newHashMap(); - for (ExternalProjectSettings setting : projectsSettings) { - if(setting != null && setting.getExternalProjectPath() != null) { - File rootPath = new File(setting.getExternalProjectPath()); - if(rootPath.getParentFile() != null) { - rootPaths.put(rootPath.getParentFile().getAbsolutePath(), setting.getExternalProjectPath()); - } - } - } - for (File f = new File(changedFileOrDirPath).getParentFile(); f != null; f = f.getParentFile()) { - String dirPath = f.getAbsolutePath(); - String configFilePath = rootPaths.get(dirPath); - if (rootPaths.containsKey(dirPath)) { - return configFilePath; + for (ExternalProjectSettings setting : projectsSettings) { + String rootProjectPath = setting.getExternalProjectPath(); + if (FileUtil.isAncestor(rootProjectPath, changedFileOrDirPath, false)) { + return rootProjectPath; + } else { + // honor multi-projects with flat structure + for (String modulePath : setting.getModules()) { + if(StringUtil.equals(modulePath, rootProjectPath)) continue; + if (FileUtil.isAncestor(modulePath, changedFileOrDirPath, false)) { + return rootProjectPath; + } + } } } return null;