doppio
doppio copied to clipboard
JPython and JRuby REPL do not work due to JLine changes
I'm not sure why, but JLine2 tries to construct a UnixTerminal for doppio, despite our default value for jline.terminal. There's no evidence in the codebase that anything has changed, so I'll need to do a JLine investigation.
Jython stack trace:
$ ./doppio-fast-dev -jar ~/Code/doppio-demo/demo_files/programs/jython-standalone-2.7.0.jar
Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at doppio.JarLauncher.main(JarLauncher.java:34)
Caused by: java.lang.Error: doppio is not a supported OS platform.
at java.lang.UNIXProcess$Platform.get(UNIXProcess.java:164)
at java.lang.UNIXProcess.<clinit>(UNIXProcess.java:168)
at java.lang.ProcessImpl.start(ProcessImpl.java:130)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:485)
at org.python.jline.internal.TerminalLineSettings.exec(TerminalLineSettings.java:196)
at org.python.jline.internal.TerminalLineSettings.exec(TerminalLineSettings.java:186)
at org.python.jline.internal.TerminalLineSettings.stty(TerminalLineSettings.java:181)
at org.python.jline.internal.TerminalLineSettings.get(TerminalLineSettings.java:74)
at org.python.jline.internal.TerminalLineSettings.<init>(TerminalLineSettings.java:53)
at org.python.jline.UnixTerminal.<init>(UnixTerminal.java:31)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at org.python.jline.TerminalFactory.getFlavor(TerminalFactory.java:166)
at org.python.jline.TerminalFactory.create(TerminalFactory.java:81)
at org.python.jline.TerminalFactory.get(TerminalFactory.java:158)
at org.python.jline.console.ConsoleReader.<init>(ConsoleReader.java:229)
at org.python.util.JLineConsole.install(JLineConsole.java:107)
at org.python.core.Py.installConsole(Py.java:1517)
at org.python.core.PySystemState.initConsole(PySystemState.java:1200)
at org.python.core.PySystemState.doInitialize(PySystemState.java:1060)
at org.python.core.PySystemState.initialize(PySystemState.java:974)
at org.python.core.PySystemState.initialize(PySystemState.java:930)
at org.python.core.PySystemState.initialize(PySystemState.java:925)
at org.python.util.jython.run(jython.java:263)
at org.python.util.jython.main(jython.java:142)
... 5 more
JLine's example program works in Doppio, and I manually changed it to invoke TerminalFactory.create(), and it didn't fail like Jython... so I'll have to see what Jython/JRuby are doing...