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

William Keith wak at kaon.co.uk
Wed Oct 7 12:39:44 EDT 2015


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()
                {
                }
            };
    }

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


More information about the Scons-users mailing list