그래서 리니렉션 리펙터를 프로그래밍 방식으로 트리거하는 방법을 발견했습니다. 나는 내 코드에 @SuppressWarnings("restriction")
를 추가했다 이후는 그렇지 않은 추측 - - 그것은 "올바른"방법이 있는지 모르겠어요하지만 작동 :
private void performDirectRenameRefactoring(EObject object, String newName) throws InterruptedException {
XtextEditor editor = EditorUtils.getActiveXtextEditor();
IRenameElementContext renameContext = new IRenameElementContext.Impl(
EcoreUtil.getURI(object),
object.eClass(),
editor,
editor.getSelectionProvider().getSelection(),
null);
IRenameSupport rename = renameSupportFactory.create(renameContext, newName);
rename.startDirectRefactoring();
}
그래서 빠른 수정에서이 전화를, EObject
을 받고 새 이름을 계산하기 만하면됩니다. 당신은 (AN (당신이 문제를 처리하는 경우 당신이해야한다) 중 하나 IssueResolutionAcceptor
에서 IXtextDocument
또는 IModificationContext
에서 얻을 수
private EObject findObject(IXtextDocument doc, final Issue issue) {
EObject object = doc.readOnly(new IUnitOfWork<EObject, XtextResource>() {
public EObject exec(XtextResource state) throws Exception {
return state.getEObject(issue.getUriToProblem().fragment());
}
});
}
: 문제가 EObject
자체의 일부를 차지하는 경우, 객체 검색 할 수 있습니다 당신이 변화를 제안한다면 당신이 가지고 있어야합니다).
출처
2013-01-26 10:10:50
Oak