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.

Bug 175817 - SourceRoots fires PROP_ROOTS too many times
Summary: SourceRoots fires PROP_ROOTS too many times
Status: RESOLVED FIXED
Alias: None
Product: java
Classification: Unclassified
Component: Project (show other bugs)
Version: 6.x
Hardware: All All
: P2 blocker (vote)
Assignee: Tomas Zezula
URL:
Keywords: PERFORMANCE
Depends on:
Blocks: 175512
  Show dependency tree
 
Reported: 2009-10-30 20:49 UTC by Jesse Glick
Modified: 2009-11-10 05:13 UTC (History)
1 user (show)

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
Stack trace excerpts (27.29 KB, text/plain)
2009-10-30 20:52 UTC, Jesse Glick
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jesse Glick 2009-10-30 20:49:33 UTC
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.
Comment 1 Jesse Glick 2009-10-30 20:52:17 UTC
Created attachment 90339 [details]
Stack trace excerpts
Comment 2 Jesse Glick 2009-10-30 20:58:12 UTC
...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)
Comment 3 Milan Kubec 2009-11-03 10:14:11 UTC
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.
Comment 4 Jesse Glick 2009-11-03 15:53:32 UTC
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.
Comment 5 Tomas Zezula 2009-11-10 05:13:02 UTC
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