src2absでNullPointExceptionが返ってくる


結論

src2absのファイルパスは相対パスで書きましょうという。例:./sample.java

困ったこと

src2absというプログラミング解析ツールをpythonのsubprocessから実行したがエラーが返ってくる。

コード

import subprocess
input_file_path = "0a880965_e08adf83_0_after.java"

cp = subprocess.run(["java", "-jar","src2abs-0.1-jar-with-dependencies.jar", "single","method",input_file_path,"test.java","idioms.csv"])

結果

Exception in thread "main" java.lang.NullPointerException
    at java.nio.file.Files.provider(Files.java:97)
    at java.nio.file.Files.readAttributes(Files.java:1737)
    at java.nio.file.Files.isDirectory(Files.java:2192)
    at edu.wm.cs.src2abs.AbstractorManager.checkParentFolderExists(AbstractorManager.java:121)
    at edu.wm.cs.src2abs.AbstractorManager.checkInputs(AbstractorManager.java:117)
    at edu.wm.cs.src2abs.AbstractorManager.abstractCode(AbstractorManager.java:20)
    at edu.wm.cs.src2abs.main.AbstractorMain.abstractCode(AbstractorMain.java:48)
    at edu.wm.cs.src2abs.main.AbstractorMain.main(AbstractorMain.java:25)

解決策

相対パスで書きましょう。

import subprocess
import sys
input_file_path = "./0a880965_e08adf83_0_after.java"

cp = subprocess.run(["java", "-jar","src2abs-0.1-jar-with-dependencies.jar", "single","method",input_file_path,"./test.java","./idioms.csv"])

そうするとうまく実行できました。

Source Code Abstracted successfully!
Abstracted Code: ./test.java
Mapping: ./test.java.map

終わりに

かなりニッチなケースですが情報がなかったので書きました。