Eirik Bakke created NETBEANS-4754:
-------------------------------------

             Summary: 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


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

Reply via email to