diff --git a/maven/src/org/netbeans/modules/maven/SubprojectProviderImpl.java b/maven/src/org/netbeans/modules/maven/SubprojectProviderImpl.java --- a/maven/src/org/netbeans/modules/maven/SubprojectProviderImpl.java +++ b/maven/src/org/netbeans/modules/maven/SubprojectProviderImpl.java @@ -43,6 +43,7 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -98,7 +99,11 @@ public Set getSubprojects() { Set projects = new HashSet(); File basedir = FileUtil.toFile(project.getProjectDirectory()); - addProjectModules(basedir, projects, project.getOriginalMavenProject().getModules()); + try { + addProjectModules(basedir, projects, project.getOriginalMavenProject().getModules()); + } catch (InterruptedException x) { + return Collections.emptySet(); + } addOpenedCandidates(projects); projects.remove(project); return projects; @@ -131,12 +136,15 @@ return false; } - private void addProjectModules(File basedir, Set resultset, List modules) { + private void addProjectModules(File basedir, Set resultset, List modules) throws InterruptedException { if (modules == null || modules.size() == 0) { return; } Iterator it = modules.iterator(); while (it.hasNext()) { + if (Thread.interrupted()) { + throw new InterruptedException(); + } String path = (String) it.next(); File sub = new File(basedir, path); File projectFile = FileUtil.normalizeFile(sub); diff --git a/projectui/src/org/netbeans/modules/project/ui/ProjectChooserAccessory.java b/projectui/src/org/netbeans/modules/project/ui/ProjectChooserAccessory.java --- a/projectui/src/org/netbeans/modules/project/ui/ProjectChooserAccessory.java +++ b/projectui/src/org/netbeans/modules/project/ui/ProjectChooserAccessory.java @@ -55,7 +55,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; @@ -100,7 +99,7 @@ modelUpdater = new ModelUpdater(); //#98080 - RP = new RequestProcessor(ModelUpdater.class.getName(), 1); + RP = new RequestProcessor(ModelUpdater.class.getName(), 1, true); updateSubprojectsTask = RP.create(modelUpdater); updateSubprojectsTask.setPriority( Thread.MIN_PRIORITY ); @@ -526,6 +525,9 @@ if (modelUpdater != null) { // #101286 - might be already null modelUpdater.cancel(); } + if (updateSubprojectsTask != null) { + updateSubprojectsTask.cancel(); + } modelUpdater = null; subprojectsCache = null; updateSubprojectsTask = null; @@ -672,12 +674,16 @@ List subprojects = new ArrayList(currentProjects.size() * 5); for (Project p : currentProjects) { - if (cancel) return; + if (cancel) { + return; + } addSubprojects(p, subprojects, cache); // Find the projects recursively } - if (cancel) return; - List subprojectNames = new ArrayList(subprojects.size()); + if (cancel) { + return; + } + List subprojectNames = new ArrayList(subprojects.size()); if ( !subprojects.isEmpty() ) { String pattern = NbBundle.getMessage( ProjectChooserAccessory.class, "LBL_PrjChooser_SubprojectName_Format" ); // NOI18N File pDir = currentProjects.size() == 1 ? @@ -686,7 +692,9 @@ // Replace projects in the list with formated names for (Project p : subprojects) { - if (cancel) return; + if (cancel) { + return; + } FileObject spDir = p.getProjectDirectory(); // Try to compute relative path @@ -709,7 +717,7 @@ // Sort the list Collections.sort( subprojectNames, Collator.getInstance() ); } - if ( currentProjects != projects ||cancel) { + if (currentProjects != projects || cancel) { return; } DefaultListModel listModel = new DefaultListModel(); @@ -718,7 +726,9 @@ listModel.addElement(displayName); } subprojectsToSet = listModel; - if (cancel) return; + if (cancel) { + return; + } SwingUtilities.invokeLater( this ); return; } @@ -745,12 +755,16 @@ /** Gets all subprojects recursively */ void addSubprojects(Project p, List result, Map> cache) { - if (cancel) return; + if (cancel) { + return; + } Set subprojects = cache.get(p); if (subprojects == null) { SubprojectProvider spp = p.getLookup().lookup(SubprojectProvider.class); if (spp != null) { - if (cancel) return; + if (cancel) { + return; + } subprojects = spp.getSubprojects(); } else { subprojects = Collections.emptySet(); @@ -758,7 +772,9 @@ cache.put(p, subprojects); } for (Project sp : subprojects) { - if (cancel) return; + if (cancel) { + return; + } if ( !result.contains( sp ) ) { result.add( sp );