分享
 
 
 

Eclipse Extract Method 方法实现 (一)

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

Eclipse Extract Method 方法实现 (一)

摘要:

为了我的com.jet.anySqlRun插件的Parse Code部分进行了一点技术准备(参看Eclipse 插件开发

――我的计划 一文)。分析Eclipse Extract Method的实现,为我所用。

在开始之前我假设大家都知道Extract Method是怎么回事,不过真的不明白的话也没有关系。打开《重构》或Google一下就好。不过《重构》可能会更好一些。为什么呢?我个人认为就好在一句话:Extract Method(110)最大的困难就是处理局部变量,而临时变量则是其中一个主要的困难的源头。

The biggest problem with ExtractMethod is dealing with local variables, and temps are one of the main sources

of this issue.

这句话为我指明了分析Extract Method部分的重点。关于Eclipse

JDT这部分的实现也是我最关心的。好了,下面我就把我的分析过程分享给大家。

要分析一个功能当然是从他的操作界面入手了。用户是通过一个什么样的步骤可以完成一个Extract Method的动作呢(也许你已经很熟了,但是我还是要说一下:))?

这个是用户的操作步骤。

下面就说说Eclipse怎样为我们提供这样的服务。

1.

OP

1这是Java Editor提供的。这个不是我们关心的重点。就放他一马吧。

2.

OP2

Invoke Extract Method Function。Eclipse要提供接口来我们才能Invoke 这个Function。Eclipse是如何提供的呢。目前我还不知道是那个插件实现了Extract Method的功能,我就只好去撞大运了。找出源码来,搜索包含“ExtractMethod”字样的文件。搜索结果如下:

运气正的还不坏,发现唯一的plugin.xml。其实我只要搜plugin.xml就可以了,土了一把。

打开一看:

<action

definitionId="org.eclipse.jdt.ui.edit.text.java.extract.method"

label="%Refactoring.extractMethodAction.label"

retarget="true"

menubarPath="org.eclipse.jdt.ui.refactoring.menu/codingGroup"

id="org.eclipse.jdt.ui.actions.ExtractMethod">

</action>

他把ExtractMethod定义成了一个Action,其实不用想也可知道是这样,但是最大的收获在于这个plugin.xml文件是属于org.eclipse.jdt.ui插件。我就大胆的猜测Refactor

是在org.eclipse.ui中实现的,下面只有好好关注这个插件就好了。

现在急解决的问题是Refactor的菜单如何显示。

看到 retarget="true" 可以知道org.eclipse.jdt.ui.actions.ExtractMethod是一个“可重定目标的操作集操作”(Retargetable action set actions)Retargetable action的详细说明可以参考文档。文档中有如下的话:

注意,可重定目标的操作不指定实现类,因为要靠插件中的每个视图或编辑器设置实现每个操作的处理程序。

不会吧,是在编辑器中实现。那我就死了,没法模仿了。

被我言中了。

org.eclipse.jdt.internal.ui.javaeditor. CompilationUnitEditor.java中创建了一个RefactorActionGroup的实例。其后在RefactorActionGroup中把具体的实现类和Action关联起来。有如下代码为证:

fExtractMethodAction= new

ExtractMethodAction(editor);

fExtractMethodAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.EXTRACT_METHOD);

initAction(fExtractMethodAction,

provider, selection);

editor.setAction("ExtractMethod",

fExtractMethodAction); //$NON-NLS-1$

fEditorActions.add(fExtractMethodAction);

这样就为用户提供了一个Invoke “Extract Method”的接口。

另外同过源码可以看出Extract Method这个Function的是有 ExtractMethodAction这个类来实现的。这一点也可以算是一点收获吧。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有