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

William Blevins wblevins001 at gmail.com
Wed Oct 7 12:31:29 EDT 2015


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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20151007/ec753994/attachment-0001.html>


More information about the Scons-users mailing list