站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Eclipse 专题Eclipse JUnit Plugin -- 2.创建一个执行测试的菜单

Eclipse JUnit Plugin -- 2.创建一个执行测试的菜单

摘要: Eclipse JUnit Plugin -- 2.创建一个执行测试的菜单

Eclipse JUnit Plugin

(2.创建一个执行测试的菜单)

By www.coolhou.com 灰石

( http://blog.csdn.net/lmstone )

LimingMail1998@yahoo.com.cn )

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BACKGROUND: white; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid #999999 .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid #999999; mso-border-insidev: .5pt solid #999999" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: #999999 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #999999 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #999999 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: #999999 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid #999999 .5pt" valign="top" width="568">

<formulas></formulas>

文档描述:

由于工作原因,也是本人的兴趣,接触到Eclipse的插件编写工作。现将一些学习笔记和心德共享出来,同大家分享。由于本人对写作向来没什么天赋(上学时,语文一直在及格与不及格的边缘徘徊),由什么错别字之类的大家谅解。对于技术上的不同见解和看法请大家讨论。

本文并非全部原创,所描述的JUnit Plugin是引用《Contributing to Eclipse》一书中的内容,文章的内容加入我本人的一些理解,所以有些地方加入了一些扩展和改变。此文算是一个读书笔书吧。

文档经历:

1. 2005-10-26 创建一个执行测试的菜单项

2. 2005-10-27 创建一个执行测试的菜单

</td></tr></table>

导航

导航

2. 创建一个执行测试的菜单

2.1. 我们的计划

2.2. 要实现的功能

2.3. 步骤

2.3.1. 修改plugin.xml

2.3.2. RunTestAction.java

2.4. 回顾

2.5. 前行的路标

2. 创建一个执行测试的菜单

2.1. 我们的计划

2.2. 要实现的功能

2.3. 步骤

2.3.1. 修改plugin.xml

2.3.2. RunTestAction.java

2.4. 回顾

2.5. 前行的路标

1. 创建一个执行测试的菜单

1.1. 我们的计划

l 工作台如何懒式创建我们插件中用到的Action对象

l Action对象如何工作

l 插件依赖关系和构建classpath的管理

1.2. 要实现的功能

n 我们要定义一个类,它针对选中的java为型,运行其中的测试方法,并显示结果

1.3. 步骤

1.3.1. 修改plugin.xml

当选择我们的菜单项时,应该调用JUnit插件中哪个对象?需要在清单文件中指定要被调用的对象所属的类。

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

id="com.coolhou.student.eclipse.junit.runtest"

objectClass="org.eclipse.jdt.core.IType"

>

id="com.coolhou.student.eclipse.junit.runtest.action"

label="运行测试"

enablesFor="1"

class="com.coolhou.student.eclipse.junit.action.RunTestAction"

>

</td></tr></table>

1.3.2. RunTestAction.java

1.3.2.1. 建立RunTestAction.java文件,并添加IObjectActionDelegate接口

为工作台里的“对象”元素增加一个动作时,必须实现IObjectActionDelegate接口

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public class RunTestAction implements IObjectActionDelegate{

}

</td></tr></table>

1.3.2.2. 实现IObjectActionDelegate

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public void setActivePart(IAction action, IWorkbenchPart targetPart) {

}

public void run(IAction action) {

}

public void selectionChanged(IAction action, ISelection selection) {

}

</td></tr></table>

1.3.2.3. 保存选中的对象

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

ISelection selection;

/*

* 把被选中的元素保存在selectionChanged变量中,因为run()方法不接受任何参数

* 无法直接将选中的元素传递给该方法

*/

public void selectionChanged(IAction action, ISelection selection) {

this.selection = selection;

}

</td></tr></table>

1.3.2.4. 编写run()方法

下面,我们要编写run()方法。在这里,需要引用IType接口,这个接口在Java Core插件(org.eclipse.jdt.core)中定义的,所以我们必须把这个插件加入到我们的“必需插件”列表中。编辑plugin.xml,找到元素,增加org.eclipse.jdt.core的描述。

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

</td></tr></table>

run()方法

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public void run(IAction action) {

if (!(selection instanceof IStructuredSelection))

return;

IStructuredSelection structured = (IStructuredSelection) selection;

IType type = (IType) structured.getFirstElement();

}

</td></tr></table>

/**

* 只有当被选中的是一个IStructuredSelection对象,也就是说,是一个含有

* 多层结构的界面元,而不是文本之类的元时,我们的run方法才开如工作。

*/

表:2.1 代码说明

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="HEIGHT: 21.9pt; mso-yfti-irow: 0"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 21.9pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="343">

run()

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 21.9pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="225">

描述

</td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

if (!(selection instanceof IStructuredSelection))

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

只有当被选中的是一个IStructuredSelection对象,也就是说,是一个含有多层结构的界面元,而不是文本之类的元时,我们的run方法才开如工作。

</td></tr><tr style="mso-yfti-irow: 2"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

IStructuredSelection structured = (IStructuredSelection) selection;

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

获取被保存的元素

</td></tr><tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

IType type = (IType) structured.getFirstElement();

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

从被选中的元素取出一个IType对象。在这里可以放心,因为这里取出的一定是IType对象,因为清单文件中有这样一行:objectClass="org.eclipse.jdt.core.IType"

</td></tr></table>

1.3.2.5. 运行插件

现在插件可以运行了,但还是什么也没有,只是不弹出警告了,大家别急,待续。

1.4. 回顾

l 我们看到,在实际选中菜单之前,RunAction不会被创建

l 在被选中的元素信息被传递给了selectionChanged()方法,然后在run()方法中被使用。

1.5. 前行的路标

l 动态改变菜单项的状态和标签,在插件被加载之后,你就可以在代码中动态更新菜单的状态(是否林用)和标签。

l 添加一个子菜单,在其中添加一组动作,你可以首先在清单文件中声明一个带有路径信息的菜单,然后在每个动作声明中使用这个路径。

1. 创建一个执行测试的菜单

1.1. 我们的计划

l 工作台如何懒式创建我们插件中用到的Action对象

l Action对象如何工作

l 插件依赖关系和构建classpath的管理

1.2. 要实现的功能

n 我们要定义一个类,它针对选中的java为型,运行其中的测试方法,并显示结果

1.3. 步骤

1.3.1. 修改plugin.xml

当选择我们的菜单项时,应该调用JUnit插件中哪个对象?需要在清单文件中指定要被调用的对象所属的类。

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

id="com.coolhou.student.eclipse.junit.runtest"

objectClass="org.eclipse.jdt.core.IType"

>

id="com.coolhou.student.eclipse.junit.runtest.action"

label="运行测试"

enablesFor="1"

class="com.coolhou.student.eclipse.junit.action.RunTestAction"

>

</td></tr></table>

1.3.2. RunTestAction.java

1.3.2.1. 建立RunTestAction.java文件,并添加IObjectActionDelegate接口

为工作台里的“对象”元素增加一个动作时,必须实现IObjectActionDelegate接口

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public class RunTestAction implements IObjectActionDelegate{

}

</td></tr></table>

1.3.2.2. 实现IObjectActionDelegate

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public void setActivePart(IAction action, IWorkbenchPart targetPart) {

}

public void run(IAction action) {

}

public void selectionChanged(IAction action, ISelection selection) {

}

</td></tr></table>

1.3.2.3. 保存选中的对象

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

ISelection selection;

/*

* 把被选中的元素保存在selectionChanged变量中,因为run()方法不接受任何参数

* 无法直接将选中的元素传递给该方法

*/

public void selectionChanged(IAction action, ISelection selection) {

this.selection = selection;

}

</td></tr></table>

1.3.2.4. 编写run()方法

下面,我们要编写run()方法。在这里,需要引用IType接口,这个接口在Java Core插件(org.eclipse.jdt.core)中定义的,所以我们必须把这个插件加入到我们的“必需插件”列表中。编辑plugin.xml,找到元素,增加org.eclipse.jdt.core的描述。

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

</td></tr></table>

run()方法

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="mso-yfti-irow: 0; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 426.1pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="568">

public void run(IAction action) {

if (!(selection instanceof IStructuredSelection))

return;

IStructuredSelection structured = (IStructuredSelection) selection;

IType type = (IType) structured.getFirstElement();

}

</td></tr></table>

/**

* 只有当被选中的是一个IStructuredSelection对象,也就是说,是一个含有

* 多层结构的界面元,而不是文本之类的元时,我们的run方法才开如工作。

*/

表:2.1 代码说明

<table class="MsoTableGrid" style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; BORDER-BOTTOM: medium none; BORDER-COLLAPSE: collapse; mso-border-alt: solid windowtext .5pt; mso-yfti-tbllook: 480; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-border-insideh: .5pt solid windowtext; mso-border-insidev: .5pt solid windowtext" cellspacing="0" cellpadding="0" border="1"><tr style="HEIGHT: 21.9pt; mso-yfti-irow: 0"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 21.9pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt" valign="top" width="343">

run()

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: windowtext 1pt solid; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; HEIGHT: 21.9pt; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt" valign="top" width="225">

描述

</td></tr><tr style="mso-yfti-irow: 1"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

if (!(selection instanceof IStructuredSelection))

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

只有当被选中的是一个IStructuredSelection对象,也就是说,是一个含有多层结构的界面元,而不是文本之类的元时,我们的run方法才开如工作。

</td></tr><tr style="mso-yfti-irow: 2"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

IStructuredSelection structured = (IStructuredSelection) selection;

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

获取被保存的元素

</td></tr><tr style="mso-yfti-irow: 3; mso-yfti-lastrow: yes"><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: windowtext 1pt solid; WIDTH: 257.4pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="343">

IType type = (IType) structured.getFirstElement();

</td><td style="BORDER-RIGHT: windowtext 1pt solid; PADDING-RIGHT: 5.4pt; BORDER-TOP: #d4d0c8; PADDING-LEFT: 5.4pt; PADDING-BOTTOM: 0cm; BORDER-LEFT: #d4d0c8; WIDTH: 168.7pt; PADDING-TOP: 0cm; BORDER-BOTTOM: windowtext 1pt solid; BACKGROUND-COLOR: transparent; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; mso-border-top-alt: solid windowtext .5pt" valign="top" width="225">

从被选中的元素取出一个IType对象。在这里可以放心,因为这里取出的一定是IType对象,因为清单文件中有这样一行:objectClass="org.eclipse.jdt.core.IType"

</td></tr></table>

1.3.2.5. 运行插件

现在插件可以运行了,但还是什么也没有,只是不弹出警告了,大家别急,待续。

1.4. 回顾

l 我们看到,在实际选中菜单之前,RunAction不会被创建

l 在被选中的元素信息被传递给了selectionChanged()方法,然后在run()方法中被使用。

1.5. 前行的路标

l 动态改变菜单项的状态和标签,在插件被加载之后,你就可以在代码中动态更新菜单的状态(是否林用)和标签。

l 添加一个子菜单,在其中添加一组动作,你可以首先在清单文件中声明一个带有路径信息的菜单,然后在每个动作声明中使用这个路径。



↑返回目录
前一篇: Eclipse和jbuilder开发全接触
后一篇: Eclipse JUnit Plugin -- 1.创建一个执行测试的菜单项