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