2016-08-29 5 views
0

프로젝트 폴더의 모든 파일을 반복하고 모든 .java 파일을 구문 분석 한 다음 일부 파일을 변경하는 IntelliJ 플러그인을 만들려고합니다. 문제는 문서를 읽은 후에 전체 프로젝트 폴더에서 파일을 반복하는 방법을 알지 못했기 때문에 PSI 파일을 사용할 수 있다고 생각하지만 확실하지 않습니다. 누구든지 이것을 달성하는 방법에 대해 알고 있거나 아이디어가 있습니까?IntelliJ 플러그인 프로젝트의 모든 파일을 반복하는 방법은 무엇입니까?

답변

0

가능한 방법은 다음과 같이 AllClassesGetter을 사용하는 것이다

Processor<PsiClass> processor = new Processor<PsiClass>() { 
    @Override 
    public boolean process(PsiClass psiClass) { 
     // do your actual work here 
     return true; 
    } 
}; 

AllClassesGetter.processJavaClasses(
     new PlainPrefixMatcher(""), 
     project, 
     GlobalSearchScope.projectScope(project), 
     processor 
); 

processJavaClasses() 소정 범위 내의 주어진 접두어 일치 클래스 찾는다. 빈 접두사 및 GlobalSearchScope.projectScope()을 사용하면 프로젝트에 선언 된 모든 클래스를 반복 할 수 있고 processor에서 처리 할 수 ​​있어야합니다. 프로세서가 PsiClass의 인스턴스를 처리하므로 파일을 수동으로 구문 분석 할 필요가 없습니다. 클래스를 수정하려면 PsiClass으로 표시된 트리를 변경하기 만하면됩니다.

+0

그것은 매력처럼 작동했습니다! 도와 줘서 고마워! –

1

프로젝트 콘텐츠의 모든 파일을 반복하려면 ProjectFileIndex.SERVICE.getInstance(project).iterateContent을 사용할 수 있습니다.

그런 다음 (PsiManager#findFile)에서 PSI files을 가져 와서 Java (instanceof PsiJavaFile)인지 확인하고 원하는대로 수행 할 수 있습니다. 당신이 PSI를 필요로하지 않는 경우

, 당신은 단지 파일 형식

(VirtualFile#getFileType == JavaFileType.INSTANCE)을 확인하고 문서 (FileDocumentManager#getDocument(file)) or VFS (LoadTextUtil#loadText, VfsUtil#saveText)를 통해 수정을 수행 할 수 있습니다.