diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index 69b87ade577c..ca49ab5187c1 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -584,8 +584,8 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent } @NotNull - public Set findInheritors(@Nullable MavenProject parent) { - if (parent == null || !isInitialized()) return Collections.emptySet(); + public Collection findInheritors(@Nullable MavenProject parent) { + if (parent == null || !isInitialized()) return Collections.emptyList(); return myProjectsTree.findInheritors(parent); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java index e4e8925add87..8af95731bd9d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java @@ -519,9 +519,11 @@ public class MavenProjectsTree { process.setText2(""); List prevModules = getModules(mavenProject); - Set prevInheritors = isNew - ? new THashSet() - : findInheritors(mavenProject); + + Set prevInheritors = new HashSet(); + if (!isNew) { + prevInheritors.addAll(findInheritors(mavenProject)); + } MavenProjectTimestamp timestamp = calculateTimestamp(mavenProject, explicitProfiles, generalSettings); boolean isChanged = force || !timestamp.equals(myTimestamps.get(mavenProject)); @@ -627,9 +629,9 @@ public class MavenProjectsTree { } } - Set allInheritors = findInheritors(mavenProject); - allInheritors.addAll(prevInheritors); - for (MavenProject each : allInheritors) { + prevInheritors.addAll(findInheritors(mavenProject)); + + for (MavenProject each : prevInheritors) { doUpdate(each, findAggregator(each), false, @@ -1102,15 +1104,25 @@ public class MavenProjectsTree { return findProject(project.getParentId()); } - public Set findInheritors(MavenProject project) { - Set result = new THashSet(); - MavenId id = project.getMavenId(); + public Collection findInheritors(MavenProject project) { + readLock(); + try { + List result = null; + MavenId id = project.getMavenId(); - for (MavenProject each : getProjects()) { - if (each == project) continue; - if (id.equals(each.getParentId())) result.add(each); + for (MavenProject each : myVirtualFileToProjectMapping.values()) { + if (each == project) continue; + if (id.equals(each.getParentId())) { + if (result == null) result = new ArrayList(); + result.add(each); + } + } + + return result == null ? Collections.emptyList() : result; + } + finally { + readUnlock(); } - return result; } public List getDependentProjects(Collection projects) {