IDEA插件(Android Studio插件)開發示例代碼及bug解決

IDEA插件(Android Studio插件)開發示例代碼及bug解決

代碼在actionPerformed方法中,有個AnActionEvent e 插件開發就是要求咱們複寫上述的這個方法便可,在此方法中寫上咱們須要處理的相關邏輯 全部的對象都是PsiElementhtml

得到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

參考連接java

建立對話框

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);

參考

官方開發文檔api

開發後續使用出現的bug

一、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中的版本號便可解決問題 ide

2.使用插件沒有效果

緣由:本來有個插件出問題了,把本身插件的錯誤提示給覆蓋了,因此沒法知道本身的插件出現了什麼問題 剛開始使用插件的時候,發現沒有效果,右下角出現了個錯誤提示,說我當前的某個插件有錯誤(不是我開發的那個插件) 而後我就把那個插件更新了,再次使用個人插件,右下角出現的錯誤提示終因而個人了ui

三、java.lang.NullPointerException

使用插件功能的時候,發現右下角出現錯誤, java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionNamethis

寫好插件,導出插件到本地,而後使用Android Studio安裝插件,提示「java.lang.NullPointerException at com.intellij.ide.SystemHealthMonitor.getActionName」 從參考連接可知,具體緣由不明 但解決辦法是,將全部的Action及其餘Java文件都放到包下,而不是直接放在src目錄下,也就是在src在新建個包,把全部的java文件放入便可解決問題idea

相關文章
相關標籤/搜索