我需要在廣義上重構代碼。我知道從Eclipse IDE內部我可以重構我的類。但是有什麼API可以在java項目中使用,以便我可以通過代碼動態重構項目?是否有任何我可以通過編程調用的Eclipse重構API?
我需要關於如何實現以下一些想法:調用所有重命名Eclipse的重構和環型移動到一次性重構整個項目的程序!
我不想通過擴展重構類引進新的重構類型。我只是想以編程方式調用它們。
我需要在廣義上重構代碼。我知道從Eclipse IDE內部我可以重構我的類。但是有什麼API可以在java項目中使用,以便我可以通過代碼動態重構項目?是否有任何我可以通過編程調用的Eclipse重構API?
我需要關於如何實現以下一些想法:調用所有重命名Eclipse的重構和環型移動到一次性重構整個項目的程序!
我不想通過擴展重構類引進新的重構類型。我只是想以編程方式調用它們。
下面的答案是偉大的,但我回答誰需要這個美好cake
更笨重和美味緊縮的人們一個更廣闊的視角:
RefactoringStatus status = new RefactoringStatus();
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IWorkspaceRoot root = workspace.getRoot();
IProject[] projects = root.getProjects();
則:
for (ICompilationUnit unit : mypackage.getCompilationUnits()) {
IType primary = unit.findPrimaryType();
IMethod[] methods = primary.getMethods();
int i = 1;
for (IMethod method : methods) {
if (method.isConstructor()) {
continue;
}
makeChangetoMethods(status, method,"changedMethodVersion_" + i);
++i;
}
}
之後:
IProgressMonitor monitor = new NullProgressMonitor();
status = new RefactoringStatus();
Refactoring refactoring = performMethodsRefactoring(status, methodToRename, newName);
則:
Change change = refactoring.createChange(monitor);
change.perform(monitor);
找到下面的代碼來設置descriptor
:
String id = IJavaRefactorings.RENAME_METHOD;
RefactoringContribution contrib = RefactoringCore.getRefactoringContribution(id);
RenameJavaElementDescriptor desc = contrib.createDescriptor();
desc.setUpdateReferences(true);
desc.setJavaElement(methodToRename);
desc.setNewName(newName);
desc.createRefactoring(status);
喜歡的東西this?
任何人誰支持的編程語言在基於Eclipse的IDE 將遲早要求提供自動化的重構 - 類似於由Java開發工具(JDT)提供。語言 工具包(LTK):由於 的Eclipse 3.1的發佈,這個任務(這絕不意味着 簡單)的至少一部分通過語言無關的API支持。但是,這個API是如何使用的?
編輯:
如果你想以編程方式運行的重構,而無需使用UI,RefactoringDescriptors(見article)可用於填寫參數和程序執行的重構。如果您創建依賴於org.eclipse.core.runtime
插件,並添加org.eclipse.core.runtime.applications
擴展,你將能夠從Eclipse運行類似的IApplication
類純Java應用程序一個main(String[])
類。調用API的示例可以在post上找到。
ICompilationUnit cu = ... // an ICompilationUnit to rename
RefactoringContribution contribution =
RefactoringCore.getRefactoringContribution(IJavaRefactorings .RENAME_COMPILATION_UNIT);
RenameJavaElementDescriptor descriptor =
(RenameJavaElementDescriptor) contribution.createDescriptor();
descriptor.setProject(cu.getResource().getProject().getName());
descriptor.setNewName("NewClass"); // new name for a Class
descriptor.setJavaElement(cu);
RefactoringStatus status = new RefactoringStatus();
try {
Refactoring refactoring = descriptor.createRefactoring(status);
IProgressMonitor monitor = new NullProgressMonitor();
refactoring.checkInitialConditions(monitor);
refactoring.checkFinalConditions(monitor);
Change change = refactoring.createChange(monitor);
change.perform(monitor);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果您有關於使用JDT的API(AST,重構等等)更詳細的問題,我建議你在JDT Forum問。
我認爲它在eclipse目錄中是一個文件:Core和UI org.eclipse.ltk.core.refactoring.Refactoring的子類必須始終創建。檢查覈心和用戶界面上的文字和「操作!」 – 2012-02-03 14:08:35
LTK API允許使用對象而不是UI來配置其重構。雖然它需要是一個eclipse插件,但您可以編寫一個無頭應用程序,它可以從命令行填入重構配置,並在您的工作區執行它。 – 2012-02-06 15:36:21
http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html是重構API的討論。 'RefactoringDescriptors'可用於編程設置更改並在操作中執行它,而不涉及GUI或嚮導。 – 2012-02-06 19:05:50