protected void removeNullEdits(XtextResource resource, List<ReplaceRegion> changes) { Iterator<ReplaceRegion> iterator = changes.iterator(); String document = resource.getParseResult().getRootNode().getText(); while(iterator.hasNext()) { ReplaceRegion region = iterator.next(); if (region.getText().equals(document.substring(region.getOffset(), region.getEndOffset()))) { iterator.remove(); } } }
private boolean isNullEdit(INode oldRootNode, ReplaceRegion replaceRegion) { if (replaceRegion.getLength() == replaceRegion.getText().length()) { String replacedText = oldRootNode.getText().substring(replaceRegion.getOffset(), replaceRegion.getEndOffset()); if (replaceRegion.getText().equals(replacedText)) { return true; } } return false; }
protected List<TextEdit> getObjectEdits() { final Collection<EObject> modifiedObjects = getModifiedObjects(); Collection<EObject> topLevelObjects = EcoreUtil.filterDescendants(modifiedObjects); Iterable<EObject> containedModifiedObjects = Iterables.filter(topLevelObjects, new Predicate<EObject>() { public boolean apply(EObject input) { return input.eResource() == resource; } }); List<TextEdit> edits = Lists.newArrayListWithExpectedSize(Iterables.size(containedModifiedObjects)); for (EObject modifiedObject : containedModifiedObjects) { ReplaceRegion replaceRegion = serializer.serializeReplacement(modifiedObject, getSaveOptions()); TextEdit edit = new ReplaceEdit(replaceRegion.getOffset(), replaceRegion.getLength(), replaceRegion.getText()); edits.add(edit); } return edits; }
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 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()); } } } } }
return fullyReparse(parser, previousParseResult, changedRegion); if (changedRegion.getOffset() >= oldRootNode.getTotalLength() && changedRegion.getText().trim().length() == 0) { return fullyReparse(parser, previousParseResult, changedRegion); return previousParseResult; PartialParsingPointers parsingPointers = calculatePartialParsingPointers(previousParseResult, replaceRegion.getOffset(), replaceRegion.getLength()); List<ICompositeNode> validReplaceRootNodes = parsingPointers.getValidReplaceRootNodes(); ICompositeNode oldCompositeNode = null;
@Override public IParseResult reparse(IParser parser, IParseResult previousParseResult, ReplaceRegion changedRegion) { if (isBrokenPreviousState(previousParseResult, changedRegion.getOffset())) { return fullyReparse(parser, previousParseResult, changedRegion); ILeafNode leftNode = getLeftNode(leafNodes, changedRegion.getOffset()); if (leftNode == null) { return fullyReparse(parser, previousParseResult, changedRegion);
@Check public void checkJavaDocRefs(XtendMember member){ if(isIgnored(IssueCodes.JAVA_DOC_LINKING_DIAGNOSTIC)) return; List<INode> documentationNodes = ((IEObjectDocumentationProviderExtension) documentationProvider).getDocumentationNodes(member); for(INode node : documentationNodes){ for(ReplaceRegion region : javaDocTypeReferenceProvider.computeTypeRefRegions(node)){ String typeRefString = region.getText(); if(typeRefString != null && typeRefString.length() > 0){ IScope scope = scopeProvider.getScope(member, TypesPackage.Literals.JVM_PARAMETERIZED_TYPE_REFERENCE__TYPE); IEObjectDescription candidate = scope.getSingleElement(qualifiedNameConverter.toQualifiedName(typeRefString)); if(candidate == null){ Severity severity = getIssueSeverities(getContext(), getCurrentObject()).getSeverity(IssueCodes.JAVA_DOC_LINKING_DIAGNOSTIC); if (severity != null) getChain().add(createDiagnostic(severity, "javaDoc: " + typeRefString + " cannot be resolved to a type", member, region.getOffset(), region.getLength(), IssueCodes.JAVA_DOC_LINKING_DIAGNOSTIC)); } } } } }
for (final ReplaceRegion docTypeReference : _computeTypeRefRegions) { int _offset = docTypeReference.getOffset(); int _length = docTypeReference.getLength(); final TextRegion referenceRange = new TextRegion(_offset, _length);
protected void addJavaDocReferences(EObject element) { if(element != null && documentationProvider != null && currentThisType != null) { for(INode documentationNode: documentationProvider.getDocumentationNodes(element)) { for(ReplaceRegion docTypeReference: javaDocTypeReferenceProvider.computeTypeRefRegions(documentationNode)) { String docTypeText = docTypeReference.getText(); IScope scope = scopeProvider.getScope(element, TypesPackage.Literals.JVM_PARAMETERIZED_TYPE_REFERENCE__TYPE); IEObjectDescription singleElement = scope.getSingleElement(QualifiedName.create(docTypeText)); ITextRegion textRegion = new TextRegion(docTypeReference.getOffset(), docTypeReference.getLength()); JvmType jvmType = null; if (singleElement != null) { jvmType = (JvmType) singleElement.getEObjectOrProxy(); } if(jvmType instanceof JvmDeclaredType && !jvmType.eIsProxy()) { PreferredType preferredType = findPreferredType((JvmDeclaredType) jvmType, docTypeText); if (preferredType.referencedType != null) { acceptType(preferredType.referencedType, preferredType.usedType, textRegion); } else { typeUsages.addUnresolved(docTypeText, "", textRegion, currentThisType); } } else { typeUsages.addUnresolved(docTypeText, "", textRegion, currentThisType); } } } } }