IDEA插件(Android Studio插件)開發示例代碼及bug解決
代碼在actionPerformed
方法中,有個AnActionEvent e
插件開發就是要求我們復寫上述的這個方法即可,在此方法中寫上我們需要處理的相關邏輯
所有的對象都是PsiElement
獲得Project
Project mProject = e.getData(PlatformDataKeys.PROJECT);
判斷擴展名隱藏我們的Action
//在Action顯示之前,根據選中文件擴展名判定是否顯示此Action
String extension = getFileExtension(event.getDataContext());
this.getTemplatePresentation().setEnabled(extension != null && "jar".equals(extension));
public static String getFileExtension(DataContext dataContext) {
VirtualFile file = DataKeys.VIRTUAL_FILE.getData(dataContext);
return file == null ? null : file.getExtension();
}
創建不同的PsiElement
創建對話框
Messages.showMessageDialog("message", "title", Messages.getInformationIcon());
獲得class文件
PsiFile psiFile = e.getData(DataKeys.PSI_FILE);//獲得文件
GlobalSearchScope globalSearchScope = GlobalSearchScope.fileScope(psiFile);
String fullName = psiFile.getName();
String className = fullName.split("\\.")[0];
PsiClass psiClass = PsiShortNamesCache.getInstance(psiFile.getProject()).getClassesByName(className, globalSearchScope)[0];//獲得class文件
通關方法名找到對應java文件中的方法
PsiMethod method = psiClass.findMethodsByName("initView", false)[0];//通過方法名找到方法
獲得方法中的代碼
PsiMethod method = psiClass.findMethodsByName("onCreate", false)[0];//通過方法名找到方法
PsiCodeBlock body = method.getBody();
PsiStatement[] statements = body.getStatements();//這里的PsiStatement數組就是方法中的一行行代碼,通過遍歷就可以找到對應的代碼
for (PsiStatement statement : statements) {
String s = statement.getText();//獲得代碼內容
}
寫文件
WriteCommandAction.runWriteCommandAction(psiClass.getProject(), new Runnable() {
@Override
public void run() {
//寫文件操作
//delete,replace,add...
}
});
獲得編輯器
Editor editor = e.getData(PlatformDataKeys.EDITOR);
參考
開發后續使用出現的bug
1、Plugin 'Plugin display name here' is incompatible with this installation
寫好插件后,導出插件到本地,然后使用Android Studio安裝插件,提示“Plugin 'Plugin display name here' is incompatible with this installation”,意思是版本不兼容;
解決辦法是打開插件工程的plugin.xml文件,修改版本號
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<!--這句話的意思是最低支持的ide版本,查看當前的Android Studio版本號修改-->
<idea-version since-build="171.0"/>
IDEA的插件支持的版本最低為173,而我的Android Studio的內置IDEA的版本號為171,所以安裝的時候出現了錯誤提示,也就是不兼容。
所以,我們查看Android Studio的版本號(help->about)
修改插件中的plugin.xml中的版本號即可解決問題
2.使用插件沒有效果
原因:原本有個插件出問題了,把自己插件的錯誤提示給覆蓋了,所以無法知道自己的插件出現了什么問題
剛開始使用插件的時候,發現沒有效果,右下角出現了個錯誤提示,說我當前的某個插件有錯誤(不是我開發的那個插件)
然后我就把那個插件更新了,再次使用我的插件,右下角出現的錯誤提示終於是我的了
3、java.lang.NullPointerException
使用插件功能的時候,發現右下角出現錯誤,
java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionName
寫好插件,導出插件到本地,然后使用Android Studio安裝插件,提示“java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionName”
從參考鏈接可知,具體原因不明
但解決辦法是,將所有的Action及其他Java文件都放到包下,而不是直接放在src目錄下,也就是在src在新建個包,把所有的java文件放入即可解決問題