This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.
Dev build. Make a j2seproject, then remove Test Sources from Properties. J2SESources.fireChange called 8x. Should be just 1x. Most calls seem to come from SourceRoots, but there may be other culprits.
Created attachment 90339 [details] Stack trace excerpts
...and fired again many more times just closing the project or shutting down the IDE (not making any changes to source roots at all): at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:270) at org.netbeans.modules.java.api.common.SourceRoots.resetCache(SourceRoots.java:475) at org.netbeans.modules.java.api.common.SourceRoots.access$1400(SourceRoots.java:91) at org.netbeans.modules.java.api.common.SourceRoots$ProjectMetadataListener.configurationXmlChanged(SourceRoots.java:527) at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:451) at $Proxy23.configurationXmlChanged(Unknown Source) at org.netbeans.spi.project.support.ant.AntProjectHelper$3.run(AntProjectHelper.java:498) at org.netbeans.spi.project.support.ant.AntProjectHelper$3.run(AntProjectHelper.java:493) at org.openide.util.Mutex.readAccess(Mutex.java:285) at org.netbeans.spi.project.support.ant.AntProjectHelper.fireChange(AntProjectHelper.java:493) at org.netbeans.spi.project.support.ant.AntProjectHelper.modifying(AntProjectHelper.java:519) at org.netbeans.spi.project.support.ant.AntProjectHelper.access$900(AntProjectHelper.java:106) at org.netbeans.spi.project.support.ant.AntProjectHelper$10.run(AntProjectHelper.java:952) at org.netbeans.spi.project.support.ant.AntProjectHelper$10.run(AntProjectHelper.java:925) at org.openide.util.Mutex.writeAccess(Mutex.java:394) at org.netbeans.spi.project.support.ant.AntProjectHelper.putConfigurationFragment(AntProjectHelper.java:925) at org.netbeans.spi.project.support.ant.ExtensibleMetadataProviderImpl.putConfigurationFragment(ExtensibleMetadataProviderImpl.java:87) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl$2.run(AuxiliaryConfigImpl.java:143) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl$2.run(AuxiliaryConfigImpl.java:134) at org.openide.util.Mutex.writeAccess(Mutex.java:394) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl.putConfigurationFragment(AuxiliaryConfigImpl.java:134) at org.netbeans.modules.project.ui.ProjectUtilities.storeProjectOpenFiles(ProjectUtilities.java:475) at org.netbeans.modules.project.ui.ProjectUtilities.closeAllDocuments(ProjectUtilities.java:452) at org.netbeans.modules.project.ui.OpenProjectList.close(OpenProjectList.java:727) at org.netbeans.modules.project.ui.actions.CloseProject.actionPerformed(CloseProject.java:73) at org.netbeans.modules.java.api.common.SourceRoots.resetCache(SourceRoots.java:475) at org.netbeans.modules.java.api.common.SourceRoots.access$1400(SourceRoots.java:91) at org.netbeans.modules.java.api.common.SourceRoots$ProjectMetadataListener.configurationXmlChanged(SourceRoots.java:527) at sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:592) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:451) at $Proxy23.configurationXmlChanged(Unknown Source) at org.netbeans.spi.project.support.ant.AntProjectHelper$3.run(AntProjectHelper.java:498) at org.netbeans.spi.project.support.ant.AntProjectHelper$3.run(AntProjectHelper.java:493) at org.openide.util.Mutex.readAccess(Mutex.java:285) at org.netbeans.spi.project.support.ant.AntProjectHelper.fireChange(AntProjectHelper.java:493) at org.netbeans.spi.project.support.ant.AntProjectHelper.modifying(AntProjectHelper.java:519) at org.netbeans.spi.project.support.ant.AntProjectHelper.access$900(AntProjectHelper.java:106) at org.netbeans.spi.project.support.ant.AntProjectHelper$10.run(AntProjectHelper.java:952) at org.netbeans.spi.project.support.ant.AntProjectHelper$10.run(AntProjectHelper.java:925) at org.openide.util.Mutex.writeAccess(Mutex.java:394) at org.netbeans.spi.project.support.ant.AntProjectHelper.putConfigurationFragment(AntProjectHelper.java:925) at org.netbeans.spi.project.support.ant.ExtensibleMetadataProviderImpl.putConfigurationFragment(ExtensibleMetadataProviderImpl.java:87) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl$2.run(AuxiliaryConfigImpl.java:143) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl$2.run(AuxiliaryConfigImpl.java:134) at org.openide.util.Mutex.writeAccess(Mutex.java:394) at org.netbeans.modules.projectapi.AuxiliaryConfigImpl.putConfigurationFragment(AuxiliaryConfigImpl.java:134) at org.netbeans.modules.editor.bookmarks.BookmarksPersistence.saveBookmarks(BookmarksPersistence.java:318) at org.netbeans.modules.editor.bookmarks.BookmarksPersistence.destroy(BookmarksPersistence.java:104) at org.netbeans.modules.editor.bookmarks.EditorBookmarksModule.finish(EditorBookmarksModule.java:127) at org.netbeans.modules.editor.bookmarks.EditorBookmarksModule.closing(EditorBookmarksModule.java:114) at org.netbeans.core.startup.NbInstaller.closing(NbInstaller.java:681) at org.netbeans.ModuleManager.shutDown(ModuleManager.java:1573) at org.netbeans.core.startup.ModuleSystem.shutDown(ModuleSystem.java:291) at org.netbeans.core.NbTopManager.doExit(NbTopManager.java:526)
Tomasi, please take a look at this issue. Thanks. If it's project infrastructure related, please reassign back. I wasn't able to reproduce too many events being fired, only 2x in case of adding a root, closing and opening a project and 3x in case of removing a root.
My guess is that both j2seproject and java.api.common have some responsibility - in my tests, both fired events several times. Perhaps it is too much work to reduce the number of changes fired to one, but it was _dozens_ when I tested it - enough to cause serious performance issues as other parts of the IDE tried to react. Not sure if there is anything special needed to reproduce.
The J2SESources.fireChange is called both from SourceRoots (not single instance both SourceRoots for tests and sources) and the delegate (Sources). I've added cumulating of events coming from single PM.mutex().writeAccess() into J2SESources. The J2SESources fires once per one writeAccess(), I've also added an unit test to prevent regressions. jet-main 20d7e754a11a