diff -r 23bfe4015241 ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/fod/FeatureProjectFactory.java --- a/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/fod/FeatureProjectFactory.java Mon Dec 05 08:14:07 2011 +0100 +++ b/ide.ergonomics/src/org/netbeans/modules/ide/ergonomics/fod/FeatureProjectFactory.java Mon Dec 05 09:22:43 2011 +0100 @@ -91,6 +91,7 @@ import org.openide.filesystems.FileUtil; import org.openide.loaders.DataFolder; import org.openide.nodes.FilterNode; +import org.openide.util.RequestProcessor.Task; import org.xml.sax.SAXException; /** @@ -264,9 +265,14 @@ @Override public void run() { + final Project[] toCheck = OpenProjects.getDefault().getOpenProjects(); + checkProjects(toCheck); + } + + private void checkProjects(final Project[] toCheck) { final List additional = new ArrayList(); FeatureInfo f = null; - for (Project p : OpenProjects.getDefault().getOpenProjects()) { + for (Project p : toCheck) { Data d = new Data(p.getProjectDirectory(), true); for (FeatureInfo info : FeatureManager.features()) { switch (info.isProject(d)) { @@ -300,6 +306,19 @@ @Override public void propertyChange(PropertyChangeEvent evt) { + if (OpenProjects.PROPERTY_WILL_OPEN_PROJECTS.equals(evt.getPropertyName())) { + final Object arr = evt.getNewValue(); + if (arr instanceof Project[]) { + Task t = FeatureManager.getInstance().create(new Runnable() { + @Override + public void run() { + checkProjects((Project[])arr); + } + }); + t.schedule(0); + t.waitFinished(); + } + } if (OpenProjects.PROPERTY_OPEN_PROJECTS.equals(evt.getPropertyName())) { RequestProcessor.Task t = FeatureManager.getInstance().create(this); t.schedule(0); diff -r 23bfe4015241 projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java --- a/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java Mon Dec 05 08:14:07 2011 +0100 +++ b/projectui/src/org/netbeans/modules/project/ui/OpenProjectList.java Mon Dec 05 09:22:43 2011 +0100 @@ -137,6 +137,7 @@ // Property names public static final String PROPERTY_OPEN_PROJECTS = "OpenProjects"; + public static final String PROPERTY_WILL_OPEN_PROJECTS = "WillOpenProjects"; public static final String PROPERTY_MAIN_PROJECT = "MainProject"; public static final String PROPERTY_RECENT_PROJECTS = "RecentProjects"; public static final String PROPERTY_REPLACE = "ReplaceProject"; @@ -610,6 +611,16 @@ assert !Arrays.asList(projects).contains(null) : "Projects can't be null"; LOAD.waitFinished(); + pchSupport.firePropertyChange(PROPERTY_WILL_OPEN_PROJECTS, null, projects); + for (int i = 0; i < projects.length; i++) { + try { + projects[i] = ProjectManager.getDefault().findProject(projects[i].getProjectDirectory()); + } catch (IOException ex) { + LOGGER.log(Level.INFO, "Cannot convert " + projects[i].getProjectDirectory(), ex); + } catch (IllegalArgumentException ex) { + LOGGER.log(Level.INFO, "Cannot convert " + projects[i].getProjectDirectory(), ex); + } + } try { LOAD.enter(); diff -r 23bfe4015241 projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java --- a/projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java Mon Dec 05 08:14:07 2011 +0100 +++ b/projectui/src/org/netbeans/modules/project/ui/OpenProjectsTrampolineImpl.java Mon Dec 05 09:22:43 2011 +0100 @@ -110,6 +110,9 @@ if ( e.getPropertyName().equals( OpenProjectList.PROPERTY_OPEN_PROJECTS ) ) { pchSupport.firePropertyChange( OpenProjects.PROPERTY_OPEN_PROJECTS, e.getOldValue(), e.getNewValue() ); } + if ( e.getPropertyName().equals( OpenProjectList.PROPERTY_WILL_OPEN_PROJECTS ) ) { + pchSupport.firePropertyChange( OpenProjects.PROPERTY_WILL_OPEN_PROJECTS, e.getOldValue(), e.getNewValue() ); + } if ( e.getPropertyName().equals( OpenProjectList.PROPERTY_MAIN_PROJECT ) ) { pchSupport.firePropertyChange( OpenProjects.PROPERTY_MAIN_PROJECT, e.getOldValue(), e.getNewValue() ); } diff -r 23bfe4015241 projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java --- a/projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java Mon Dec 05 08:14:07 2011 +0100 +++ b/projectuiapi/src/org/netbeans/api/project/ui/OpenProjects.java Mon Dec 05 09:22:43 2011 +0100 @@ -79,6 +79,12 @@ * @see #getOpenProjects */ public static final String PROPERTY_OPEN_PROJECTS = "openProjects"; // NOI18N + + /** + * Property representing open projects. + * @see #getOpenProjects + */ + public static final String PROPERTY_WILL_OPEN_PROJECTS = "willOpenProjects"; // NOI18N /** * Property representing main project.