Android 工具開發-基於Intellij (零)番外

 

 Intellij 插件開發-AndroidStudio (零)番外

Intellij 插件開發-AndroidStudio(一)--環境構建

 Intellij 插件開發-AndroidStudio(二)-文件操作

 Intellij 插件開發-AndroidStudio(三)-寫入生成代碼

Intellij 插件開發-AndroidStudio(四)-添加類和模板

打個廣告,自己寫的代碼生成插件,自動生成很多實用代碼:

https://github.com/JianLin-Shen/MZSluggard-code

前言:

主要記錄一些開發中遇到的異常處理,和特殊用法彙總。

1、類插入異常

Must not change PSI outside command or undo-transparent action.

在插件中可能需要向PsiFile中寫入一些字段或者方法(這裏是寫入後需要展示,而不是類似PsiAugmentProvider生成的快照),

這裏需要注意的是,我們拿到新生成的psiClass以後,不能使用psiClass.add(field)添加代碼,要調用WriteCommandAction.runWriteCommandAction寫代碼,否則會拋出異常:

Must not change PSI outside command or undo-transparent action.

這時因爲Intellij Platform不允許在主線程中進行實時的文件寫入,而需要通過一個異步任務來進行。這時需要調用WriteCommandAction來寫相關的內容,如下:

WriteCommandAction.runWriteCommandAction(Project, new Runnable() {
      @Override
      public void run() {
        //do something
      }
});

在run方法中也是調用psiClass.add(field)等這類方法,只是需要使用WriteCommandAction.runWriteCommandAction包一層。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章