1

나는 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"); 
+1

_parser_에서 데이터 소스를 수정해야하는 이유는 무엇입니까? 특히 소스 코드가 파일에서 나오지는 않지만 다른 일부 데이터 소스에서 가져올 수 있기 때문에 그렇지 않아야합니다. 파서는 임의의 InputStream을 수정하는 방법을 알 수 없습니다. –

+0

@RolandIllig 귀하의 진술을 이해할 수 없습니다. [JavaParser] (https://github.com/javaparser/javaparser) 페이지를 보면 수정 가능한 기능이 있습니다. 또한 소스 코드를 수정하지 않으면 setName() 또는 setComment() 같은 메서드가있는 이유는 무엇입니까? – Nerzid

+0

바보, 지금은 이해하지만 질문은 여전히 ​​남아 있습니다. 어떻게 소스 파일을 변경합니까? – Nerzid

답변

3

에뿐만 아니라 특수 문자를 사용하는 문자열 표현, 이것에 대해서 :

Files.write(new File("Modified.java").toPath(), cu.toString(), StandardCharsets.UTF_8); 
+0

감사! 실제로 작동하지만 다른 문제는 CompilationUnit에서 UTF-8 문자를 인식하지 못하는 것입니다 (예 : ö, ş ...와 같은 문자는 이됩니다). – Nerzid

+1

특수 문자 문제도 해결했습니다. 다른 사람이 동일한 문제가있는 경우 인코딩 인수를 JavaParser에 다음과 같이 전달해야합니다. 'CompilationUnit cu = JavaParser.parser (file, "UTF-8"); ' 다시 한번 감사드립니다 @RolandIllig – Nerzid

+0

소스 파일이 UTF-8은 요즘 가장 일반적인 인코딩입니다. 분명히 틀 렸기 때문에 표준 Windows 인코딩 (코드 페이지 1252)에서 잘 작동하는'StandardEncodings.ISO_8859_1'을 사용하여 파일을 저장하십시오. –

관련 문제