结合多个JDT重构更改

时间:2018-11-16 04:27:49

标签: eclipse-plugin refactoring eclipse-jdt automated-refactoring

使用我的eclipse插件创建了一系列org.eclipse.ltk.core.refactoring.Change 使用ExtractMethodRefactoring,并且我想对原始文件进行更改。我尝试创建一个composite change并将所有重构更改作为子级,但是当我调用复合更改时,这些更改似乎相互干预。例如,如果我尝试将下面的12提取到方法中:

原始:

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);
}

0 个答案:

没有答案