`
defrag_sly
  • 浏览: 128075 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

简单介绍eclipse中的重构

阅读更多
Eclipse中提供了几个扩展点,方便扩展重构功能。
基本的重构功能有,
Rename,Move,Create,Delete,Copy。对应扩展点即为:
org.eclipse.ltk.core.refactoring.renameParticipants
org.eclipse.ltk.core.refactoring.moveParticipants
org.eclipse.ltk.core.refactoring.createParticipants
org.eclipse.ltk.core.refactoring.deleteParticipants
org.eclipse.ltk.core.refactoring.copyParticipants

以ReName为例,其余4项与ReName大同小异。
实现这个扩展点的基本语法:
<extension point="org.eclipse.ltk.core.refactoring.renameParticipants">
<renameParticipant
    id="refactoring.renameTypeParticipant"
    name="RenameTypeParticipant" 
    class="refactoring.TypeRenameParticipant"> 
    <enablement>
    </enablement>    
</renameParticipant>
</extension>

这里默认对响应所有改名事件,如果需要过滤可以在元素<enablement/>中加以定义。不赘述。实现改名扩展的关键在实现类,必须是org.eclipse.ltk.core.refactoring.participants.RenameParticipant;的子类
下面代码进行了简单的实现。

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
import org.eclipse.ltk.core.refactoring.participants.RenameParticipant;
import org.eclipse.text.edits.ReplaceEdit;

public class TypeRenameParticipant extends RenameParticipant {

	public TypeRenameParticipant() {
	}

	@Override
	public RefactoringStatus checkConditions(IProgressMonitor pm,
			CheckConditionsContext context) throws OperationCanceledException {
		return new RefactoringStatus();
	}

	@Override
	public Change createChange(IProgressMonitor pm) throws CoreException,
			OperationCanceledException {
		IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("a")
				.getFile("a");
		TextFileChange textFileChange = new TextFileChange("File Changed ",
				file);

		ReplaceEdit edit = new ReplaceEdit(0, 1, "haha");
		textFileChange.setEdit(edit);
		return textFileChange;
	}

	@Override
	public String getName() {
		return "RenameTypeParticipant";
	}

	@Override
	protected boolean initialize(Object element) {
		// need sub
		return true;
	}

}


CreateChange方法内实现过于粗糙,仅仅是为了可以让大家看到结果。
通过利用扩展点,我们就自然的将重构时的差异比较,警告,preview,重构history,redo/undo等,eclipse平台提供的基本功能加以利用了。
Preview的结果如下图。


下面我来介绍,通过扩展点实现特殊需求。

除了增,删,改,移等基本重构外,可以增加特殊需求的重构,比如JDT中对类,方法,变量名的重构。
实现特殊需求,就要实现自己的Refactoring类,继承类org.eclipse.ltk.core.refactoring.Refactoring实现相关方法,这个类的结构与RenameParticipant等类的结构基本一致,直接上代码,不再赘述。
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.Refactoring;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;

public class ProducerRefactoring extends Refactoring {

	@Override
	public RefactoringStatus checkFinalConditions(IProgressMonitor pm)
			throws CoreException, OperationCanceledException {
		// need sub
		return new RefactoringStatus();
	}

	@Override
	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
			throws CoreException, OperationCanceledException {
		// need sub
		return new RefactoringStatus();
	}

	@Override
	public Change createChange(IProgressMonitor pm) throws CoreException,
			OperationCanceledException {
		// need sub
		return null;
	}

	@Override
	public String getName() {
		return "ProducerRefactoring";
	}

}



这个类负责处理特殊需求与重构的特殊逻辑。
除了逻辑层,还需要对表现层有实现:
RefactoringWizard 及 RefactoringWizardPage。
实现了Refactoring,Wizard,WizardPage后,即完成了,UI到逻辑的实现。
通过相应的Action的配置,使用RefactoringWizardOpenOperation。即完成了特殊重构需求的开发。
为了方便对特殊需求的Refactoring逻辑部分的重用,eclipse提供了一个扩展点:
org.eclipse.ltk.core.refactoring.refactoringContributions
通过扩展点的配置,使用时通过ID即可随时得到Refactoring对象。
以上参考:http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html
欢迎讨论
  • 大小: 33.2 KB
2
0
分享到:
评论

相关推荐

    Eclipse基础教程(中文)

    此外,Eclipse还支持代码重构,如重命名变量、提取方法等,这些都能帮助开发者保持代码的整洁和可维护性。 在调试方面,Eclipse提供了强大的调试工具。通过设置断点、单步执行、查看变量值、调用栈分析等手段,可以...

    eclipse 中文语言包

    首先,安装Eclipse中文语言包的过程相当简单。用户可以在Eclipse Marketplace中搜索“Chinese (Simplified) Language Pack”或者“Chinese (Traditional) Language Pack”,然后按照提示进行安装。安装完成后,重启...

    eclipse4.4.2中文离线汉化包

    【描述】"将 lLanguagePack-eclipse-zh_4.4 直接解压到到 eclipse 覆盖即可 ,重启OK"这部分描述了安装Eclipse中文汉化包的简单步骤。首先,你需要下载名为“lLanguagePack-eclipse-zh_4.4”的语言包,这个文件是...

    Eclipse中文教程2Eclipse中文教程2

    项目是Eclipse中的基本组织单元,每个项目可以包含一个或多个源代码文件、资源和配置文件。 **3. 界面布局** Eclipse的界面由多个视图组成,如代码编辑器、导航器、问题视图等。你可以通过“窗口”菜单自定义这些...

    Eclipse中swing插件

    3. **代码导航与重构**:Eclipse的Swing插件通常集成了Eclipse的代码导航和重构功能,使得在大量Swing组件代码中查找和修改代码变得容易。 4. **调试支持**:对于Swing应用,插件可能提供特殊的断点和调试视图,...

    eclipse3.5中文包

    总之,Eclipse 3.5中文包是为了解决中国开发者在使用Eclipse 3.5时的语言障碍,通过简单的安装步骤,用户可以享受到完全汉化的开发环境,更好地利用Eclipse的强大功能进行编程和项目开发。在使用过程中,遵循提供的...

    两个比较好用的Eclipse中javascript插件jsEditor jsEclipse

    安装这两款插件非常简单,只需在Eclipse的“帮助”菜单中选择“Eclipse Marketplace”,然后搜索相应的插件名,按照提示进行安装即可。安装完成后,Eclipse会自动识别.js文件并应用这些插件的功能。 在压缩包...

    Eclipse3.5简体中文包

    标签中的"Ec3.5中文包"表明这是Eclipse3.5的官方简体中文语言包,它是为了让中国及中文环境下的开发者能更方便地使用Eclipse。安装这个语言包后,所有的菜单、对话框和帮助文档都将转换为简体中文,极大地降低了...

    Eclipse教程-Eclipse实战视频教程

    Eclipse是一款强大的集成开发环境(IDE),尤其在Java编程领域中广泛应用。对于初学者来说,掌握Eclipse的基本操作和特性是至关重要的,因为这将极大地提升编程效率和代码质量。本教程旨在帮助初学者快速上手Eclipse...

    eclipse 3.5 官方简体中文包

    在插件系统上,Eclipse 3.5支持新的P2更新机制,这使得插件的安装、升级和管理更为简单,用户可以通过Eclipse内置的市场查找并安装所需的插件。P2还提供了依赖管理和冲突解决,确保了插件之间的兼容性。 对于Web...

    eclipse3.5全功能中文语言包

    Eclipse 3.5全功能中文语言包的安装非常简单,只需将下载的压缩包解压后,按照Eclipse的插件安装指引进行操作即可。通常,这包括通过“Help”菜单选择“Install New Software”,然后指向语言包所在的目录进行安装。...

    Eclipse 4.2 juno 中文语言包

    安装Eclipse 4.2 "Juno" 的中文语言包非常简单,只需要将下载的压缩包解压后,将其中的`features`和`plugins`目录下的文件复制到Eclipse安装目录的相应文件夹下,然后重启Eclipse即可。这样,你就可以享受全中文界面...

    Eclipse中文教程.rar

    本教程将深入浅出地介绍Eclipse的使用,帮助初学者快速上手并提升开发效率。 首先,Eclipse的核心功能是代码编辑、构建管理和调试。其强大的代码自动完成(Content Assist)功能能有效提高编写代码的速度,同时,...

    eclipse3.4中文包.rar

    Eclipse 3.4中文包是一个为Eclipse IDE(集成开发环境)提供的...总的来说,Eclipse 3.4中文包为中国的开发者提供了一个更加友好和熟悉的开发环境,通过简单的步骤就能实现界面语言的切换,提升了开发过程的舒适度。

    ajdt2.2.3 for eclipse 4.3 (AspectJ Eclipse 插件)

    同时,Eclipse的重构工具也适用于AspectJ代码,增强了整体的开发体验。 最后,如果你在使用ajdt2.2.3过程中遇到任何问题或者有新的发现,建议你在社区分享你的经验,这对其他开发者来说是一份宝贵的资源。通过评论...

    eclipse3.5中文语言包(2009-11版本)

    安装Eclipse3.5中文语言包的过程相对简单。首先,你需要确保你已经安装了Eclipse3.5的基础版本。然后,可以通过Eclipse的“软件更新”功能来添加新的更新站点,通常是通过“帮助”-&gt;“软件更新”-&gt;“查找并安装...”...

Global site tag (gtag.js) - Google Analytics