范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

开发IntellijIdea插件

  介绍
  在过去几年中,JetBrains的IntelliJ很快成为Java开发人员的顶级IDE。使IntelliJ对Java开发人员如此有吸引力的一个特性是使用插件扩展和创建新功能的能力。在本教程中,我们将介绍如何编写IntelliJ插件来演示扩展IDE的几种方法。
  虽然本文主要关注IntelliJ插件,但所有JetBrains IDE都共享公共代码。因此,这里使用的许多技术可以应用于JetBrain的其他IDE,如PyCharm、RubyMine等。插件功能
  Intellij插件按照功能可分四类:自定义语言 :针对不同语言,能够编写、解释和编译 框架:支持第三方框架,如Spring工具:与外部工具(如Gradle)集成用户界面附加组件:新菜单项、工具窗口和按钮等创建一个插件项目
  使用 Plugin DevKit(https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/using_dev_kit.html )来创建工程,DevKit提供了自定义SDK类型和一组用于在IDE中构建插件的操作创建工程
  在Intellij的菜单栏,选择 File | New | Project,在New Project 框里选择 IntelliJ PLatform Plugin
  New Project
  在project SDK选项框选择合适的Intellij SDK,然后下一步,填上project name,完成,就创建好一个Intellij plugin 工程了。实现一个自定义的Plugin
  创建自定义Action
  如果需要了解更多action 相关的东西,请访问官方文档 https://www.jetbrains.org/intellij/sdk/docs/basics/action_system.html
  创建自定义的action,需要继承抽象类AnAction,并且需要重写方法AnAction.update()  和AnAction.actionPerformed() :update()方法里面实现开启和禁用事件逻辑actionPerformed()方法里面实现我们需要做的具体业务逻辑package com.test.plugin;  import com.intellij.ide.BrowserUtil; import com.intellij.lang.Language; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile;  import java.io.UnsupportedEncodingException; import java.net.URLEncoder;  public class SearchBaiduAction extends AnAction {     /**      * Only make this action visible when text is selected.      * 

* The update method below is only called periodically so need * to be careful to check for selected text * https://jetbrains.org/intellij/sdk/docs/basics/action_system.html#overriding-the-anactionupdate-method * * @param e */ @Override public void update(AnActionEvent e) { // Get required data keys final Project project = e.getProject(); final Editor editor = e.getData(CommonDataKeys.EDITOR); // Set visibility only in case of existing project and editor and if a selection exists e.getPresentation().setEnabledAndVisible(project != null && editor != null && editor.getSelectionModel().hasSelection()); } @Override public void actionPerformed(AnActionEvent e) { final String selectedCode = getSelectedCode(e); final String languageTag = getLanguageTag(e); String url = getUrl(languageTag, selectedCode); if (url != null) { BrowserUtil.browse(url); } } private String getSelectedCode(AnActionEvent e) { final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR); return editor.getSelectionModel().getSelectedText(); } private String getLanguageTag(AnActionEvent e) { String languageTag = ""; PsiFile file = e.getData(CommonDataKeys.PSI_FILE); if (file != null) { Language lang =file.getLanguage(); languageTag = lang != null ? lang.getDisplayName().toLowerCase() : null; } return languageTag; } private String getUrl(String languageTag, String selectedCode) { try { StringBuilder sb = new StringBuilder("https://www.baidu.com/s?wd="); if (languageTag != null) { sb.append(" " + URLEncoder.encode(languageTag, "UTF-8")); } sb.append(URLEncoder.encode(selectedCode, "UTF-8")); return sb.toString(); } catch (UnsupportedEncodingException unsupportedEncodingException) { unsupportedEncodingException.printStackTrace(); return null; } } }   如果action被禁用了,那么actionPerformed方法不会被执行   actionPerformed()方法 @Override public void actionPerformed(AnActionEvent e) { final String selectedCode = getSelectedCode(e); final String languageTag = getLanguageTag(e); String url = getUrl(languageTag, selectedCode); if (url != null) { BrowserUtil.browse(url); } }   在该方法中,我们通过getSelectedCode()方法拿到用户选择的文本,通过刚发getLanguageTag()获取当前文本语言,比如java,js,go等。然后通过getURL()方法组装url,最后通过BrowserUtil.browse(url) 打开浏览器,并访问给的url。在我们demo里面,我们将用选择的文本在baidu里面进行搜索。   获取Editor中选择的文本   你需要使用SelectionModel对象获取选择的文本private String getSelectedCode(AnActionEvent e) { final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR); return editor.getSelectionModel().getSelectedText(); }   获取当前文件的语言   从event中通过CommonDataKeys.PSI_FILE key获取到PsiFile对象,然后再从PsiFile中获取到Language。 private String getLanguageTag(AnActionEvent e) { String languageTag = ""; PsiFile file = e.getData(CommonDataKeys.PSI_FILE); if (file != null) { Language lang =file.getLanguage(); languageTag = lang != null ? lang.getDisplayName().toLowerCase() : null; } return languageTag; }注册事件   有两种方式可以注册我们自定义的事件:1. plugin.xml中配置,2.代码中注册   在plugin.xml文件中注册事件:   更多事件注册信息请查看官方文档 https://plugins.jetbrains.com/docs/intellij/basic-action-system.html?from=jetbrains.org#registering-actions-in-pluginxml运行插件   在Idea中运行或者debug插件是非常简单的一件事   配置   运行   结果


电动牙刷真的比普通牙刷好吗?我早就使用电动牙刷的刷牙了,要说电动牙刷的效率,的确比手动牙刷要高一些,因为它的震动频率很快,能够起到清除牙齿污垢的良好效果,建议大家可以买一个试试,我的感觉效果很好,我买的电动牙近期花呗普遍被降到1000,信用分800多也躺枪,为什么?我也变一千了这是在变相让我们不要使用大背景应该是支付宝上市失败,国家监管严格,杠杆不好用了对一些支付宝系统评估负债高的客户,未来可能存在逾期风险的就给你降额了!支付宝凉了吧支付宝里装修怎么在网络上推广?不知道楼主平时都是怎么进行网络推广的,但作为家居装饰行业进行网络推广的方式有很多种,其推广效果也大相径庭了,做装修在网络上推广首先要明白自己的潜在客户类型地域网络习惯这些用户刻画印你不买小米手机的原因是什么?感谢您的阅读!我不买小米手机的原因是什么?其实之前我确实没怎么使用过小米手机,包括现在我的主力手机也不是小米手机。不过我第1次去抢购小米手机是在小米手机刚发布的时候,那时候的小米手消费全返是一个怎样的模式?消费全返说法其实容易引起人们的误解,严格的说法应该是消费返还,它实际上是由著名的经济学家陈瑜教授在消费经济学一书中率先提出的一种理论,这个理论原理如下在几千年的历史过程中,由于生产Linux系统安装VNC的过程这篇文章主要介绍Linux系统安装VNC的过程,在日常操作中,相信很多人在Linux系统安装VNC的过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答前微软副总裁姚麒加入小冰公司将担任首席技术官品玩10月8日讯,据钛媒体报道,前微软副总裁姚麒加入小冰公司,就任首席技术官一职。据悉,姚麒将带领小冰技术团队,以自然语言处理为基础,推动完备迭代的人工智能小冰框架发展,扩大小冰在Facebook的隐私泄露事件之下,DID或许值得我们予以关注免责声明本文旨在传递更多市场信息,不构成任何投资建议。文章仅代表作者观点,不代表火星财经官方立场。小编记得关注哦来源白话区块链10月4日晚上,FacebookInstagram和W基于ZabbixGrafana的IT系统运维管理平台(医疗教育等行业)平台介绍1基于Zabbix建立企业级LinuxAixWindowsServer服务器的监控,监控服务器的运行内存CPU磁盘IO等基本情况,建立企业主机群管理。主机群组2基于Zabb如何实现全焦段高清影像?揭秘荣耀Magic3Pro多主摄融合手机是我们普通人记录分享生活最重要的载体,影像功能也无疑成为如今高端智能手机的必争之地,高像素大底多摄计算摄影等名词层出不穷。其中,多摄像头能够覆盖更多的焦段,帮助我们拍得更广或更程序员经典面试题并发,容易带来哪些问题?编程对于很多人来说,还是比较好上手的。当你学会了一门语言,可以编写一些程序了,很快就会遇到一道坎,并发编程,单线程下好好跑着的程序,怎么就运行异常了?怎么就得不到期望的结果。在面试
俄罗斯Tinkoff银行推出TinkoffPay即时支付服务据塔斯社5月23日报道,俄罗斯Tinkoff银行推出了TinkoffPay即时支付服务,该服务将允许客户在线上和线下商店在线支付商品和服务,无需输入卡的详细信息。图片来自塔斯社据悉Meta首席执行官扎克伯格因参与数据泄露决策遭起诉据央视新闻,当地时间5月23日,美国社交媒体平台脸书的母公司Meta首席执行官马克。扎克伯格被美国华盛顿特区总检察长卡尔。拉辛起诉,拉辛指控扎克伯格直接参与了导致与剑桥分析公司相关新材料突破锂离子电池瓶颈6分钟充电60来源科学网为缩短电动汽车充电时间,科学家们一直在积极寻找新方案。近日,中国科学技术大学俞书宏院士团队与姚宏斌倪勇教授团队合作,致力于解决锂离子电池高能量密度与快充性能之间的矛盾,提技术GoogleMap干掉倾斜摄影了?相信这两天大家朋友圈都被GoogleMap新功能演示刷屏了,视频中介绍说GoogleMap将在一些城市实现实景渲染,在手机中能够就从不同视角能逼真地浏览城市场景,甚至还能实现从室外数字技术赋予乡村振兴新动能工业品下乡,在家门口签收新型生产工具渔场信息上云,海上养殖有了新方式电商快速发展,农产品源源不断出村进城多地着力探索数字乡村建设,对采购生产销售等环节进行数字化改造,培育新业态新模家庭拖地机哪种好用,追觅智能洗地机拖吸一体拖地机值得购买吗追觅智能洗地机拖吸一体拖地机还是不错的,非常好用,可参考下面对追觅智能洗地机试用点评和感受。关注洗地机很久了,在很多品牌之间摇不定,经过对比最终选择了这款追觅H12。家里有只小奶猫创新驱动中国家电全球崛起京东家电携厂商共推产业高质量发展近日,中央电视台焦点访谈栏目以领跑的密码中国家电让家更美好为主题,聚焦报道了中国家电行业四十多年发展历程。讲述了中国家电在国际化市场化的竞争中不断发展自身,同时为人民生活提供便利和小米一季度亏损5。3亿元澎湃财讯5月19日,小米集团公布2022年第一季度业绩。第一季度总营收734亿元,预估725。2亿元,同比下滑4。6亏损5。3亿元,去年同期盈利77。89亿元,调整后净利润29亿元周延礼5G为金融保险高质量发展提供新机遇5G如何赋能金融保险业?近日,2022世界电信日大会主题活动5G智慧金融论坛以线上方式举行。全国政协经济委员会委员,原中国保监会党委副书记副主席周延礼发表5G金融保险高质量发展的新港科大研水凝胶配方杀灭奥密克戎已在公屋试用(抗击新冠肺炎)港科大研水凝胶配方杀灭奥密克戎已在公屋试用中新社香港5月19日电(记者韩星童)香港科技大学(科大)19日公布,科大研究团队近日研发出一种新型水凝胶气味控制水凝胶(M井松智能核心设备自研自产AGV产品竞争力突出本报记者黄群安徽又一家科创板公司即将挂牌。目前,井松智能IPO网下路演和投资者在线提交承诺函及相关核查材料已经结束,5月20日开始进行初步询价。招股书显示,公司是一家智能仓储物流设