public boolean intersects(Region range) { int tMin = offset; int tMax = offset + length - 1; int oMin = range.getOffset(); int oMax = range.getOffset() + range.getLength() - 1; return tMin <= oMax && oMin <= tMax; }
private void deleteTag(NLSSubstitution substitution, TextChange change) { Region textRegion = substitution.getNLSElement().getTagPosition(); TextChangeCompatibility.addTextEdit( change, NLSMessages.NLSSourceModifier_remove_tag, new DeleteEdit(textRegion.getOffset(), textRegion.getLength())); }
private boolean isAffected(ASTNode node) { if (fSubRange == null) { return true; } int nodeStart = node.getStartPosition(); int offset = fSubRange.getOffset(); return nodeStart + node.getLength() > offset && offset + fSubRange.getLength() > nodeStart; }
private void deleteAccessor(NLSSubstitution substitution, TextChange change, ICompilationUnit cu) throws CoreException { AccessorClassReference accessorClassRef = substitution.getAccessorClassReference(); if (accessorClassRef != null) { Region region = accessorClassRef.getRegion(); String[] args = { substitution.getValueNonEmpty(), BasicElementLabels.getJavaElementName(substitution.getKey()) }; String label = Messages.format(NLSMessages.NLSSourceModifier_remove_accessor, args); String replaceString = '\"' + unwindEscapeChars(substitution.getValueNonEmpty()) + '\"'; TextChangeCompatibility.addTextEdit( change, label, new ReplaceEdit(region.getOffset(), region.getLength(), replaceString)); if (fIsEclipseNLS && substitution.getState() != NLSSubstitution.INTERNALIZED) { Region position = substitution.getNLSElement().getPosition(); int lineStart = getLineStart(cu.getBuffer(), position.getOffset()); int lineEnd = getLineEnd(cu.getBuffer(), position.getOffset()); String cuLine = cu.getBuffer().getText(lineStart, lineEnd - lineStart); StringBuffer buf = new StringBuffer(cuLine); buf.replace( region.getOffset() - lineStart, region.getOffset() + region.getLength() - lineStart, replaceString); try { NLSLine[] allLines = NLSScanner.scan(buf.toString()); NLSLine nlsLine = allLines[0]; NLSElement element = findElement( nlsLine, position.getOffset() - lineStart - accessorClassRef.getName().length() - 1); if (element == null || element.hasTag()) return; NLSElement[] elements = nlsLine.getElements(); int indexInElementList = Arrays.asList(elements).indexOf(element); String editText = ' ' + NLSElement.createTagText(indexInElementList + 1); // tags are 1-based TextChangeCompatibility.addTextEdit(change, label, new InsertEdit(lineEnd, editText)); } catch (InvalidInputException e) { } catch (BadLocationException e) { } } } }
@Override public void visit(Tree.DocLink that) { super.visit(that); // TODO: copy/paste from EnterAliasRefactoring Declaration base = that.getBase(); if (base != null && dec.equals(base)) { Region region = DocLinks.nameRegion(that, 0); change.addEdit(new ReplaceEdit(region.getOffset(), region.getLength(), dec.getName())); } }
private void replaceKey(NLSSubstitution substitution, TextChange change) { Region region = substitution.getNLSElement().getPosition(); String[] args = { substitution.getInitialKey(), BasicElementLabels.getJavaElementName(substitution.getKey()) }; ReplaceEdit replaceEdit; if (fIsEclipseNLS) replaceEdit = new ReplaceEdit(region.getOffset(), region.getLength(), substitution.getKey()); else replaceEdit = new ReplaceEdit( region.getOffset(), region.getLength(), '\"' + unwindEscapeChars(substitution.getKey()) + '\"'); // TextChangeCompatibility.addTextEdit( change, Messages.format(NLSMessages.NLSSourceModifier_replace_key, args), replaceEdit); }
protected Region getNewSelectionRegion( IndexedRegion indexedRegion, ITextSelection textSelection) { Region newRegion = null; if (indexedRegion instanceof Node) { Node cursorNode = (Node) indexedRegion; // use parent node for empty text node if ((cursorNode.getNodeType() == Node.TEXT_NODE) && (cursorNode.getNodeValue().trim().length() == 0)) { cursorNode = cursorNode.getParentNode(); if (cursorNode instanceof IndexedRegion) { indexedRegion = (IndexedRegion) cursorNode; } } Region cursorNodeRegion = new Region( indexedRegion.getStartOffset(), indexedRegion.getEndOffset() - indexedRegion.getStartOffset()); if ((cursorNodeRegion.getOffset() >= textSelection.getOffset()) && (cursorNodeRegion.getOffset() <= textSelection.getOffset() + textSelection.getLength()) && (cursorNodeRegion.getOffset() + cursorNodeRegion.getLength() >= textSelection.getOffset()) && (cursorNodeRegion.getOffset() + cursorNodeRegion.getLength() <= textSelection.getOffset() + textSelection.getLength())) { Node newNode = cursorNode.getParentNode(); if (newNode instanceof IndexedRegion) { IndexedRegion newIndexedRegion = (IndexedRegion) newNode; newRegion = new Region( newIndexedRegion.getStartOffset(), newIndexedRegion.getEndOffset() - newIndexedRegion.getStartOffset()); } } else { newRegion = cursorNodeRegion; } } return newRegion; }
private void addAccessor(NLSSubstitution sub, TextChange change, String accessorName) { if (sub.getState() == NLSSubstitution.EXTERNALIZED) { NLSElement element = sub.getNLSElement(); Region position = element.getPosition(); String[] args = {sub.getValueNonEmpty(), BasicElementLabels.getJavaElementName(sub.getKey())}; String text = Messages.format(NLSMessages.NLSSourceModifier_externalize, args); String resourceGetter = createResourceGetter(sub.getKey(), accessorName); TextEdit edit = new ReplaceEdit(position.getOffset(), position.getLength(), resourceGetter); if (fIsEclipseNLS && element.getTagPosition() != null) { MultiTextEdit multiEdit = new MultiTextEdit(); multiEdit.addChild(edit); Region tagPosition = element.getTagPosition(); multiEdit.addChild(new DeleteEdit(tagPosition.getOffset(), tagPosition.getLength())); edit = multiEdit; } TextChangeCompatibility.addTextEdit(change, text, edit); } }
private void replaceValue(NLSSubstitution substitution, TextChange change) { Region region = substitution.getNLSElement().getPosition(); String[] args = {substitution.getInitialValue(), substitution.getValueNonEmpty()}; TextChangeCompatibility.addTextEdit( change, Messages.format(NLSMessages.NLSSourceModifier_replace_value, args), new ReplaceEdit( region.getOffset(), region.getLength(), '\"' + unwindEscapeChars(substitution.getValueNonEmpty()) + '\"')); // }
/** * Add enclosing comment tags for the whole area to be commented * * @param commentArea initial comment area which can be adjusted * @param lastPartition last partition * @param doc document * @param factory Edit factory * @param edits List of edits to update the document * @return new possibly adjusted comment area * @throws BadLocationException */ private Region handleEnclosingPartitions( Region commentArea, ITypedRegion lastPartition, IDocument doc, Edit.EditFactory factory, List<Edit> edits) throws BadLocationException { int commentAreaStart = commentArea.getOffset(); int commentAreaEnd = commentArea.getOffset() + commentArea.getLength(); String commentStartTag = getCommentStart(); // "/*" String commentEndTag = getCommentEnd(); // "*/" String startLineEOL = doc.getLineDelimiter(doc.getLineOfOffset(commentAreaStart)); if (startLineEOL == null) startLineEOL = ""; // $NON-NLS-1$ String endLineEOL = doc.getLineDelimiter(doc.getLineOfOffset(commentAreaEnd - 1)); if (endLineEOL == null) endLineEOL = ""; // $NON-NLS-1$ boolean isLeftEol = commentAreaStart < startLineEOL.length() || doc.get(commentAreaStart - startLineEOL.length(), startLineEOL.length()) .equals(startLineEOL); boolean isRightEol = doc.get(commentAreaEnd - endLineEOL.length(), endLineEOL.length()).equals(endLineEOL); if (isLeftEol && isRightEol) { // Block of full lines found int areaStartLine = doc.getLineOfOffset(commentAreaStart + startLineEOL.length()); int areaEndLine = doc.getLineOfOffset(commentAreaEnd - endLineEOL.length()); if (areaStartLine != areaEndLine) { // If multiple full lines arrange inserting comment tags on their own lines commentStartTag = getCommentStart() + startLineEOL; commentEndTag = getCommentEnd() + endLineEOL; } else { // If one full line insert end comment tag on the same line (before the EOL) commentAreaEnd = commentAreaEnd - endLineEOL.length(); } } else { if (lastPartition.getType() == ICPartitions.C_SINGLE_LINE_COMMENT || lastPartition.getType() == ICPartitions.C_SINGLE_LINE_DOC_COMMENT) { // C++ comments "//" partition ends with EOL, insert end comment tag before it // on the same line, so we get something like /*// text*/ commentAreaEnd = commentAreaEnd - endLineEOL.length(); } } edits.add(factory.createEdit(commentAreaStart, 0, commentStartTag)); edits.add(factory.createEdit(commentAreaEnd, 0, commentEndTag)); return new Region(commentAreaStart, commentAreaEnd - commentAreaStart); }
private void consolidateFragments() { log.debug("Consolidating fragments ({}@{})", getClass(), System.identityHashCode(this)); int start = range.getOffset(); int length = range.getLength(); try { if (defaultToken == null) throw new IllegalStateException("No default token defined"); if (fragments.isEmpty()) { emitCommentAware(defaultToken, start, document.get(start, length)); return; } Fragment firstFragment = fragments.get(0); if (firstFragment.offset > start) { fragments.add(0, new Fragment(defaultToken, start, firstFragment.offset - start)); } Fragment lastFragment = fragments.get(fragments.size() - 1); int endOffset = start + length; int endFragmentOffset = lastFragment.offset + lastFragment.length; if (endFragmentOffset < endOffset) { log.debug( "Emitting consolidation fragment at offset: {} of length: {} (document length: {})", o(endFragmentOffset, endOffset - endFragmentOffset, document.getLength())); emitCommentAware( defaultToken, endFragmentOffset, document.get(endFragmentOffset, endOffset - endFragmentOffset)); } } catch (BadLocationException e) { log.error("Failed to consolidate fragments", e); } for (Fragment fragment : fragments) { log.debug( "fragment: {}, {}, {}", o(fragment.offset, fragment.length, fragment.token.getData())); } }
public void insertAsTemplate(PotentialStep pStep) { IDocument document = getInputDocument(); Point point = getSourceViewer().getSelectedRange(); int lineNo = getSourceViewer().getTextWidget().getLineAtOffset(point.x); int lineOffset = getSourceViewer().getTextWidget().getOffsetAtLine(lineNo); Region replacementRegion = new Region(lineOffset, 0); TemplateContextType contextType = StoryContextType.getTemplateContextType(); TemplateContext templateContext = new DocumentTemplateContext( contextType, document, replacementRegion.getOffset(), replacementRegion.getLength()); String templateText = TemplateUtils.templatizeVariables(pStep.fullStep()) + "\n"; Template template = new Template( pStep.stepPattern, pStep.fullStep(), StoryContextType.STORY_CONTEXT_TYPE_ID, templateText, false); new TemplateProposal(template, templateContext, replacementRegion, null, 0) .apply(getSourceViewer(), (char) 0, SWT.CONTROL, replacementRegion.getOffset()); }
protected void renameRegion(TextChange tfc, Region region, Tree.CompilationUnit root) { tfc.addEdit(new ReplaceEdit(region.getOffset(), region.getLength(), newName)); }
private static boolean isPositionInElement(NLSElement element, int position) { Region elementPosition = element.getPosition(); return (elementPosition.getOffset() <= position && position <= elementPosition.getOffset() + elementPosition.getLength()); }