Search in sources :

Example 31 with ReplaceEdit

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);
    }
}
Also used : ICompilationUnit(org.eclipse.jdt.core.ICompilationUnit) InsertEdit(org.eclipse.text.edits.InsertEdit) JavaModelException(org.eclipse.jdt.core.JavaModelException) MalformedTreeException(org.eclipse.text.edits.MalformedTreeException) Range(org.eclipse.lsp4j.Range) DeleteEdit(org.eclipse.text.edits.DeleteEdit) TextDocumentContentChangeEvent(org.eclipse.lsp4j.TextDocumentContentChangeEvent) TextEdit(org.eclipse.text.edits.TextEdit) ReplaceEdit(org.eclipse.text.edits.ReplaceEdit) IDocument(org.eclipse.jface.text.IDocument) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 32 with ReplaceEdit

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;
}
Also used : MultiTextEdit(org.eclipse.text.edits.MultiTextEdit) TextEdit(org.eclipse.text.edits.TextEdit) ReplaceEdit(org.eclipse.text.edits.ReplaceEdit) Range(org.eclipse.lsp4j.Range)

Example 33 with ReplaceEdit

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);
        }
    }
}
Also used : TextEdit(org.eclipse.text.edits.TextEdit) ReplaceEdit(org.eclipse.text.edits.ReplaceEdit) IMethod(org.eclipse.jdt.core.IMethod) IType(org.eclipse.jdt.core.IType)

Example 34 with 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);
}
Also used : ITextRegionAccess(org.eclipse.xtext.formatting2.regionaccess.ITextRegionAccess) ReplaceEdit(org.eclipse.text.edits.ReplaceEdit)

Example 35 with ReplaceEdit

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);
    }
}
Also used : MultiTextEdit(org.eclipse.text.edits.MultiTextEdit) TextEdit(org.eclipse.text.edits.TextEdit) ReplaceEdit(org.eclipse.text.edits.ReplaceEdit) BadLocationException(org.eclipse.jface.text.BadLocationException) IXtextDocument(org.eclipse.xtext.ui.editor.model.IXtextDocument)

Aggregations

ReplaceEdit (org.eclipse.text.edits.ReplaceEdit)117 TextEdit (org.eclipse.text.edits.TextEdit)48 MultiTextEdit (org.eclipse.text.edits.MultiTextEdit)42 Test (org.junit.Test)34 InsertEdit (org.eclipse.text.edits.InsertEdit)24 ICompilationUnit (org.eclipse.jdt.core.ICompilationUnit)14 IDocument (org.eclipse.jface.text.IDocument)13 MalformedTreeException (org.eclipse.text.edits.MalformedTreeException)13 MoveSourceEdit (org.eclipse.text.edits.MoveSourceEdit)13 MoveTargetEdit (org.eclipse.text.edits.MoveTargetEdit)13 UndoEdit (org.eclipse.text.edits.UndoEdit)13 BadLocationException (org.eclipse.jface.text.BadLocationException)12 DeleteEdit (org.eclipse.text.edits.DeleteEdit)12 TextFileChange (org.eclipse.ltk.core.refactoring.TextFileChange)10 ArrayList (java.util.ArrayList)9 List (java.util.List)7 Document (org.eclipse.jface.text.Document)7 CoreException (org.eclipse.core.runtime.CoreException)6 Position (org.eclipse.jface.text.Position)6 TextChange (org.eclipse.ltk.core.refactoring.TextChange)6