API
PSI
PSI(Program Structure Interface) 文件是表示一个文件的内容作为在一个特定的编程语言元素的层次结构的结构的根。
PsiFile 类是所有PSI文件共同的基类, 在特定语言中的文件通常使用它的子类表示。比如,PsiJavaFile 类表示一个java文件, XmlFile 类表示xml文件。
和 VirtualFile 以及 Document的应用作用域不同(即使打开多个projects,仍然只有一个对应的实例),PSI的作用域是项目级(多个projects中同时打开同一个文件,会有多个实例)。
如何获取PSI文件?
从action获取: e.getData(LangDataKeys.PSI_FILE).
从虚拟文件获取: PsiManager.getInstance(project).findFile()
从文档获取: PsiDocumentManager.getInstance(project).getPsiFile()
从文件内的一个元素获取: psiElement.getContainingFile()
在project中的任意位置通过指定的名字寻找文件,使用 FilenameIndex.getFilesByName(project, name, scope)
获取方法
e.getData(PlatformDataKeys.VIRTUAL_FILE),如果是多选,使用e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY)
LocalFileSystem.getInstance().findFileByIoFile()
psiFile.getVirtualFile(),如果PSI FILE仅存在内存中,则返回空
FileDocumentManager.getInstance().getFile()
监听文件改变
PsiTreeChangeListener
BulkFileListener 批量文件监听
1
2
1.添加
beforeChildrenChange
beforeChildAddition
beforeChildAddition
beforeChildAddition
childAdded
childAdded
childAdded
childrenChanged
2.删除
beforeChildrenChange
beforeChildRemoval
beforeChildRemoval
beforeChildRemoval
childRemoved
childRemoved
childRemoved
childrenChanged