[
https://issues.apache.org/jira/browse/NETBEANS-4754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17188224#comment-17188224
]
Eirik Bakke commented on NETBEANS-4754:
---------------------------------------
I tried clearing instDelegate at the beginning of
ContextAction.Performer.delegate0 in my private NetBeans Platform build, and
built my platform application against it (netbeans-4754-eiriktest.patch). This
does appear to fix the bug--and action enablement reacts as expected in the
toolbar as well.
Examining ContextAction.Performer, there seems to be two members,
"StatefulMonitor enabler" and "PropertyChangeListener weakActionListener" that
are never actually initialized. But there are methods that try to handle them:
stopListeners, startListeners, and detached. Is this actually dead code that
could just be removed?
Happy to try any other patch and confirm that the bug remains fixed.
> Action gets called with wrong context until garbage collection
> --------------------------------------------------------------
>
> Key: NETBEANS-4754
> URL: https://issues.apache.org/jira/browse/NETBEANS-4754
> Project: NetBeans
> Issue Type: Bug
> Components: platform - Actions
> Affects Versions: 12.0
> Environment: NetBeans Platform application running on NetBeans
> Platform 12.0 on Windows 10 / Java 13.0.2.
> Reporter: Eirik Bakke
> Assignee: Svatopluk Dedic
> Priority: Major
> Attachments: netbeans-4754-eiriktest.patch
>
>
> My NetBeans Platform application has an action declared as follows:
> {code:java}
> @ActionID(category = "Ultorg", id = "com.ultorg.actionids.FieldsAction")
> @ActionRegistration(displayName = "#CTL_FieldsAction")
> @Messages("CTL_FieldsAction=Fields & Joins...")
> public class FieldsAction implements ActionListener {
> private final ToolboxInvoker invoker;
> public FieldsAction(ToolboxInvoker invoker) {
> Preconditions.checkNotNull(invoker);
> this.invoker = invoker;
> }
> @Override
> public void actionPerformed(ActionEvent e) {
> invoker.invoke();
> }
> }
> {code}
> The ToolboxInvoker context is provided by the lookup of a custom TopComponent
> implementation. When I have multiple such TopComponent tabs open, switching
> between them, and invoking the action above with a keyboard shortcut, the
> wrong FieldsAction instance will occasionally be called (i.e. an instance
> with the wrong ToolboxInvoker context).
> After some debugging, the problem seems to be caused by
> https://github.com/apache/netbeans/pull/652 , specifically by
> ContextAction.delegate0 assuming that instDelegate can be used as a cached
> value without checking whether the lookup (data parameter) has changed. Or
> perhaps instDelegate was supposed to be cleared elsewhere whenever the lookup
> changes--but this is not happening properly.
> Because the instDelegate field holds only weak references, the buggy state
> only lasts until the next garbage collection.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
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