forEach broken in build 48?

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu Jul 26 02:39:34 PDT 2012


On 26/07/12 03:53, bitter_fox wrote:
> Hi, Arul and Mike
> I guess Revision(langtools):1430[1] has a problem.
>
> In LambdaTranslator#makeFunctionalDescriptorType:
>          return erased ? types.erasure(descType) : descType;
>
> This is wrong I think.
Why do you think it's wrong? The code is meant to erase the descriptor 
type only if the erased flagh is set (which only is when doing 292 
translation).

Maurizio
>
> I tried this one and the problem looks resolved:
>          return erased ? descType : types.erasure(descType);
>
> Please ignore this mail if you already notice that.
>
> [1]:http://mail.openjdk.java.net/pipermail/lambda-dev/2012-July/005187.html
>
> Regards,
> bitter_fox
>
>
> 2012/7/26 Mike Duigou <mike.duigou at oracle.com>
>
>> I've looked into the problem and am able to replicate it. I did some
>> debugging and it appears to be a problem in the VM. I am notifying those
>> working on this area.
>>
>> Mike
>>
>>
>> On Jul 21 2012, at 01:39 , Arul Dhesiaseelan wrote:
>>
>>> Hi,
>>>
>>> It looks like forEach is broke in the latest build. It always prints the
>>> last item in the collection. It works fine in b45. It works in b48 only
>> if
>>> we expand the code, not if we perform method reference on an instance.
>>>
>>> public class InstanceMethodReference {
>>>
>>>     public static void main(String[] args) {
>>>         Arrays.asList("Alice", "Bob", "Charlie",
>>> "Dave").forEach(System.out::println);//INCORRECT RESULT
>>>         Arrays.asList("Alice", "Bob", "Charlie", "Dave").forEach(new
>>> MyBlock(System.out));//CORRECT RESULT
>>>     }
>>>
>>>     public static class MyBlock implements Block<String> {
>>>         PrintStream ps;
>>>
>>>         public MyBlock(PrintStream ps) {
>>>             this.ps = ps;
>>>         }
>>>
>>>         @Override
>>>         public void apply(String s) {
>>>             ps.println(s);
>>>         }
>>>     }
>>> }
>>>
>>> build45 correctly prints:
>>> Alice
>>> Bob
>>> Charlie
>>> Dave
>>> Alice
>>> Bob
>>> Charlie
>>> Dave
>>>
>>> build48 prints:
>>> Dave
>>> Dave
>>> Dave
>>> Dave
>>> Alice
>>> Bob
>>> Charlie
>>> Dave
>>>
>>>
>>> -Arul
>>>
>>
>>



More information about the lambda-dev mailing list