Search in sources :

Example 1 with Range

use of org.eclipse.xtext.parser.impl.Range in project dsl-devkit by dsldevkit.

the class FixedPartialParsingHelper method calculatePartialParsingPointers.

public PartialParsingPointers calculatePartialParsingPointers(final IParseResult previousParseResult, final int offset, final int replacedTextLength) {
    int myOffset = offset;
    int myReplacedTextLength = replacedTextLength;
    ICompositeNode oldRootNode = previousParseResult.getRootNode();
    if (myOffset == oldRootNode.getTotalLength() && myOffset != 0) {
        // newText is appended, so look for the last original character instead
        --myOffset;
        myReplacedTextLength = 1;
    }
    // include any existing parse errors
    Range range = new Range(myOffset, myReplacedTextLength + myOffset);
    if (previousParseResult.hasSyntaxErrors()) {
        range.mergeAllSyntaxErrors(oldRootNode);
    }
    myOffset = range.getOffset();
    List<ICompositeNode> nodesEnclosingRegion = collectNodesEnclosingChangeRegion(oldRootNode, range);
    List<ICompositeNode> validReplaceRootNodes = internalFindValidReplaceRootNodeForChangeRegion(nodesEnclosingRegion, range);
    filterInvalidRootNodes(oldRootNode, validReplaceRootNodes);
    if (validReplaceRootNodes.isEmpty()) {
        validReplaceRootNodes = Collections.singletonList(oldRootNode);
    }
    return new PartialParsingPointers(oldRootNode, myOffset, myReplacedTextLength, validReplaceRootNodes, nodesEnclosingRegion);
}
Also used : ICompositeNode(org.eclipse.xtext.nodemodel.ICompositeNode) Range(org.eclipse.xtext.parser.impl.Range) PartialParsingPointers(org.eclipse.xtext.parser.impl.PartialParsingPointers)

Aggregations

ICompositeNode (org.eclipse.xtext.nodemodel.ICompositeNode)1 PartialParsingPointers (org.eclipse.xtext.parser.impl.PartialParsingPointers)1 Range (org.eclipse.xtext.parser.impl.Range)1