hg: lambda/lambda/langtools: Improved support for diagnostic during lambda conversion.

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue Jun 22 09:40:36 PDT 2010


On 22/06/10 17:37, Paul Benedict wrote:
> Maurizio,
>
> I have a question about this message:
> "the target type of a lambda conversion must define a default constructor"
>
> I remember -- yonder in my Sun Certification exam -- the difference
> between a default constructor and a public no-arg constructor. The
> default constructor is compiler generated and gets the same scope as
> the class is defined. Is this what you meant? Or did you mean a public
> no-arg constructor? I am referring back to a discussion between you
> and Neal.
>    
no-arg constructor is what we need in the diagnostic. Thanks for the 
headsup.
I will replace that message with:

"the target type of a lambda conversion must define an accessible no-arg constructor"


As soon as I will implement the accessibility check.

Maurizio
Maurizio
> Paul
>
> On Tue, Jun 22, 2010 at 11:22 AM,<maurizio.cimadamore at oracle.com>  wrote:
>    
>> Changeset: 1cbf9ca0c589
>> Author:    mcimadamore
>> Date:      2010-06-22 17:19 +0100
>> URL:       http://hg.openjdk.java.net/lambda/lambda/langtools/rev/1cbf9ca0c589
>>
>> Improved support for diagnostic during lambda conversion.
>> Now the compiler emits more specific info about why a function type cannot be assigned to a SAM type (does not cover method resolution diagnostics).
>>
>> Examples:
>>
>> TestX.java:16: incompatible types; target method pippo in class I is not suitable for lambda conversion
>> I f = #(Integer i) { return new Integer(i); };
>>       ^
>>   required: I
>>   found:    #Integer(Integer)
>> 1 error
>>
>> Test.java:16: incompatible types; target method pippo in class I is not suitable for lambda conversion
>> I f = #(Integer i) { return new Integer(i); };
>>       ^
>>   required: I
>>   found:    #Integer(Integer)
>>
>> Test.java:16: incompatible types; the target type of a lambda conversion must be an abstract class/interface
>> I f = #(Integer i) { return new Integer(i); };
>>       ^
>>   required: I
>>   found:    #Integer(Integer)
>>
>> Test.java:16: incompatible types; no target method for lambda conversion found in class I
>> I f = #(Integer i) { return new Integer(i); };
>>       ^
>>   required: I
>>   found:    #Integer(Integer)
>>
>> Test.java:16: incompatible types; the target type of a lambda conversion must define a default constructor
>> I f = #(Integer i) { return new Integer(i); };
>>       ^
>>   required: I
>>   found:    #Integer(Integer)
>>
>> ! src/share/classes/com/sun/tools/javac/code/Types.java
>> ! src/share/classes/com/sun/tools/javac/comp/Check.java
>> ! src/share/classes/com/sun/tools/javac/resources/compiler.properties
>> ! test/tools/javac/lambda/BadConv01.out
>> ! test/tools/javac/lambda/BadConv02.out
>>
>>
>>
>>      



More information about the lambda-dev mailing list