分享

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

 江江385 2013-03-22

我需要达到的目标是:只有在项目是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条评论

    发表

    请遵守用户 评论公约

    类似文章 更多