Search in sources :

Example 1 with IndentationLocatorStart

use of org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorStart in project xtext-core by eclipse.

the class FormattingConfigBasedStream method collectLocators.

protected Set<ElementLocator> collectLocators(EObject ele) {
    Set<ElementLocator> result = Sets.newHashSet(activeRangeLocators);
    Collection<ElementLocator> loc = Sets.newHashSet();
    if (ele instanceof AbstractElement)
        for (ElementPattern pattern : matcher.matchNext((AbstractElement) ele)) loc.add(pattern.getLocator());
    if ((last instanceof AbstractRule && hiddenTokenHelper.isComment((AbstractRule) last)) || (ele instanceof AbstractRule && hiddenTokenHelper.isComment((AbstractRule) ele)))
        loc = collectLocatorsForComments(loc, last, ele);
    last = ele;
    for (ElementLocator locator : loc) if (locator.getType() == LocatorType.RANGE && !activeRangeLocators.add(locator))
        activeRangeLocators.remove(locator);
    result.addAll(loc);
    for (ElementLocator locator : result) {
        if (locator instanceof IndentationLocatorStart)
            indentationLevel++;
        else if (locator instanceof IndentationLocatorEnd)
            indentationLevel--;
    }
    return result;
}
Also used : AbstractElement(org.eclipse.xtext.AbstractElement) ElementLocator(org.eclipse.xtext.formatting.impl.AbstractFormattingConfig.ElementLocator) ElementPattern(org.eclipse.xtext.formatting.impl.AbstractFormattingConfig.ElementPattern) AbstractRule(org.eclipse.xtext.AbstractRule) IndentationLocatorStart(org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorStart) IndentationLocatorEnd(org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorEnd)

Example 2 with IndentationLocatorStart

use of org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorStart in project xtext-core by eclipse.

the class FormattingConfigBasedStream method collectLocatorsForComments.

protected Set<ElementLocator> collectLocatorsForComments(Collection<ElementLocator> semanticLocators, EObject left, EObject right) {
    Set<ElementLocator> result = Sets.newHashSet();
    for (ElementLocator semantic : semanticLocators) if (semantic instanceof IndentationLocatorStart || semantic instanceof IndentationLocatorEnd || (semantic.getRight() != null && semantic.getRight() == right) || (semantic.getLeft() != null && semantic.getLeft() == left))
        result.add(semantic);
    if (left != null)
        result.addAll(cfg.getLocatorsForCommentTokensAfter(left));
    if (right != null) {
        List<ElementLocator> leadingElementLocators = cfg.getLocatorsForCommentTokensBefore(right);
        for (Iterator<ElementLocator> i = result.iterator(); i.hasNext(); ) {
            ElementLocator locator = i.next();
            if (locator.getType() == LocatorType.BETWEEN && !leadingElementLocators.contains(locator))
                i.remove();
        }
        for (Iterator<ElementLocator> i = leadingElementLocators.iterator(); i.hasNext(); ) {
            if (i.next().getType() == LocatorType.BETWEEN)
                i.remove();
        }
        result.addAll(leadingElementLocators);
    }
    return result;
}
Also used : ElementLocator(org.eclipse.xtext.formatting.impl.AbstractFormattingConfig.ElementLocator) IndentationLocatorStart(org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorStart) IndentationLocatorEnd(org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorEnd)

Aggregations

ElementLocator (org.eclipse.xtext.formatting.impl.AbstractFormattingConfig.ElementLocator)2 IndentationLocatorEnd (org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorEnd)2 IndentationLocatorStart (org.eclipse.xtext.formatting.impl.FormattingConfig.IndentationLocatorStart)2 AbstractElement (org.eclipse.xtext.AbstractElement)1 AbstractRule (org.eclipse.xtext.AbstractRule)1 ElementPattern (org.eclipse.xtext.formatting.impl.AbstractFormattingConfig.ElementPattern)1