当我需要内联一个方法时,我可以使用Refactor->Inine。




这是我尝试过的代码框架,我在这篇Is there any eclipse refactoring API that I can call programmatically?文章中使用了代码。
// 1. Get ICompiationUnit for type "smcho.Hello"
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IProject project = root.getProject("Hello");
project.open(null /* IProgressMonitor */);
IJavaProject javaProject = JavaCore.create(project);
IType itype = javaProject.findType("smcho.Hello");
org.eclipse.jdt.core.ICompilationUnit icu = itype.getCompilationUnit();
// 2. Contribution and Description creation
RefactoringContribution contribution = RefactoringCore.getRefactoringContribution(IJavaRefactorings.INLINE_METHOD);
InlineMethodDescriptor descriptor = (InlineMethodDescriptor) contribution.createDescriptor();
descriptor.setProject(icu.getResource().getProject().getName( ));
// 3. executing the refactoring
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();
} 当我执行代码时,我得到了这个错误
org.eclipse.core.runtime.CoreException: The refactoring script argument 'input' is missing
in the refactoring script. 我认为我需要为API提供重构后的方法名。代码中可能存在什么错误?
发布于 2013-01-17 11:36:21
这是使用内联重构JDT API的代码。它需要内联起始位置和长度。
int[] selection= {start, length}; // getSelection();
InlineMethodRefactoring refactoring= InlineMethodRefactoring.create(this.icu, new RefactoringASTParser(ASTProvider.SHARED_AST_LEVEL).parse(this.icu, true), selection[0], selection[1]);
refactoring.setDeleteSource(true);
refactoring.setCurrentMode(Mode.INLINE_ALL); // or INLINE SINGLE based on the user's intervention
IProgressMonitor pm= new NullProgressMonitor();
RefactoringStatus res = refactoring.checkInitialConditions(pm);
res = refactoring.checkFinalConditions(pm);
final PerformRefactoringOperation op= new PerformRefactoringOperation(
refactoring, getCheckingStyle());
op.run(new NullProgressMonitor());当您知道将要内联的方法的名称时,可以使用- Getting startPosition and length of a method invocation using JDT中的代码
发布于 2012-10-16 14:18:17
在上面的代码中,您从来没有为重构操作提供方法,您只为它提供了项目上下文。但我不知道实现这一点所需的API。
如果您查看this source code,您会注意到JavaRefactoringDescriptorUtil.ATTRIBUTE_INPUT,的使用,这可能也是您需要设置的内容。也许您可以在refactoring.ui插件源代码中搜索对该属性的引用。
https://stackoverflow.com/questions/12898718
复制相似问题