我使用JavaParser並遵循其Wiki。問題是,即使我改變了方法的名稱並添加了一個參數,該文件也不會更新。換句話說,更改不會被保存。當我System.out.println
更改CompilationUnit
時,它會在更改時打印它,但這些更改完全不會影響源文件。JavaParser不更新源文件
有什麼像CompilationUnit.update()
還是我錯過了什麼?
示例我已經從維基使用:
files_list = FilePicker.chooseAndGetJavaFiles();
if (files_list == null || files_list.isEmpty()) {
Errors.showError(Errors.COMMENT_GENERATOR_FILELIST_NULL_OR_EMPTY);
} else {
CompilationUnit cu = null;
FileInputStream in = new FileInputStream(files_list.get(0));
try {
cu = JavaParser.parse(in);
} catch (ParseException ex) {
Logger.getLogger(CommentGenerator.class.getName()).log(Level.SEVERE, null, ex);
} finally{
in.close();
}
new MethodChangerVisitor().visit(cu,null);
System.out.println(cu.toString());
}
}
private static class MethodChangerVisitor extends VoidVisitorAdapter{
@Override
public void visit(MethodDeclaration n, Object arg) {
// change the name of the method to upper case
n.setName(n.getName().toUpperCase());
// create the new parameter
Parameter newArg = ASTHelper.createParameter(ASTHelper.INT_TYPE, "value");
// add the parameter to the method
ASTHelper.addParameter(n, newArg);
}
}
編輯: 這裏是溶液; 在下方添加;
Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8);
更改下面一行的使用特殊字符,以及(如「S,O,ü...)
cu = JavaParser.parse(files_list.get(0));
要
cu = JavaParser.parse(files_list.get(0),"UTF-8");
您爲什麼期望_parser_修改其數據源?它不應該,特別是因爲源代碼可能不是來自文件而是來自其他數據源。解析器無法知道如何修改任意的InputStream。 –
@RolandIllig我不明白你的陳述。如果您查看[JavaParser](https://github.com/javaparser/javaparser)頁面,它具有可修改的功能。另外如果它不修改源代碼,爲什麼有像setName()或setComment()這樣的方法? – Nerzid
傻,我現在明白,但問題仍然存在,我該如何更改源文件? – Nerzid