나는 JavaParser을 사용 중이고 그 위키를 따르고 있습니다. 문제는 메서드의 이름을 변경하고 매개 변수를 추가해도 파일이 업데이트되지 않습니다. 즉, 변경 사항이 저장되지 않습니다. 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, ü, ö ...)
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