public ReplaceRegion shiftBy(int offset) { if (offset == 0) return this; return new ReplaceRegion(this.offset + offset, length, text); }
public ReplaceRegion shiftBy(int offset) { if (offset == 0) return this; return new ReplaceRegion(this.offset + offset, length, text); }
protected String applyDelta(String data, int offset, int len, String change) { StringBuilder builder = new StringBuilder(data); new ReplaceRegion(offset, len, change).applyTo(builder); String result = builder.toString(); return result; }
String simpleName = text.substring(beginIndex, endLink).replaceAll(" ", ""); if(simpleName.length() > 0 && simpleName.matches("[0-9a-zA-Z\\.\\$_]*")){ ReplaceRegion region = new ReplaceRegion(offset + beginIndex, simpleName.length(), simpleName); regions.add(region);
protected boolean addImportDeclaration(final ContentAssistEntry entry, final ITextRegion importSectionRegion, final ITypeDescriptor typeDesc, final String qualifiedName, final ContentAssistContext context) { boolean _xblockexpression = false; { int _offset = importSectionRegion.getOffset(); int _length = importSectionRegion.getLength(); final int insertionOffset = (_offset + _length); final String declaration = ("\nimport " + qualifiedName); ArrayList<ReplaceRegion> _textReplacements = entry.getTextReplacements(); ReplaceRegion _replaceRegion = new ReplaceRegion(insertionOffset, 0, declaration); _xblockexpression = _textReplacements.add(_replaceRegion); } return _xblockexpression; } }
public ReplaceRegion serializeReplacement(EObject obj, SaveOptions options) { TokenStringBuffer tokenStringBuffer = new TokenStringBuffer(); try { TreeConstructionReport report = serialize(obj, tokenStringBuffer, options); return new ReplaceRegion(report.getPreviousLocation(), tokenStringBuffer.toString()); } catch (IOException e) { throw new RuntimeException(e); } }
public ReplaceRegion serializeReplacement(EObject obj, SaveOptions options) { ICompositeNode node = NodeModelUtils.findActualNodeFor(obj); if (node == null) { throw new IllegalStateException("Cannot replace an obj that has no associated node"); } String text = serialize(obj, options); return new ReplaceRegion(node.getTotalOffset(), node.getTotalLength(), text); }
public List<ReplaceRegion> rewrite() { removeObsoleteStaticImports(); final List<ReplaceRegion> replaceRegions = newArrayList(); if (isSort) { List<XImportDeclaration> allImportDeclarations = newArrayList(); allImportDeclarations.addAll(originalImportDeclarations); allImportDeclarations.addAll(addedImportDeclarations); allImportDeclarations.removeAll(removedImportDeclarations); String newImportSection = serializeImports(allImportDeclarations); importRegion = regionUtil.addLeadingWhitespace(importRegion, resource); importRegion = regionUtil.addTrailingWhitespace(importRegion, resource); return singletonList(new ReplaceRegion(importRegion, newImportSection)); } else { for (XImportDeclaration removedImportDeclaration : removedImportDeclarations) { ICompositeNode node = NodeModelUtils.findActualNodeFor(removedImportDeclaration); if (node != null) { ITextRegion textRegion = node.getTextRegion(); textRegion = regionUtil.addTrailingSingleWhitespace(textRegion, lineSeparator, resource); replaceRegions.add(new ReplaceRegion(textRegion, "")); } } addSectionToAppend(new IAcceptor<ReplaceRegion>() { @Override public void accept(ReplaceRegion t) { replaceRegions.add(t); } }); } return replaceRegions; }
public void update(int offset, int replacedTextLength, String newText) { if (!isLoaded()) { throw new IllegalStateException("You can't update an unloaded resource."); } try { isUpdating = true; IParseResult oldParseResult = parseResult; ReplaceRegion replaceRegion = new ReplaceRegion(new TextRegion(offset, replacedTextLength), newText); IParseResult newParseResult = parser.reparse(oldParseResult, replaceRegion); updateInternalState(oldParseResult, newParseResult); } finally { isUpdating = false; } }
@Override public String processFile(String completeData, String data, int offset, int len, String change) throws Exception { IParseResult initialParseResult = parser.parse(new StringReader(data)); String newData = applyDelta(data, offset, len, change); ReplaceRegion replaceRegion = new ReplaceRegion(offset, len, change); try { IParseResult reparsed = parser.reparse(initialParseResult, replaceRegion); IParseResult parsedFromScratch = parser.parse(new StringReader(newData)); assertEqual(data, newData, parsedFromScratch, reparsed); return newData; } catch(Throwable e) { ComparisonFailure throwMe = new ComparisonFailure(e.getMessage(), newData, replaceRegion + DELIM + data); throwMe.initCause(e); throw throwMe; } }
protected void addSectionToAppend(IAcceptor<ReplaceRegion> acceptor) { StringBuilder importDeclarationsToAppend = getImportDeclarationsToAppend(); if (importDeclarationsToAppend.length() == 0) return; importRegion = regionUtil.addLeadingWhitespace(importRegion, resource); importRegion = regionUtil.addTrailingSingleWhitespace(importRegion, lineSeparator, resource); int insertOffset = importRegion.getOffset() + importRegion.getLength(); if (insertOffset != 0 && originalImportDeclarations.isEmpty()) importDeclarationsToAppend.insert(0, lineSeparator); importDeclarationsToAppend.append(lineSeparator); int insertLength = -importRegion.getLength(); insertLength += regionUtil.addTrailingWhitespace(importRegion, resource).getLength(); ReplaceRegion appendDeclarations = new ReplaceRegion(new TextRegion(insertOffset, insertLength), importDeclarationsToAppend.toString()); acceptor.accept(appendDeclarations); }
public ReplaceRegion getTokenReplaceRegion(String changedText, ReplaceRegion replaceRegion) { int lengthDelta = replaceRegion.getText().length() - replaceRegion.getLength(); ITextRegion tokenRegion = getTokenRegion(changedText, new TextRegion(replaceRegion.getOffset(), replaceRegion .getText().length())); if (tokenRegion.getOffset() == replaceRegion.getOffset() && tokenRegion.getLength() == replaceRegion.getText().length()) return replaceRegion; else return new ReplaceRegion(tokenRegion.getOffset(), tokenRegion.getLength() - lengthDelta, changedText.substring(tokenRegion.getOffset(), tokenRegion.getOffset() + tokenRegion.getLength())); }
@Override public void processInput(String input, DeltaScenarioProcessor tester) throws Exception { XtextResource resource = tester.get(XtextResource.class); resource.setURI(URI.createURI("dummy.uri")); try { resource.load(new StringInputStream(input, "UTF-8"), Collections.singletonMap(XtextResource.OPTION_ENCODING, "UTF-8")); } catch (Exception e) { Assert.fail(e.getMessage()); } ICompositeNode rootNode = resource.getParseResult().getRootNode(); ReplaceRegion region = null; for(INode node: rootNode.getAsTreeIterable()) { int offset = node.getTotalOffset(); int length = node.getTotalLength(); if (length != 0) { if (region == null || region.getOffset() != offset || region.getLength() != length) { region = new ReplaceRegion(offset, length, ""); if (Iterables.size(node.getLeafNodes()) > 1 && length > 1 && length != 3) { tester.processFile(input, input, offset, length, ""); } } } } } },
@Test public void testSkipNodesInBetweenWithoutResourceSet() throws Exception { for (String string : getSmokeTestModels()) { LazyLinkingResource resource = createResource(string); if (resource != null) { ICompositeNode rootNode = resource.getParseResult().getRootNode(); ReplaceRegion replaceRegion = null; for (INode node : rootNode.getAsTreeIterable()) { int offset = node.getTotalOffset(); int length = node.getTotalLength(); if (replaceRegion == null || replaceRegion.getOffset() != offset || replaceRegion.getLength() != length) { replaceRegion = new ReplaceRegion(offset, length, ""); StringBuilder builder = new StringBuilder(string); replaceRegion.applyTo(builder); processModelWithoutResourceSet(builder.toString()); } } } } }
@Test public void testSkipNodesInBetween() throws Exception { for (String string : getSmokeTestModels()) { LazyLinkingResource resource = createResource(string); if (resource != null) { ICompositeNode rootNode = resource.getParseResult().getRootNode(); ReplaceRegion replaceRegion = null; for (INode node : rootNode.getAsTreeIterable()) { int offset = node.getTotalOffset(); int length = node.getTotalLength(); if (replaceRegion == null || replaceRegion.getOffset() != offset || replaceRegion.getLength() != length) { replaceRegion = new ReplaceRegion(offset, length, ""); StringBuilder builder = new StringBuilder(string); replaceRegion.applyTo(builder); processModel(builder.toString()); } } } } }
@Test public void testSkipNodesInBetweenWithoutResourceSet() throws Exception { for (String string : getSmokeTestModels()) { LazyLinkingResource resource = createResource(string); if (resource != null) { ICompositeNode rootNode = resource.getParseResult().getRootNode(); ReplaceRegion replaceRegion = null; for (INode node : rootNode.getAsTreeIterable()) { int offset = node.getTotalOffset(); int length = node.getTotalLength(); if (replaceRegion == null || replaceRegion.getOffset() != offset || replaceRegion.getLength() != length) { replaceRegion = new ReplaceRegion(offset, length, ""); StringBuilder builder = new StringBuilder(string); replaceRegion.applyTo(builder); processModelWithoutResourceSet(builder.toString()); } } } } }
@Test public void testSkipNodesInBetween() throws Exception { for (String string : getSmokeTestModels()) { LazyLinkingResource resource = createResource(string); if (resource != null) { ICompositeNode rootNode = resource.getParseResult().getRootNode(); ReplaceRegion replaceRegion = null; for (INode node : rootNode.getAsTreeIterable()) { int offset = node.getTotalOffset(); int length = node.getTotalLength(); if (replaceRegion == null || replaceRegion.getOffset() != offset || replaceRegion.getLength() != length) { replaceRegion = new ReplaceRegion(offset, length, ""); StringBuilder builder = new StringBuilder(string); replaceRegion.applyTo(builder); processModel(builder.toString()); } } } } }
private ReplaceRegion getReplaceRegion(String nameToUse, String packageLocalName, JvmDeclaredType type, TypeUsage usage, RewritableImportSection importSection) { // if the resource contains two types with the same simple name, we don't add any import // but we can still use the package local name within the same package. // Except for inner types if (equal(usage.getContextPackageName(), type.getPackageName()) && type.getDeclaringType() == null) { if (type.eContainer() != null) { String declarationLocalName = getLocalName(type, usage.getContext()); nameToUse = declarationLocalName; } else if (importSection.getImportedTypes(packageLocalName) == null) { nameToUse = packageLocalName; } } String textToUse = getConcreteSyntax(nameToUse, type, usage); return new ReplaceRegion(usage.getTextRegion(), textToUse); }