--- a/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java +++ a/maven/src/org/netbeans/modules/maven/NbMavenProjectImpl.java @@ -107,6 +107,7 @@ import org.netbeans.api.project.ProjectInformation; import org.netbeans.api.project.ProjectManager; import org.netbeans.api.project.ProjectUtils; +import org.netbeans.api.project.ui.OpenProjects; import org.netbeans.api.queries.VisibilityQuery; import org.netbeans.spi.project.ProjectState; import org.netbeans.spi.project.ui.PrivilegedTemplates; @@ -500,6 +501,7 @@ return; } // clearProjectWorkspaceCache(); + boolean wasBroken = problemReporter.isBroken(); problemReporter.clearReports(); //#167741 -this will trigger node refresh? MavenProject prj = loadOriginalMavenProject(false); synchronized (this) { @@ -508,6 +510,32 @@ ACCESSOR.doFireReload(watcher); projectInfo.reset(); doBaseProblemChecks(); + if (wasBroken && !problemReporter.isBroken()) { + LOG.log(Level.FINE, "{0} was fixed, will refresh other broken projects", prj); + refreshAllBrokenProjects(); + } + } + private static int refreshPointer; // cycle through open projects so we do not repeat too much + private static void refreshAllBrokenProjects() { + RELOAD_RP.post(new Runnable() { + public @Override void run() { + EmbedderFactory.resetProjectEmbedder(); + int max = 5; // do not try to reload hundreds of projects (unless they get fixed and retrigger this) + Project[] openProjects = OpenProjects.getDefault().getOpenProjects(); + for (int i = 0; i < openProjects.length; i++) { + Project p = openProjects[(i + refreshPointer++) % openProjects.length]; + ProblemReporterImpl reporter = p.getLookup().lookup(ProblemReporterImpl.class); + if (reporter != null && reporter.isBroken()) { + LOG.log(Level.FINE, "will try to refresh broken {0}", p); + NbMavenProject.fireMavenProjectReload(p); + if (max-- == 0) { + LOG.fine("stopping refreshes after several attempts"); + break; + } + } + } + } + }); } // public void clearProjectWorkspaceCache() {