使用我的eclipse插件创建了一系列org.eclipse.ltk.core.refactoring.Change
使用ExtractMethodRefactoring,并且我想对原始文件进行更改。我尝试创建一个composite change并将所有重构更改作为子级,但是当我调用复合更改时,这些更改似乎相互干预。例如,如果我尝试将下面的1
和2
提取到方法中:
原始:
package hello;
public class Exp { int x = 1 + 2;}
预期:
package hello;
public class Exp { int x = extracted461() + extracted421();
public int extracted461() {
return 1;
}
public int extracted421() {
return 2;
}
}
结果:
package hello;
public class Exp { int x = extrextracted461()c
public int extracted461() {
return a;
}ted421() + 1;
public int extracted421() {
return 2;
}}
如何结合重构/更改并一起执行?
p.s。这是我拥有的相关代码:
private static void refactorCu(ICompilationUnit cu, NullProgressMonitor pm) throws CoreException {
List<int[]> ranges = getExpRanges(cu);
List<Change> changes = new ArrayList<>();
for (int[] sls : ranges) {changes.add(refactorMethod(cu, sls[0], sls[1]));}
Change[] cs = new Change[changes.size()];
cs = changes.toArray(cs);
CompositeChange cc = new CompositeChange("all refactoring");
cc.addAll(cs);
cc.perform(pm);
}
private static Change refactorMethod(ICompilationUnit cu, int start, int length) throws CoreException {
ExtractMethodRefactoring refactoring = new ExtractMethodRefactoring(cu, start, length);
refactoring.setMethodName("extracted" + String.valueOf(start) + String.valueOf(length));
refactoring.setVisibility(Modifier.PUBLIC);
NullProgressMonitor pm = new NullProgressMonitor();
refactoring.checkAllConditions(pm);
return refactoring.createChange(pm);
}