use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccessDiff in project xtext-core by eclipse.
the class RelatedXtextResourceUpdater method applyChange.
@Override
public void applyChange(Deltas deltas, IAcceptor<IEmfResourceChange> changeAcceptor) {
XtextResource res = (XtextResource) lifecycleManager.openAndApplyReferences(getResourceSet(), getResource());
if (!referenceUpdater.isAffected(deltas, getResource())) {
return;
}
ITextRegionAccess base = textRegionBuilderProvider.get().forNodeModel(res).create();
ITextRegionDiffBuilder rewriter = new StringBasedTextRegionAccessDiffBuilder(base);
ReferenceUpdaterContext context = new ReferenceUpdaterContext(deltas, rewriter, getResource());
referenceUpdater.update(context);
if (!context.getModifications().isEmpty()) {
ChangeRecorder rec = new ChangeRecorder(res);
for (Runnable run : context.getModifications()) {
run.run();
}
ChangeDescription recording = rec.endRecording();
ResourceSet rs = res.getResourceSet();
ResourceSetRecording tree = changeTreeProvider.createChangeTree(rs, Collections.emptyList(), recording);
ResourceRecording recordedResource = tree.getRecordedResource(res);
if (recordedResource != null) {
serializer.serializeChanges(recordedResource, rewriter);
}
}
for (IUpdatableReference upd : context.getUpdatableReferences()) {
referenceUpdater.updateReference(rewriter, upd);
}
ITextRegionAccessDiff rewritten = rewriter.create();
List<ITextReplacement> rep = formatter.format(rewritten);
TextDocumentChange change = new TextDocumentChange(rewritten, getResource().getUri(), rep);
changeAcceptor.accept(change);
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccessDiff in project xtext-core by eclipse.
the class RegionAccessTestHelper method operator_tripleEquals.
public void operator_tripleEquals(final ITextRegionAccess access, final CharSequence expectation) {
if ((access instanceof ITextRegionAccessDiff)) {
this.assertDiffs(((ITextRegionAccessDiff) access));
}
TextRegionAccessToString _cfg = this.cfg(new TextRegionAccessToString().withRegionAccess(access));
final String tra1 = (_cfg + "\n");
Assert.assertEquals(Strings.toPlatformLineSeparator(expectation), Strings.toPlatformLineSeparator(tra1));
}
use of org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccessDiff in project xtext-core by eclipse.
the class RegionAccessTestHelper method assertDiffs.
public void assertDiffs(final ITextRegionAccessDiff regions) {
final ITextRegionRewriter rewriter = regions.getOriginalTextRegionAccess().getRewriter();
final ArrayList<ITextReplacement> result = Lists.<ITextReplacement>newArrayList();
List<ITextSegmentDiff> _regionDifferences = regions.getRegionDifferences();
for (final ITextSegmentDiff r : _regionDifferences) {
{
final ITextSegment originalRegion = r.getOriginalRegion();
final ITextSegment modifiedRegion = r.getModifiedRegion();
final ITextReplacement replacement = originalRegion.replaceWith(modifiedRegion.getText());
result.add(replacement);
}
}
final String actual = rewriter.renderToString(result);
final String expected = regions.regionForDocument().getText();
Assert.assertEquals(expected, actual);
}
Aggregations