[Scons-users] IndexError in Java parser with anonymous classes

William Keith wak at kaon.co.uk
Wed Oct 7 12:51:48 EDT 2015


Yes it does; curiously if you remove one of the template parameters (e.g.,
new Foo<Baz> rather than new Foo<Bar<Baz>>) then the issue goes away. It
also goes away if you remove either of the other anonymous class instances,
however.

On 7 October 2015 at 17:47, William Blevins <wblevins001 at gmail.com> wrote:

>
>
> On Wed, Oct 7, 2015 at 5:39 PM, William Keith <wak at kaon.co.uk> wrote:
>
>> I'm not so sure that the missing symbols are affecting it - as I said,
>> this is a pared down version of the original, which has no such missing
>> symbols. Additionally, if I modify the example as follows:
>>
>> class MyApp
>> {
>>     private interface SomethingElse {}
>>     private static class Something
>>     {
>>         public Something(SomethingElse se) {}
>>     }
>>     private static class Bar<T> {}
>>     private static class Baz {}
>>     private static interface Foo<U>
>>     {
>>         public void boz();
>>     }
>>     private static interface Whatsit {}
>>
>>     private static class MyInnerClass
>>     {
>>         private void blah()
>>         {
>>             new Something(new SomethingElse()
>>                 {
>>                 });
>>         }
>>     }
>>
>>     private static void doStuff()
>>     {
>>         new Foo<Bar<Baz>>() {
>>                 @Override
>>                 public void boz()
>>                 {
>>                 }
>>             };
>>
>
>  It appears to be related with this particular instance.
>
>>     }
>>
>>     public static void main(String[] args)
>>     {
>>         new Whatsit()
>>             {
>>             };
>>     }
>> }
>>
>> then the example compiles fine with javac, but I still get the same
>> IndexError with scons (both 2.3.1 and 2.4.0)
>>
>>
>>
>>
>> On 7 October 2015 at 17:31, William Blevins <wblevins001 at gmail.com>
>> wrote:
>>
>>>
>>> On Wed, Oct 7, 2015 at 5:27 PM, William Blevins <wblevins001 at gmail.com>
>>> wrote:
>>>
>>>> I just tried his sample with minimal tweaks, and I get a similar stack
>>>> trace from SCons dev branch latest.
>>>>
>>>> On Wed, Oct 7, 2015 at 5:15 PM, Bill Deegan <bill at baddogconsulting.com>
>>>> wrote:
>>>>
>>>>> Will,
>>>>>
>>>>> Can you try 2.4.0 or the default branch?
>>>>> I checked your stack trace and the line numbers don't entirely match
>>>>> up with current default, so its possible there are some changes which may
>>>>> affect your issue, and if nothing else will make it easier to look at the
>>>>> stacktrace/code.
>>>>>
>>>>> -Bill
>>>>>
>>>>> On Wed, Oct 7, 2015 at 12:04 PM, William Keith <wak at kaon.co.uk> wrote:
>>>>>
>>>>>> Bill,
>>>>>>
>>>>>> I knew there was something I forgot to mention :)
>>>>>>
>>>>>> Version 2.3.1
>>>>>>
>>>>>> Will
>>>>>>
>>>>>> On 7 October 2015 at 16:50, Bill Deegan <bill at baddogconsulting.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Will,
>>>>>>>
>>>>>>> What version of SCons are you running?
>>>>>>>
>>>>>>> -Bill
>>>>>>>
>>>>>>> On Wed, Oct 7, 2015 at 11:10 AM, William Keith <wak at kaon.co.uk>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello,
>>>>>>>>
>>>>>>>> I am trying to use SCons to build the following Java file:
>>>>>>>>
>>>>>>>> class MyApp
>>>>>>>> {
>>>>>>>>     private static class MyInnerClass
>>>>>>>>     {
>>>>>>>>         private void blah()
>>>>>>>>         {
>>>>>>>>             new Something(new SomethingElse()
>>>>>>>>                 {
>>>>>>>>                 });
>>>>>>>>         }
>>>>>>>>     }
>>>>>>>>
>>>>>>>>     private static void doStuff()
>>>>>>>>     {
>>>>>>>>         new Foo<Bar<Baz>>() {
>>>>>>>>                 @Override
>>>>>>>>                 public void boz()
>>>>>>>>                 {
>>>>>>>>                 }
>>>>>>>>             };
>>>>>>>>     }
>>>>>>>>
>>>>>>>>     public static void main(String[] args)
>>>>>>>>     {
>>>>>>>>         new Whatsit()
>>>>>>>>             {
>>>>>>>>             };
>>>>>>>>     }
>>>>>>>> }
>>>>>>>>
>>>>>>>> My SConstruct is as follows:
>>>>>>>>
>>>>>>>> app_classes = Java(target='build/classes', source='src',
>>>>>>>> JAVAVERSION='1.7')
>>>>>>>> jar_sources = app_classes
>>>>>>>> Jar(target='build/target.jar', source=jar_sources)
>>>>>>>>
>>>>>>>> Running scons with the above results in an IndexError with the
>>>>>>>> following stack trace:
>>>>>>>>
>>>>>>>> scons: Reading SConscript files ...
>>>>>>>> IndexError: list index out of range:
>>>>>>>>   File "/home/projects/scons_java_test/SConstruct", line 7:
>>>>>>>>     app_classes = Java(target='build/classes', source='src',
>>>>>>>> JAVAVERSION='1.7')
>>>>>>>>   File "/usr/lib/scons/SCons/Script/SConscript.py", line 609:
>>>>>>>>     return method(*args, **kw)
>>>>>>>>   File "/usr/lib/scons/SCons/Environment.py", line 224:
>>>>>>>>     return self.method(*nargs, **kwargs)
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/javac.py", line 195:
>>>>>>>>     result.extend(b(t, s, *args, **kw))
>>>>>>>>   File "/usr/lib/scons/SCons/Environment.py", line 260:
>>>>>>>>     return MethodWrapper.__call__(self, target, source, *args, **kw)
>>>>>>>>   File "/usr/lib/scons/SCons/Environment.py", line 224:
>>>>>>>>     return self.method(*nargs, **kwargs)
>>>>>>>>   File "/usr/lib/scons/SCons/Builder.py", line 633:
>>>>>>>>     return self._execute(env, target, source, OverrideWarner(kw),
>>>>>>>> ekw)
>>>>>>>>   File "/usr/lib/scons/SCons/Builder.py", line 554:
>>>>>>>>     tlist, slist = self._create_nodes(env, target, source)
>>>>>>>>   File "/usr/lib/scons/SCons/Builder.py", line 518:
>>>>>>>>     target, source = self.emitter(target=tlist, source=slist,
>>>>>>>> env=env)
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/javac.py", line 97:
>>>>>>>>     pkg_dir, classes = parse_java_file(f.rfile().get_abspath(),
>>>>>>>> version)
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/JavaCommon.py", line 286:
>>>>>>>>     return parse_java(open(fn, 'r').read(), version)
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/JavaCommon.py", line 300:
>>>>>>>>     currstate = currstate.parseToken(token)
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/JavaCommon.py", line 221:
>>>>>>>>     self.outer_state.addAnonClass()
>>>>>>>>   File "/usr/lib/scons/SCons/Tool/JavaCommon.py", line 178:
>>>>>>>>     self.__getAnonStack()[-1] = self.__getAnonStack()[-1] + 1
>>>>>>>>
>>>>>>>> Note that I have attempted to pare the example down to just what is
>>>>>>>> essential to reproduce this issue. Apart from some missing symbols, it
>>>>>>>> should be valid Java. The original (un-pared-down) version compiles cleanly
>>>>>>>> with javac but produces the same exception in SCons' Java parser.
>>>>>>>>
>>>>>>>>
>>> The missing symbols my actually be important here because SCons requires
>>> parsing the *.java files in order to determine the *.java to *.class
>>> input/output relationship.  Java files often generate more than one class
>>> file when compiled and these files need to be accounted for in the
>>> dependency graph.
>>>
>>>
>>>> I am fairly sure this is a new bug. Can someone please advise?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>>
>>>>>>>> Will
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> Scons-users mailing list
>>>>>>>> Scons-users at scons.org
>>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> Scons-users mailing list
>>>>>>> Scons-users at scons.org
>>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>>
>>>>>>>
>>>>>>
>>>>>> _______________________________________________
>>>>>> Scons-users mailing list
>>>>>> Scons-users at scons.org
>>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>>
>>>>>>
>>>>>
>>>>> _______________________________________________
>>>>> Scons-users mailing list
>>>>> Scons-users at scons.org
>>>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>>>
>>>>>
>>>>
>>>
>>> _______________________________________________
>>> Scons-users mailing list
>>> Scons-users at scons.org
>>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>>
>>>
>>
>> _______________________________________________
>> Scons-users mailing list
>> Scons-users at scons.org
>> https://pairlist4.pair.net/mailman/listinfo/scons-users
>>
>>
>
> _______________________________________________
> Scons-users mailing list
> Scons-users at scons.org
> https://pairlist4.pair.net/mailman/listinfo/scons-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20151007/d5399218/attachment.html>


More information about the Scons-users mailing list