Eclipse插件开发笔记三:判断项目是否是J2ME项目

我需要达到的目标是:只有在项目是J2ME项目时,才会在popupmenu上出现我的菜单Huayusoft;因此,我需要在plugin.xml中添加条件判断,判断当前选中的是J2ME项目。

 

而判断一个项目是否是J2ME项目,需要eclipseme插件提供支持。Eclipseme插件本身也提供了这个功能。当当前选中的项目是Java项目时,Eclipseme会弹出菜单J2ME-->Convert to J2ME project;当当前选中的项目是J2ME项目时,Eclipseme会弹出菜单J2ME-->Create Package;

 

查看Eclipseme的plugin.xml,发现它使用的popupmenus方式,它的核心在这一句:

<objectState name="nature" value="eclipseme.core.nature"/>

即判断projectnature是否是eclipseme.core.nature;

 

在Eclipse的每个java项目目录下,都有一个.project文件。如果是普通的Java Project,它只有一个nature:

org.eclipse.jdt.core.javanature

不要惊讶,jdt也是插件。

如果是使用eclipseme插件构建的J2ME project,它还会有一个nature:

<nature>eclipseme.core.nature</nature>

如果是使用mtj插件构建的J2ME project,它也会比普通java project多一个nature:

<nature>org.eclipse.mtj.core.nature</nature>

 

从这里也可以看出mtj的命名更标准化了。

 

在Eclipse中,workspace中的project有两种状态:打开和关闭。当project处于打开的状态时,它的.project文件会被解析,并在内存中有对应的对象。这也是plugin.xml的条件判断在弹出popupmenu前能够起作用的原因。

必须要牢记的是,在弹出popupmenu时,特定的eclipse插件是没有导入的,但是plugin.xml是被解析,而且其作用了的。

 

而且我发现,IActionObjectDelegate的selectionChanged是在popupmenu前就会被调用的。但是,它有一个前提条件,就是当前选中的对象是符合plugin.xml中描述的条件的。

 

 

因为eclipseme采用的popupmenu方式,我也改成了popupmenu方式。这种方式和command方式有相同的地方,也有一些差异。不考虑actionsets的方式,是因为这种方式主要用于menu和toolbar。

 

popupmenu方式采用的org.eclipse.ui.popupmenus扩展点。它有一个元素叫objectContribution,类似于command方式的menuContribution;这个Contribution可以理解为归属的意思,其实就是连接。

在objectContribution中有objectid和objectclass元素。

 

这个objectclass就是条件。只有选中的对象满足这个objectclass才会继续下一步。另外,这个adaptable属性也是非常关键的。我的理解是,它应该是一个适配的作用。比如我选中的是IJavaProject,但是我的objectclass是IProject;如果adaptable=true,即允许适配,那么这个条件就满足。

 

popupmenu方式对menu的定义方式和commands方式相同,但是,它没有command,它用的是action。它的响应是IObjectActionDelegate。

 

popupmenu方式还有一个差异的地方时:ISelection的是IProject不是IJavaProject,需要用JavaCore进行转换,这一点要特别注意。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值