hg: lambda/lambda/langtools: Bug fixes:

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Mon Aug 30 03:50:17 PDT 2010


>> The latest push has a regression:
>>
>> 88:    // Method References, syntax like Javadoc
>> 89:    final ActionListener al4 = Main#print( ActionEvent );
>> 90:    b1.addActionListener( al4 );
>> 91:    b1.doClick();
>>
>> This compiles, but when run I get:
>>
>> Exception in thread "main" java.dyn.WrongMethodTypeException:
>> (Ljava/dyn/MethodHandle;Ljava/awt/event/ActionEvent;)V cannot be
>> called as (Ljava/dyn/MethodHandle;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
>> 	at sun.dyn.FromGeneric$A2.invoke_I2(FromGeneric.java:533)
>> 	at java.dyn.MethodHandle.invokeVarargs(MethodHandle.java:332)
>> 	at com.sun.runtime.ProxyHelper$1.invoke(ProxyHelper.java:61)
>> 	at $Proxy0.actionPerformed(Unknown Source)
>> 	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2015)
>> 	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2338)
>> 	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
>> 	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
>> 	at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
>> 	at javax.swing.AbstractButton.doClick(AbstractButton.java:356)
>> 	at lambdas.Main.lambdas(Main.java:91)
>> 	at lambdas.Main.main(Main.java:22)
>>
>>      
>
The following works for me (no exception):

import java.awt.event.*;
import javax.swing.JButton;

class Test {

    public static void print(ActionEvent e) { 
System.out.println("Hello!"); }

    public static void main(String[] args) {
       final ActionListener al4 = Test#print( ActionEvent );
       JButton b = new JButton();
      b.addActionListener(al4);
      b.doClick();
      b.removeActionListener(al4);
   }
}

Is it close enough to your test case?

Maurizio



More information about the lambda-dev mailing list