diff --git a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformProject.java b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformProject.java --- a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformProject.java +++ b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformProject.java @@ -64,7 +64,6 @@ import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.Mutex; -import org.openide.util.Utilities; import org.openide.util.lookup.Lookups; import org.w3c.dom.Element; import org.w3c.dom.NodeList; @@ -111,10 +110,11 @@ aux = helper().createAuxiliaryConfiguration(); // AuxiliaryConfiguration FreeformFileEncodingQueryImpl FEQImpl = new FreeformFileEncodingQueryImpl(helper(), evaluator()); helper().addAntProjectListener(FEQImpl); + FreeformSources sources = new FreeformSources(this); Lookup baseLookup = Lookups.fixed( this, new Info(), // ProjectInformation - new FreeformSources(this), // Sources + sources, // Sources new Actions(this), // ActionProvider new View(this), // LogicalViewProvider new ProjectCustomizerProvider(this), // CustomizerProvider @@ -125,6 +125,7 @@ new LookupMergerImpl(), // LookupMerger or ActionProvider UILookupMergerSupport.createPrivilegedTemplatesMerger(), UILookupMergerSupport.createRecommendedTemplatesMerger(), + UILookupMergerSupport.createProjectOpenHookMerger(sources), new FreeformProjectOperations(this), new FreeformSharabilityQuery(helper()), //SharabilityQueryImplementation Accessor.DEFAULT.createProjectAccessor(this), //Access to AntProjectHelper and PropertyEvaluator diff --git a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java --- a/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java +++ b/ant.freeform/src/org/netbeans/modules/ant/freeform/FreeformSources.java @@ -50,6 +50,7 @@ import org.netbeans.spi.project.support.ant.AntProjectEvent; import org.netbeans.spi.project.support.ant.AntProjectListener; import org.netbeans.spi.project.support.ant.SourcesHelper; +import org.netbeans.spi.project.ui.ProjectOpenedHook; import org.openide.util.ChangeSupport; import org.openide.util.Mutex; import org.w3c.dom.Element; @@ -59,14 +60,14 @@ * XXX will not correctly unregister released external source roots * @author Jesse Glick */ -final class FreeformSources implements Sources, AntProjectListener { +final class FreeformSources extends ProjectOpenedHook implements Sources, AntProjectListener { private final FreeformProject project; + private SourcesHelper h; public FreeformSources(FreeformProject project) { this.project = project; project.helper().addAntProjectListener(this); - initSources(); // have to register external build roots eagerly } private Sources delegate; @@ -84,7 +85,7 @@ } private Sources initSources() { - final SourcesHelper h = new SourcesHelper(project.helper(), project.evaluator()); + h = new SourcesHelper(project.helper(), project.evaluator()); Element genldata = project.getPrimaryConfigurationData(); Element foldersE = Util.findElement(genldata, "folders", FreeformProjectType.NS_GENERAL); // NOI18N if (foldersE != null) { @@ -119,11 +120,6 @@ } } } - ProjectManager.mutex().postWriteRequest(new Runnable() { - public void run() { - h.registerExternalRoots(FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); - } - }); return h.createSources(); } @@ -143,5 +139,12 @@ public void propertiesChanged(AntProjectEvent ev) { // ignore } + + protected void projectOpened() { + getSourceGroups(TYPE_GENERIC); + h.registerExternalRoots(FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); + } + + protected void projectClosed() {} }