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

William Keith wak at kaon.co.uk
Wed Oct 7 11:10:45 EDT 2015


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.

I am fairly sure this is a new bug. Can someone please advise?

Thanks,

Will
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://pairlist4.pair.net/pipermail/scons-users/attachments/20151007/6f47c34e/attachment.html>


More information about the Scons-users mailing list