return null; final IXtextDocument document = xtextEditor.getDocument(); LinkedPositionGroup group = new LinkedPositionGroup(); Iterable<LinkedPosition> linkedPositions = filter( Iterables.transform(edits, new Function<ReplaceEdit, LinkedPosition>() { position.setSequenceNumber(i); i++; group.addPosition(position); } catch (BadLocationException e) { LOG.error(e.getMessage(), e);
public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { LinkedPosition[] positions= fLinkedPositionGroup.getPositions(); Arrays.sort(positions, new Comparator() { public int compare(Object o1, Object o2) { return ((LinkedPosition) o1).offset - ((LinkedPosition) o2).offset; } }); int correction= 0; int originalLength= fOriginalName.length(); for (int i= 0; i < positions.length; i++) { LinkedPosition position= positions[i]; try { int length= position.getLength(); document.replace(position.getOffset() + correction, length, fOriginalName); correction= correction - length + originalLength; } catch (BadLocationException e) { throw new InvocationTargetException(e); } } if (fOriginalSaved) { fEditor.doSave(monitor); // started saved -> end saved } } });
/** * Returns whether this group contains any positions. * * @return <code>true</code> if this group is empty, <code>false</code> otherwise * @deprecated As of 3.1, replaced by {@link #isEmpty()} */ @Deprecated public boolean isEmtpy() { return isEmpty(); }
enforceDisjoint(position); checkContent(position); fPositions.add(position); fHasCustomIteration |= position.getSequenceNumber() != LinkedPositionGroup.NO_STOP;
IDocument document = viewer.getDocument(); int offset = ((ITextSelection) getSelection()).getOffset(); LinkedPositionGroup group = new LinkedPositionGroup(); OccurrencesFinder finder = new OccurrencesFinder(fEditor, fEditor.getAntModel(), document, offset); List<Position> positions = finder.perform(); if (group.isEmpty()) { return;
private void addPositionsToGroup(int offset, List<Position> positions, IDocument document, LinkedPositionGroup group) { Iterator<Position> iter = positions.iterator(); int i = 0; int j = 0; int firstPosition = -1; try { while (iter.hasNext()) { Position position = iter.next(); if (firstPosition == -1) { if (position.overlapsWith(offset, 0)) { firstPosition = i; group.addPosition(new LinkedPosition(document, position.getOffset(), position.getLength(), j++)); } } else { group.addPosition(new LinkedPosition(document, position.getOffset(), position.getLength(), j++)); } i++; } for (i = 0; i < firstPosition; i++) { Position position = positions.get(i); group.addPosition(new LinkedPosition(document, position.getOffset(), position.getLength(), j++)); } } catch (BadLocationException be) { AntUIPlugin.log(be); } }
throw new IllegalArgumentException("RenameElementContext is null"); this.linkedPositionGroup = linkedPositionGroupCalculator.getLinkedPositionGroup(renameElementContext, monitor); if (linkedPositionGroup == null || linkedPositionGroup.isEmpty()) return false; this.editor = (XtextEditor) renameElementContext.getTriggeringEditor(); IDocument document = viewer.getDocument(); originalSelection = viewer.getSelectedRange(); currentPosition = linkedPositionGroup.getPositions()[0]; originalName = getCurrentName(); try {
/** * Called by nested models when a group is added to them. All * positions in all groups of a nested model have to fit inside a * single position in the parent model. * * @param group the group of the nested model to be adopted. * @param model the model to check against * @return <code>false</code> if it failed to enforce nestability */ private boolean enforceNestability(LinkedPositionGroup group, LinkedModeModel model) { Assert.isNotNull(model); Assert.isNotNull(group); try { for (LinkedPositionGroup pg : model.fGroups) { LinkedPosition pos; pos= pg.adopt(group); if (pos != null && fParentPosition != null && fParentPosition != pos) return false; // group does not fit into one parent position, which is illegal else if (fParentPosition == null && pos != null) fParentPosition= pos; } } catch (BadLocationException e) { return false; } // group must fit into exactly one of the parent's positions return fParentPosition != null; }
enforceDisjoint(position); checkContent(position); fPositions.add(position); fHasCustomIteration |= position.getSequenceNumber() != LinkedPositionGroup.NO_STOP;
/** * Called by nested models when a group is added to them. All * positions in all groups of a nested model have to fit inside a * single position in the parent model. * * @param group the group of the nested model to be adopted. * @param model the model to check against * @return <code>false</code> if it failed to enforce nestability */ private boolean enforceNestability(LinkedPositionGroup group, LinkedModeModel model) { Assert.isNotNull(model); Assert.isNotNull(group); try { for (Iterator<LinkedPositionGroup> it= model.fGroups.iterator(); it.hasNext(); ) { LinkedPositionGroup pg= it.next(); LinkedPosition pos; pos= pg.adopt(group); if (pos != null && fParentPosition != null && fParentPosition != pos) return false; // group does not fit into one parent position, which is illegal else if (fParentPosition == null && pos != null) fParentPosition= pos; } } catch (BadLocationException e) { return false; } // group must fit into exactly one of the parent's positions return fParentPosition != null; }
/** * Sets up a simple linked mode at {@link #getCursorPosition()} and an exit policy that will * exit the mode when <code>closingCharacter</code> is typed and an exit position at * <code>getCursorPosition() + 1</code>. * * @param document the document */ protected void setUpLinkedMode(IDocument document) { try { LinkedPositionGroup group= new LinkedPositionGroup(); group.addPosition(new LinkedPosition(document, getSelectionStart(), getSelectionLength(), LinkedPositionGroup.NO_STOP)); LinkedModeModel model= new LinkedModeModel(); model.addGroup(group); model.forceInstall(); LinkedModeUI ui= new LinkedModeUI(model, viewer); // ui.setSimpleMode(true); ui.setExitPolicy(new ExitPolicy(exitChars)); ui.setExitPosition(viewer, getCursorPosition() + getReplacementOffset(), 0, Integer.MAX_VALUE); ui.setCyclingMode(LinkedModeUI.CYCLE_NEVER); ui.enter(); } catch (BadLocationException e) { log.info(e.getMessage(), e); } }
private void restoreFullSelection() { if (fOriginalSelection.y != 0) { int originalOffset= fOriginalSelection.x; LinkedPosition[] positions= fLinkedPositionGroup.getPositions(); for (int i= 0; i < positions.length; i++) { LinkedPosition position= positions[i]; if (! position.isDeleted() && position.includes(originalOffset)) { fEditor.getViewer().setSelectedRange(position.offset, position.length); return; } } } }
/** * Returns whether this group contains any positions. * * @return <code>true</code> if this group is empty, <code>false</code> otherwise * @deprecated As of 3.1, replaced by {@link #isEmpty()} */ @Deprecated public boolean isEmtpy() { return isEmpty(); }
private void startLinkedEdit(List<IRegion> selections, ITextViewer viewer, Point originalSelection) throws BadLocationException { final LinkedPositionGroup linkedPositionGroup = new LinkedPositionGroup(); for (IRegion selection : selections) { linkedPositionGroup.addPosition(new LinkedPosition(viewer.getDocument(), selection.getOffset(), selection .getLength())); } LinkedModeModel model = new LinkedModeModel(); model.addGroup(linkedPositionGroup); model.forceInstall(); //FIXME can add a listener here to listen for the end of linked mode //model.addLinkingListener(null); LinkedModeUI ui = new EditorLinkedModeUI(model, viewer); ui.setExitPolicy(new DeleteBlockingExitPolicy(viewer.getDocument())); ui.enter(); // by default the text being edited is selected so restore original selection viewer.setSelectedRange(originalSelection.x, originalSelection.y); }
public LinkedPosition getCurrentLinkedPosition() { Point selection= fEditor.getViewer().getSelectedRange(); int start= selection.x; int end= start + selection.y; LinkedPosition[] positions= fLinkedPositionGroup.getPositions(); for (int i= 0; i < positions.length; i++) { LinkedPosition position= positions[i]; if (position.includes(start) && position.includes(end)) return position; } return null; }
/** * Asserts that there is at least one linked position in this linked mode * model, throws an IllegalStateException otherwise. */ private void enforceNotEmpty() { boolean hasPosition= false; for (LinkedPositionGroup linkedPositionGroup : fGroups) if (!linkedPositionGroup.isEmpty()) { hasPosition= true; break; } if (!hasPosition) throw new IllegalStateException("must specify at least one linked position"); //$NON-NLS-1$ }
for (int i = 0; i != offsets.length; i++) { if (typeArgumentProposals[i].isAmbiguous()) { final LinkedPositionGroup group = new LinkedPositionGroup(); group.addPosition(new LinkedPosition(document, replacementOffset + offsets[i], lengths[i])); model.addGroup(group); final LinkedPositionGroup group = new LinkedPositionGroup(); group.addPosition(new LinkedPosition(document, replacementOffset + getCursorPosition(), 0)); model.addGroup(group);
public LinkedPosition getCurrentLinkedPosition() { Point selection= fEditor.getViewer().getSelectedRange(); int start= selection.x; int end= start + selection.y; LinkedPosition[] positions= fLinkedPositionGroup.getPositions(); for (int i= 0; i < positions.length; i++) { LinkedPosition position= positions[i]; if (position.includes(start) && position.includes(end)) return position; } return null; }
/** * Asserts that there is at least one linked position in this linked mode * model, throws an IllegalStateException otherwise. */ private void enforceNotEmpty() { boolean hasPosition= false; for (Iterator<LinkedPositionGroup> it= fGroups.iterator(); it.hasNext(); ) if (!it.next().isEmpty()) { hasPosition= true; break; } if (!hasPosition) throw new IllegalStateException("must specify at least one linked position"); //$NON-NLS-1$ }
for (int i = 0; i != offsets.length; i++) { if (typeArgumentProposals[i].isAmbiguous()) { final LinkedPositionGroup group = new LinkedPositionGroup(); group.addPosition(new LinkedPosition(document, replacementOffset + offsets[i], lengths[i])); model.addGroup(group); final LinkedPositionGroup group = new LinkedPositionGroup(); group.addPosition(new LinkedPosition(document, replacementOffset + getCursorPosition(), 0)); model.addGroup(group);