b73: IllegalAccessError: tried to access class java.util.stream.BaseStream

Remi Forax forax at univ-mlv.fr
Wed Jan 16 14:56:58 PST 2013


On 01/16/2013 11:46 PM, Maurizio Cimadamore wrote:
> On 16/01/13 19:21, Remi Forax wrote:
>> On 01/16/2013 04:51 PM, Paul Sandoz wrote:
>>> On Jan 16, 2013, at 4:17 PM, Dmitry Bessonov 
>>> <dmitry.bessonov at oracle.com> wrote:
>>>
>>>> import java.util.Arrays;
>>>> import java.util.stream.Stream;
>>>>
>>>> public class IllegalAccessErrorTest {
>>>>
>>>>       public static void main(String[] args) {
>>>>
>>>>           Stream stream = Arrays.asList("a", "b").stream();
>>>>           System.err.println("iterator = " + stream.iterator());
>>>>           Iterable iterable = stream::iterator;
>>>>           System.err.println("iterable = " + iterable);
>>>>       }
>>>> }
>>>>
>>>> when compiled/run on b73 the output is:
>>>>
>>>>
>>>> iterator = java.util.stream.ReferencePipeline$6 at 3256a5
>>>> Exception in thread "main" java.lang.IllegalAccessError: tried to 
>>>> access
>>>> class java.util.stream.BaseStream from class IllegalAccessErrorTest
>>>>       at IllegalAccessErrorTest.main(IllegalAccessErrorTest.java:10)
>>>>
>>> Interesting. BaseStream was made package private.
>>>
>>> Looks like a bug in the runtime translation of the method reference.
>> No, it's compiler bug, if you use javap -verbose you can see that the
>> class file uses BaseStream::Iterator instead of Stream::iterator as
>> argument of the bootstrap method.
> Uhm - right, but the referenced method is in fact BaseStream::iterator 
> since Stream does not override it... ,

yes,
  but iterator() is visible in Stream but not in BaseStream (because 
BaseStream is not visible).

by example, the code:
   Stream stream = ...
   stream.iterator();
is translated to an invokeinterface Stream.iterator()

Likewise, Stream::Iterator should be translated to a method reference 
Stream.iterator and not BaseStream.iterator.

>
> Maurizio

Rémi

>>> Paul.
>> Rémi
>>
>>>
>>>> with b72 no exceptions are seen
>>>>
>>>> -Dmitry
>>>>
>>>>
>>
>



More information about the lambda-dev mailing list