Intellij Idea插件開發(fā)之創(chuàng)建項(xiàng)目層級的右鍵菜單
在使用Android Studio的過程中,發(fā)現(xiàn)自帶的一些插件無法滿足項(xiàng)目的實(shí)際需要,便著手自己開發(fā)對應(yīng)的插件。下面是我開發(fā)插件過程中的一個記錄,會持續(xù)和大家分享。
分享一:創(chuàng)建Project右鍵菜單
1,按照項(xiàng)目向?qū)б徊揭徊絼?chuàng)建一個Demo項(xiàng)目,就不再介紹了,可以參照這篇文章http://www.dhdzp.com/article/135535.htm
2,創(chuàng)建Action,在plugin配置文件中你會看到
<action id="FirstAction" class="FirstAction" text="FirstAction" description="右鍵Action"> <add-to-group group-id="ProjectViewPopupMenu" anchor="after" relative-to-action="ReplaceInPath"/> </action>

3,運(yùn)行后,IDE會另外開啟一個IDE(由一個類似Genymotion的容器包裹)??葱Ч遣皇呛苁煜?,對,這就是常用Project右鍵菜單:

4,根據(jù)觸發(fā)的文件類型動態(tài)控制Action的隱藏顯示
@Override
public void update(AnActionEvent event) {//根據(jù)擴(kuò)展名是否是jar,顯示隱藏此Action
String extension = getFileExtension(event.getDataContext());
this.getTemplatePresentation().setEnabled(extension != null && "jar".equals(extension));
}
完整代碼:
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.VirtualFile;
/**
* Created by ABC on 16/8/17.
*/
public class FirstAction extends AnAction {
private Project mProject;
@Override
public void actionPerformed(AnActionEvent event) {
mProject = event.getData(PlatformDataKeys.PROJECT);
DataContext dataContext = event.getDataContext();
if ("jar".equals(getFileExtension(dataContext))) {//根據(jù)擴(kuò)展名判定是否進(jìn)行下面的處理
//獲取選中的文件
VirtualFile file = DataKeys.VIRTUAL_FILE.getData(event.getDataContext());
if (file != null) {
Messages.showMessageDialog(mProject, file.getName(), "select file", Messages.getInformationIcon());
}
}
}
@Override
public void update(AnActionEvent event) {
//在Action顯示之前,根據(jù)選中文件擴(kuò)展名判定是否顯示此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();
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家
相關(guān)文章
分布式面試分布式鎖實(shí)現(xiàn)及應(yīng)用場景
這篇文章主要為大家介紹了關(guān)于分布式的面試問題,分布式鎖的實(shí)現(xiàn)及應(yīng)用不同場景下的使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡單實(shí)例
這篇文章主要介紹了Java 實(shí)現(xiàn)隨機(jī)驗(yàn)證碼功能簡單實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-04-04
Netty分布式ByteBuf使用page級別的內(nèi)存分配解析
這篇文章主要介紹了Netty分布式ByteBuf使用page級別的內(nèi)存分配解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Java之NoClassDefFoundError的原因及分析
在Java開發(fā)中,經(jīng)常會遇到ClassNotFoundException和NoClassDefFoundError異常,ClassNotFoundException發(fā)生在編譯時JVM無法找到類,而NoClassDefFoundError則發(fā)生在運(yùn)行時JVM無法加載類,這兩個異常雖然原因相似,但有本質(zhì)區(qū)別2024-09-09
關(guān)于SpringCloud的微服務(wù)結(jié)構(gòu)及微服務(wù)遠(yuǎn)程調(diào)用
Spring Cloud 是一套完整的微服務(wù)解決方案,基于 Spring Boot 框架,準(zhǔn)確的說,它不是一個框架,而是一個大的容器,它將市面上較好的微服務(wù)框架集成進(jìn)來,從而簡化了開發(fā)者的代碼量,需要的朋友可以參考下2023-05-05
Java使用雙異步實(shí)現(xiàn)將Excel的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫
在開發(fā)中,我們經(jīng)常會遇到這樣的需求,將Excel的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫中,這篇文章主要來和大家講講Java如何使用雙異步實(shí)現(xiàn)將Excel的數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫,感興趣的可以了解下2024-01-01

