mbien opened a new pull request, #7989:
URL: https://github.com/apache/netbeans/pull/7989
Evaluators synchronize their inner workings on a per-instance basis. The
static cache however is shared between instances and should use a sharable
collection.
`ConcurrentHashMap` is probably the best choice here, since the potentially
long running `computeIfAbsent` would only lock the item, not the map.
Exception during NB startup while it is trying to open ~100 NB modules
<details>
```
SEVERE [org.openide.util.RequestProcessor]: Error in RequestProcessor
org.netbeans.modules.java.JavaNode$IconTask$SourceIcon
java.util.ConcurrentModificationException
at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1230)
at
org.netbeans.modules.apisupport.project.Evaluator.getLimitModules(Evaluator.java:894)
at
org.netbeans.modules.apisupport.project.Evaluator.createEvaluator(Evaluator.java:460)
at
org.netbeans.modules.apisupport.project.Evaluator$2.run(Evaluator.java:236)
at
org.netbeans.modules.apisupport.project.Evaluator$2.run(Evaluator.java:223)
at
org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:188)
at org.openide.util.Mutex.readAccess(Mutex.java:199)
at
org.netbeans.modules.apisupport.project.Evaluator.reset(Evaluator.java:223)
at
org.netbeans.modules.apisupport.project.Evaluator$1.run(Evaluator.java:207)
at
org.netbeans.modules.apisupport.project.Evaluator$1.run(Evaluator.java:204)
at
org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:188)
at org.openide.util.Mutex.readAccess(Mutex.java:199)
at
org.netbeans.modules.apisupport.project.Evaluator.delegatingEvaluator(Evaluator.java:204)
at
org.netbeans.modules.apisupport.project.Evaluator.getProperty(Evaluator.java:157)
at
org.netbeans.spi.java.project.classpath.support.ProjectClassPathImplementation.getPath(ProjectClassPathImplementation.java:118)
at
org.netbeans.spi.java.project.classpath.support.ProjectClassPathImplementation.<init>(ProjectClassPathImplementation.java:70)
at
org.netbeans.spi.java.project.classpath.support.ProjectClassPathSupport.createPropertyBasedClassPathImplementation(ProjectClassPathSupport.java:51)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl.createPathFromProperty(ClassPathProviderImpl.java:420)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl.createCompileClasspath(ClassPathProviderImpl.java:431)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl$2.run(ClassPathProviderImpl.java:170)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl$2.run(ClassPathProviderImpl.java:166)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl$15.run(ClassPathProviderImpl.java:776)
at
org.netbeans.modules.openide.util.DefaultMutexImplementation.readAccess(DefaultMutexImplementation.java:188)
at org.openide.util.Mutex.readAccess(Mutex.java:199)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl.runGuarded(ClassPathProviderImpl.java:772)
at
org.netbeans.modules.apisupport.project.queries.ClassPathProviderImpl.findClassPath(ClassPathProviderImpl.java:166)
at
org.netbeans.modules.java.project.ProjectClassPathProvider.findClassPath(ProjectClassPathProvider.java:50)
at
org.netbeans.api.java.classpath.ClassPath.getClassPath(ClassPath.java:667)
at
org.netbeans.api.java.source.ClasspathInfo.create(ClasspathInfo.java:416)
at
org.netbeans.api.java.source.ClasspathInfo.create(ClasspathInfo.java:287)
at
org.netbeans.modules.java.source.parsing.JavacParser.init(JavacParser.java:276)
at
org.netbeans.modules.java.source.parsing.JavacParser.parseImpl(JavacParser.java:422)
at
org.netbeans.modules.java.source.parsing.JavacParser.parse(JavacParser.java:361)
at
org.netbeans.modules.parsing.impl.TaskProcessor.callParse(TaskProcessor.java:598)
at
org.netbeans.modules.parsing.impl.SourceCache.getResult(SourceCache.java:230)
at
org.netbeans.modules.parsing.api.ResultIterator.getParserResult(ResultIterator.java:115)
at
org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:496)
at
org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
at
org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:197)
at
org.netbeans.modules.parsing.api.ParserManager$UserTaskAction.run(ParserManager.java:180)
at
org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
at
org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
at
org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
at
org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:335)
at
org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
at
org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
at
org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
at
org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:83)
at
org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:454)
at
org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:425)
at
org.netbeans.modules.java.JavaNode$IconTask$SourceIcon.computeIcon(JavaNode.java:636)
at org.netbeans.modules.java.JavaNode$IconTask.run(JavaNode.java:598)
at
org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1403)
at
org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
[catch] at
org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2018)
```
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists