Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Else if conversion fails #70

Open
Open
@ferchault

Description

@ferchault

When converting an existing code base I found that else-if apparently is not supported. Here's an example:

   public static void main(String[] args) {
        int a = 0;
        if (a == 1) {
                System.out.println("a=1");
        } else if (a == 2) {
                System.out.println("a=2");
        }
    }

which fails with the output

$ j2py HelloWorld.java
Traceback (most recent call last):
  File "/usr/local/bin/j2py", line 258, in <module>
    sys.exit(runMain(configScript(sys.argv[1:])))
  File "/usr/local/bin/j2py", line 57, in runMain
    return runOneOrMany(options)
  File "/usr/local/bin/j2py", line 82, in runOneOrMany
    return runTransform(options)
  File "/usr/local/bin/j2py", line 134, in runTransform
    module.walk(tree)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 86, in walk
    visitor.walk(child, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 86, in walk
    visitor.walk(child, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 86, in walk
    visitor.walk(child, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 86, in walk
    visitor.walk(child, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 86, in walk
    visitor.walk(child, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 83, in walk
    visitor = self.accept(tree, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 43, in accept
    return call(node, memo)
  File "/usr/local/lib/python2.7/dist-packages/java2python/compiler/visitor.py", line 474, in acceptIf
    nextNode = nextNode.children[2]

With the obvious workaround of separating the if statements, the conversion is successful:

    public static void main(String[] args) {
        int a = 0;
        if (a == 1) {
                System.out.println("a=1");
        }
        if (a == 2) {
                System.out.println("a=2");
        }
    }

converts to

#!/usr/bin/env python
""" generated source for module HelloWorld """
class HelloWorld(object):
    """ generated source for class HelloWorld """
    @classmethod
    def main(cls, args):
        """ generated source for method main """
        a = 0
        if a == 1:
            print "a=1"
        if a == 2:
            print "a=2"


if __name__ == '__main__':
    import sys
    HelloWorld.main(sys.argv)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions