参考:http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2Fworkbench_cmd_menus.htm+

接着上一篇的内容,上一篇中演示了如何添加一个右键菜单,而上次添加的菜单时在每个元素上点击右键都会弹出菜单的,而我们做生成代码工具时一般是只需要在.java 的文件上进行操作,也就是在.java 文件上右击时才应该只显示生成代码的菜单,其他的地方不应该显示的。

在eclipse插件开发过程中,在处理什么时候显示、什么时候启用、什么时候激活操作时使用一组 Core Expressions (核心表达式) 来进行控制,核心表达式也可以在其他地方使用,详情参考 eclipse 插件开发指南。

在开发插件过程中,使用表达式时通过在plugin.xml文件中进行声明使用,在某些服务中也可以通过编程的方式使用。在使用中核心表达式时,以子元素的形式进行声明,即每声明一个元素,都以子节点的形式展现。

打开上次创建的插件工程的plugin.xml文件,切换到plugin.xml标签页,现在有以下代码:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            label="Sample Action Set"
            visible="true"
            id="TestPlugin.actionSet">
         <menu
               label="Sample &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;Sample Action"
               icon="icons/sample.gif"
               class="testplugin.actions.SampleAction"
               tooltip="Hello, Eclipse world"
               menubarPath="sampleMenu/sampleGroup"
               toolbarPath="sampleGroup"
               id="testplugin.actions.SampleAction">
         </action>
      </actionSet>
   </extension>
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="com.yunzaipiao.menu.command"
            name="GenerateFormCode">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="true"
            locationURI="popup:org.eclipse.ui.popup.any?after=additions">
         <command
               commandId="com.yunzaipiao.menu.command"
               icon="icons/photo.jpg"
               label="生成代码"
               style="push">
         </command>
      </menuContribution>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="com.yunzaipiao.menu.handler.SampleHandler"
            commandId="com.yunzaipiao.menu.command">
      </handler>
   </extension>
</plugin>

在生成代码的command中添加以下代码,

visibleWhen : 该节点的出现,处理当前菜单什么时候可以显示,在该节点下处理选中元素时默认是一个集合,可以使用<iterator> 进行迭代,通过<count>进行计数。

with:声明一个变量,默认为选中操作,这儿是在右键菜单中添加菜单,所以这儿也可以不添加with节点,因为默认就是该变量

iterate:迭代当前元素,如果不设置ifEmpty属性,则在集合为空时也返回true

adapt:判断选定的对象是否为指定的类型

test:添加测试条件,这里根据org.eclipse.core.resources中的一个属性测试IResource的一个属性

添加完成后的代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>

   <extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            label="Sample Action Set"
            visible="true"
            id="TestPlugin.actionSet">
         <menu
               label="Sample &amp;Menu"
               id="sampleMenu">
            <separator
                  name="sampleGroup">
            </separator>
         </menu>
         <action
               label="&amp;Sample Action"
               icon="icons/sample.gif"
               class="testplugin.actions.SampleAction"
               tooltip="Hello, Eclipse world"
               menubarPath="sampleMenu/sampleGroup"
               toolbarPath="sampleGroup"
               id="testplugin.actions.SampleAction">
         </action>
      </actionSet>
   </extension>
   <extension
         point="org.eclipse.ui.commands">
      <command
            id="com.yunzaipiao.menu.command"
            name="GenerateFormCode">
      </command>
   </extension>
   <extension
         point="org.eclipse.ui.menus">
      <menuContribution
            allPopups="true"
            locationURI="popup:org.eclipse.ui.popup.any?after=additions">
         <command
               commandId="com.yunzaipiao.menu.command"
               icon="icons/photo.jpg"
               label="生成代码"
               style="push">
               <visibleWhen
                     checkEnabled="false">
                  <with
                        variable="selection">
                        <iterate ifEmpty="false"> <!-- 如果不设置ifEmpty属性,当没有选择任何元素时,改表达式返回true -->
                        <adapt
                               type="org.eclipse.core.resources.IResource">
                               <test
                                     property="org.eclipse.core.resources.name" value="*.java">
                               </test>
                        </adapt>
                        </iterate>
                  </with>
               </visibleWhen>
         </command>
      </menuContribution>
   </extension>
   <extension
         point="org.eclipse.ui.handlers">
      <handler
            class="com.yunzaipiao.menu.handler.SampleHandler"
            commandId="com.yunzaipiao.menu.command">
      </handler>
   </extension>

</plugin>

点击查看效果:

点击非java文件:

点击java文件:

由于水平有限,有些地方解释有误,请回复改正且谅解!

eclipse 插件编写(三)的更多相关文章

  1. eclipse 插件编写(四)

    前言 前面几篇文章讲了下如果编写简单的eclipse插件,如创建插件项目.编写右键弹出菜单等功能,接下来主要写一下如何生成代码的功能,这一片的功能跟插件本身的编写关联不太大,主要处理插件之后的业务内容 ...

  2. eclipse 插件编写(二)

    上篇文章简单写了下怎么新建一个eclipse插件工程,这次写一下怎么在上次的工程中添加几个菜单,如菜单栏菜单.工具栏菜单.右键菜单等. 创建一个完成的菜单需要了解三个扩展点,即menus.comman ...

  3. eclipse 插件编写(一)

    由于项目开发进程中有一些重复性的代码进行编写,没有任何业务逻辑,粘贴复制又很麻烦且容易出错,故想起做一个eclipse插件来满足一下自己的工作需要,同时记录一下,以供以后参考与共同学习.本文主要讲解一 ...

  4. eclipse安装插件的三种方式

    方式一:拷贝安装方式 将下载的插件文件中的plugins 和 features 文件夹直接天骄到eclipse中的plugins 和 features 文件夹中. 方式二:update安装方式 Hel ...

  5. Gradle 1.12用户指南翻译——第三十八章. Eclipse 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  6. Eclipse中安装插件的三种方式

    转载自:http://www.cnblogs.com/lcgustc/archive/2013/01/03/2843496.html Eclipse也用了很久,但是都没有怎么去研究过怎么安装插件,今天 ...

  7. Eclipse 中安装 CDT 插件编写 C/C++

    使用到的软件 1.Eclipse 开发工具 2.MinGW 编译器 一.Eclipse 中安装 CDT 插件 打开 Eclipse 插件市场 搜索 CDT,并找到如下的插件.插件的版本名字可能不太一样 ...

  8. Hadoop2 自己动手编译Hadoop的eclipse插件

    前言:       毕业两年了,之前的工作一直没有接触过大数据的东西,对hadoop等比较陌生,所以最近开始学习了.对于我这样第一次学的人,过程还是充满了很多疑惑和不解的,不过我采取的策略是还是先让环 ...

  9. 阿里p3c(代码规范,eclipse插件、模版,idea插件)

    阿里p3c 一.说明 代码规范检查插件p3c,是根据<阿里巴巴Java开发手册>转化而成的自动化插件. (高级黑:P-3C“Orion”,反潜巡逻机,阿里大概取p3c先进,监测,发现潜在问 ...

随机推荐

  1. Android View框架的measure机制

    概述 Android中View框架的工作机制中,主要有三个过程: 1.View树的測量(measure)Android View框架的measure机制 2.View树的布局(layout) Andr ...

  2. php课程 6-21 HTML标签相关函数

    php课程 6-21 HTML标签相关函数 一.总结 一句话总结:1.存入数据库的html标签代码:$info=addslashes(htmlspecialchars($_POST['info'])) ...

  3. Sqlplus的一般操作

    Sqlplus一些必要操作指令 1, 登陆sys 用户,需要加上 as sysdba Connect sys as sysdba; Input your password; Connected; 2, ...

  4. 微信小程序开发demo-地图定位

    要求要完成的功能: 1.要完成的要点是城市定位. 2.就是切换城市. 首页我们先参照微信小程序开放的官方文档找到: 在这里我们可以找到”当前位置经纬度“ getLocation: function ( ...

  5. Struts2——(3)ValueStack(值栈)

    一.ValueStack 主要用于存储请求相关信息,内部结构如下 root区:被称为根存储区,是一个栈结构,栈顶元素为当前请求的Action对象. context区:被称为变量存储区,是一个Map结构 ...

  6. Android新闻案例clientserver达到,完全自己的新闻节目平台

    一.建设新闻资料库 例如,下面的脚本代码:(正在使用mysql5.0 数据库) SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_z ...

  7. js小贴士

    1.在js中 定义方法 方法名第一个字母小写.如果是定义类 则第一个字母大学 2.如果想在a标签中点击 触发js方法 而不跳转页面 可以使用类似   <a href="javascri ...

  8. 创建可按比例调整的布局的 Windows 窗体

    能够正确调整大小的窗体可以提高您的用户界面的易用性. 此演练演示了如何创建当用户调整窗体大小时按比例调整的布局. 您将使用 TableLayoutPanel 控件实现一个接收联系人信息的数据输入窗体. ...

  9. ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core Razor 视图导入 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core Razor 视图导入 上一章节我们介绍了视图起始页,学习 ...

  10. easyui的datebox最简单的方法来格式化

    看了网上有很多解决方案,我也写了一个比较简单的方法. 实现easyui的datebox格式化. 效果例如以下.用"++"隔开,看你喜欢用什么都能够. 1.html <span ...