Search in sources :

Example 76 with BadLocationException

use of org.eclipse.jface.text.BadLocationException in project eclipse.platform.text by eclipse.

the class TemplateProposal method apply.

/**
 * Inserts the template offered by this proposal into the viewer's document
 * and sets up a <code>LinkedModeUI</code> on the viewer to edit any of
 * the template's unresolved variables.
 *
 * @param viewer {@inheritDoc}
 * @param trigger {@inheritDoc}
 * @param stateMask {@inheritDoc}
 * @param offset {@inheritDoc}
 */
@Override
public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) {
    IDocument document = viewer.getDocument();
    try {
        fContext.setReadOnly(false);
        int start;
        TemplateBuffer templateBuffer;
        {
            int oldReplaceOffset = getReplaceOffset();
            try {
                // this may already modify the document (e.g. add imports)
                templateBuffer = fContext.evaluate(fTemplate);
            } catch (TemplateException e1) {
                fSelectedRegion = fRegion;
                return;
            }
            start = getReplaceOffset();
            int shift = start - oldReplaceOffset;
            int end = Math.max(getReplaceEndOffset(), offset + shift);
            // insert template string
            String templateString = templateBuffer.getString();
            document.replace(start, end - start, templateString);
        }
        // translate positions
        LinkedModeModel model = new LinkedModeModel();
        TemplateVariable[] variables = templateBuffer.getVariables();
        boolean hasPositions = false;
        for (int i = 0; i != variables.length; i++) {
            TemplateVariable variable = variables[i];
            if (variable.isUnambiguous())
                continue;
            LinkedPositionGroup group = new LinkedPositionGroup();
            int[] offsets = variable.getOffsets();
            int length = variable.getLength();
            LinkedPosition first;
            {
                String[] values = variable.getValues();
                ICompletionProposal[] proposals = new ICompletionProposal[values.length];
                for (int j = 0; j < values.length; j++) {
                    ensurePositionCategoryInstalled(document, model);
                    Position pos = new Position(offsets[0] + start, length);
                    document.addPosition(getCategory(), pos);
                    proposals[j] = new PositionBasedCompletionProposal(values[j], pos, length);
                }
                if (proposals.length > 1)
                    first = new ProposalPosition(document, offsets[0] + start, length, proposals);
                else
                    first = new LinkedPosition(document, offsets[0] + start, length);
            }
            for (int j = 0; j != offsets.length; j++) if (j == 0)
                group.addPosition(first);
            else
                group.addPosition(new LinkedPosition(document, offsets[j] + start, length));
            model.addGroup(group);
            hasPositions = true;
        }
        if (hasPositions) {
            model.forceInstall();
            LinkedModeUI ui = new LinkedModeUI(model, viewer);
            ui.setExitPosition(viewer, getCaretOffset(templateBuffer) + start, 0, Integer.MAX_VALUE);
            ui.enter();
            fSelectedRegion = ui.getSelectedRegion();
        } else {
            ensurePositionCategoryRemoved(document);
            fSelectedRegion = new Region(getCaretOffset(templateBuffer) + start, 0);
        }
    } catch (BadLocationException e) {
        openErrorDialog(viewer.getTextWidget().getShell(), e);
        ensurePositionCategoryRemoved(document);
        fSelectedRegion = fRegion;
    } catch (BadPositionCategoryException e) {
        openErrorDialog(viewer.getTextWidget().getShell(), e);
        fSelectedRegion = fRegion;
    }
}
Also used : LinkedPosition(org.eclipse.jface.text.link.LinkedPosition) LinkedPosition(org.eclipse.jface.text.link.LinkedPosition) Position(org.eclipse.jface.text.Position) ProposalPosition(org.eclipse.jface.text.link.ProposalPosition) LinkedModeModel(org.eclipse.jface.text.link.LinkedModeModel) Point(org.eclipse.swt.graphics.Point) LinkedPositionGroup(org.eclipse.jface.text.link.LinkedPositionGroup) ProposalPosition(org.eclipse.jface.text.link.ProposalPosition) BadPositionCategoryException(org.eclipse.jface.text.BadPositionCategoryException) LinkedModeUI(org.eclipse.jface.text.link.LinkedModeUI) Region(org.eclipse.jface.text.Region) IRegion(org.eclipse.jface.text.IRegion) IDocument(org.eclipse.jface.text.IDocument) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 77 with BadLocationException

use of org.eclipse.jface.text.BadLocationException in project eclipse.platform.text by eclipse.

the class DocumentUndoManagerTest method testConvertLineDelimiters.

/**
 * Test for line delimiter conversion.
 *
 * @throws ExecutionException if undo fails
 */
public void testConvertLineDelimiters() throws ExecutionException {
    final String original = "a\r\nb\r\n";
    final IDocument document = new Document(original);
    createUndoManager(document);
    try {
        document.replace(1, 2, "\n");
        document.replace(3, 2, "\n");
    } catch (BadLocationException e) {
        assertTrue(false);
    }
    assertTrue(fUndoManager.undoable());
    fUndoManager.undo();
    assertTrue(fUndoManager.undoable());
    fUndoManager.undo();
    final String reverted = document.get();
    assertEquals(original, reverted);
}
Also used : Document(org.eclipse.jface.text.Document) IDocument(org.eclipse.jface.text.IDocument) IDocument(org.eclipse.jface.text.IDocument) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 78 with BadLocationException

use of org.eclipse.jface.text.BadLocationException in project eclipse.platform.text by eclipse.

the class DocumentUndoManagerTest method doChange.

private void doChange(IDocument document, int count) {
    try {
        String before = document.get();
        if (DEBUG)
            System.out.println(before);
        Position[] positions = new Position[count];
        String[] strings = new String[count];
        for (int i = 0; i < count; i++) {
            final Position position = createRandomPositionPoisson(document.getLength());
            final String string = createRandomStringPoisson();
            document.replace(position.getOffset(), position.getLength(), string);
            positions[i] = position;
            strings[i] = string;
        }
        if (DEBUG) {
            System.out.print("{ ");
            for (int i = 0; i < count; i++) {
                System.out.print(positions[i].getOffset());
                System.out.print(", ");
                System.out.print(positions[i].getLength());
                System.out.print(", ");
            }
            System.out.println(" }");
            System.out.print("{ ");
            for (int i = 0; i < count; i++) {
                System.out.print("\"");
                System.out.print(strings[i]);
                System.out.print("\", ");
            }
            System.out.println(" }");
        }
    } catch (BadLocationException e) {
        assertTrue(false);
    }
}
Also used : Position(org.eclipse.jface.text.Position) BadLocationException(org.eclipse.jface.text.BadLocationException)

Example 79 with BadLocationException

use of org.eclipse.jface.text.BadLocationException in project eclipse.platform.text by eclipse.

the class FindReplaceDocumentAdapterTest method testFind.

@org.junit.Test
public void testFind() {
    FindReplaceDocumentAdapter findReplaceDocumentAdapter = new FindReplaceDocumentAdapter(fDocument);
    try {
        IRegion result = new Region(8, 11);
        // Find case-sensitive
        // $NON-NLS-1$
        IRegion r = findReplaceDocumentAdapter.find(0, "TestPackage", true, true, false, false);
        assertEquals(result, r);
        // $NON-NLS-1$
        r = findReplaceDocumentAdapter.find(0, "testpackage", true, true, false, false);
        assertNull(r);
        // Find non-case-sensitive
        // $NON-NLS-1$
        r = findReplaceDocumentAdapter.find(0, "TestPackage", true, false, false, false);
        assertEquals(r, result);
        // $NON-NLS-1$
        r = findReplaceDocumentAdapter.find(0, "testpackage", true, false, false, false);
        assertEquals(r, result);
    } catch (BadLocationException e) {
        Assert.assertTrue(false);
    }
}
Also used : Region(org.eclipse.jface.text.Region) IRegion(org.eclipse.jface.text.IRegion) FindReplaceDocumentAdapter(org.eclipse.jface.text.FindReplaceDocumentAdapter) IRegion(org.eclipse.jface.text.IRegion) BadLocationException(org.eclipse.jface.text.BadLocationException) Test(org.junit.Test)

Example 80 with BadLocationException

use of org.eclipse.jface.text.BadLocationException in project eclipse.platform.text by eclipse.

the class FindReplaceDocumentAdapterTest method testBug386751.

/**
 * Test case for: https://bugs.eclipse.org/386751
 */
@Test
public void testBug386751() {
    FindReplaceDocumentAdapter adapter = new FindReplaceDocumentAdapter(fDocument);
    try {
        IRegion result = adapter.find(0, ".", true, false, true, false);
        assertNull(result);
    } catch (BadLocationException e) {
        Assert.assertTrue(false);
    }
}
Also used : FindReplaceDocumentAdapter(org.eclipse.jface.text.FindReplaceDocumentAdapter) IRegion(org.eclipse.jface.text.IRegion) BadLocationException(org.eclipse.jface.text.BadLocationException) Test(org.junit.Test)

Aggregations

BadLocationException (org.eclipse.jface.text.BadLocationException)455 IDocument (org.eclipse.jface.text.IDocument)196 IRegion (org.eclipse.jface.text.IRegion)161 Test (org.junit.Test)102 Position (org.eclipse.jface.text.Position)101 Region (org.eclipse.jface.text.Region)68 Point (org.eclipse.swt.graphics.Point)61 Document (org.eclipse.jface.text.Document)47 CoreException (org.eclipse.core.runtime.CoreException)34 ArrayList (java.util.ArrayList)27 ITypedRegion (org.eclipse.jface.text.ITypedRegion)27 BadPositionCategoryException (org.eclipse.jface.text.BadPositionCategoryException)22 DocumentEvent (org.eclipse.jface.text.DocumentEvent)21 ITextSelection (org.eclipse.jface.text.ITextSelection)21 StyledText (org.eclipse.swt.custom.StyledText)18 StyledString (org.eclipse.jface.viewers.StyledString)17 IStatus (org.eclipse.core.runtime.IStatus)16 ITextFileBuffer (org.eclipse.core.filebuffers.ITextFileBuffer)15 FindReplaceDocumentAdapter (org.eclipse.jface.text.FindReplaceDocumentAdapter)15 MalformedTreeException (org.eclipse.text.edits.MalformedTreeException)15