use of org.eclipse.text.edits.ReplaceEdit in project eclipse.jdt.ls by eclipse.
the class DocumentLifeCycleHandler method handleChanged.
public void handleChanged(DidChangeTextDocumentParams params) {
ICompilationUnit unit = JDTUtils.resolveCompilationUnit(params.getTextDocument().getUri());
if (unit == null || !unit.isWorkingCopy() || params.getContentChanges().isEmpty()) {
return;
}
try {
if (unit.equals(sharedASTProvider.getActiveJavaElement())) {
sharedASTProvider.disposeAST();
}
List<TextDocumentContentChangeEvent> contentChanges = params.getContentChanges();
for (TextDocumentContentChangeEvent changeEvent : contentChanges) {
Range range = changeEvent.getRange();
int length;
if (range != null) {
length = changeEvent.getRangeLength().intValue();
} else {
// range is optional and if not given, the whole file content is replaced
length = unit.getSource().length();
range = JDTUtils.toRange(unit, 0, length);
}
int startOffset = JsonRpcHelpers.toOffset(unit.getBuffer(), range.getStart().getLine(), range.getStart().getCharacter());
TextEdit edit = null;
String text = changeEvent.getText();
if (length == 0) {
edit = new InsertEdit(startOffset, text);
} else if (text.isEmpty()) {
edit = new DeleteEdit(startOffset, length);
} else {
edit = new ReplaceEdit(startOffset, length, text);
}
IDocument document = JsonRpcHelpers.toDocument(unit.getBuffer());
edit.apply(document, TextEdit.NONE);
}
triggerValidation(unit);
} catch (JavaModelException | MalformedTreeException | BadLocationException e) {
JavaLanguageServerPlugin.logException("Error while handling document change", e);
}
}
use of org.eclipse.text.edits.ReplaceEdit in project eclipse.jdt.ls by eclipse.
the class FormatterHandler method convertEdit.
private static org.eclipse.lsp4j.TextEdit convertEdit(TextEdit edit, IDocument document) {
org.eclipse.lsp4j.TextEdit textEdit = new org.eclipse.lsp4j.TextEdit();
if (edit instanceof ReplaceEdit) {
ReplaceEdit replaceEdit = (ReplaceEdit) edit;
textEdit.setNewText(replaceEdit.getText());
int offset = edit.getOffset();
textEdit.setRange(new Range(createPosition(document, offset), createPosition(document, offset + edit.getLength())));
}
return textEdit;
}
use of org.eclipse.text.edits.ReplaceEdit in project eclipse.jdt.ls by eclipse.
the class RenameTypeProcessor method renameOccurrences.
@Override
public void renameOccurrences(WorkspaceEdit edit, String newName, IProgressMonitor monitor) throws CoreException {
super.renameOccurrences(edit, newName, monitor);
IType t = (IType) fElement;
IMethod[] methods = t.getMethods();
for (IMethod method : methods) {
if (method.isConstructor()) {
TextEdit replaceEdit = new ReplaceEdit(method.getNameRange().getOffset(), method.getNameRange().getLength(), newName);
convert(edit, t.getCompilationUnit(), replaceEdit);
}
}
}
use of org.eclipse.text.edits.ReplaceEdit in project n4js by eclipse.
the class FixedContentFormatter method createTextEdit.
@Override
protected TextEdit createTextEdit(List<ITextReplacement> replacements) {
if (replacements.isEmpty()) {
return new ReplaceEdit(0, 0, "");
}
ITextRegionAccess regionAccess = replacements.get(0).getTextRegionAccess();
String newDocument = regionAccess.getRewriter().renderToString(replacements);
return new ReplaceEdit(0, regionAccess.regionForDocument().getLength(), newDocument);
}
use of org.eclipse.text.edits.ReplaceEdit in project n4js by eclipse.
the class FixedContentFormatter method format.
/**
* This method makes sure that no changes are applied (no dirty state), if there are no changes. This fixes bug
* GHOLD-272
*/
@Override
public void format(IDocument document, IRegion region) {
IXtextDocument doc = (IXtextDocument) document;
TextEdit e = doc.priorityReadOnly(new FormattingUnitOfWork(doc, region));
if (e == null)
return;
if (e instanceof ReplaceEdit) {
ReplaceEdit r = (ReplaceEdit) e;
if ((r.getOffset() == 0) && (r.getLength() == 0) && (r.getText().isEmpty())) {
return;
}
}
try {
e.apply(document);
} catch (BadLocationException ex) {
throw new RuntimeException(ex);
}
}
Aggregations