Search in sources :

Example 1 with ITokenStream

use of org.eclipse.xtext.parsetree.reconstr.ITokenStream in project xtext-core by eclipse.

the class DefaultNodeModelFormatter method format.

@Override
public IFormattedRegion format(ICompositeNode root, int offset, int length) {
    String indent = getIndentation(root, offset);
    TokenStringBuffer buf = new TokenStringBuffer();
    ITokenStream out = offset == 0 ? buf : new FilterFirstWhitespaceStream(buf);
    ITokenStream fmt;
    if (formatter instanceof IFormatterExtension) {
        EObject semanticElement = NodeModelUtils.findActualSemanticObjectFor(root);
        if (semanticElement != null)
            fmt = ((IFormatterExtension) formatter).createFormatterStream(semanticElement, indent, out, false);
        else {
            // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=380406
            ITextRegion rootRegion = root.getTextRegion();
            return new FormattedRegion(rootRegion.getOffset(), rootRegion.getLength(), root.getText());
        }
    } else
        fmt = formatter.createFormatterStream(indent, out, false);
    try {
        ITextRegion range = nodeModelStreamer.feedTokenStream(fmt, root, offset, length);
        return new FormattedRegion(range.getOffset(), range.getLength(), buf.toString());
    } catch (IOException e) {
        // this should never happen since TokenStringBuffer doesn't throw IOEs.
        throw new RuntimeException(e);
    }
}
Also used : ITokenStream(org.eclipse.xtext.parsetree.reconstr.ITokenStream) ITextRegion(org.eclipse.xtext.util.ITextRegion) EObject(org.eclipse.emf.ecore.EObject) IFormatterExtension(org.eclipse.xtext.formatting.IFormatterExtension) TokenStringBuffer(org.eclipse.xtext.parsetree.reconstr.impl.TokenStringBuffer) IOException(java.io.IOException)

Example 2 with ITokenStream

use of org.eclipse.xtext.parsetree.reconstr.ITokenStream in project xtext-core by eclipse.

the class Serializer method serialize.

protected void serialize(EObject obj, ITokenStream tokenStream, SaveOptions options) throws IOException {
    ISerializationDiagnostic.Acceptor errors = ISerializationDiagnostic.EXCEPTION_THROWING_ACCEPTOR;
    ITokenStream formatterTokenStream;
    if (formatter instanceof IFormatterExtension)
        formatterTokenStream = ((IFormatterExtension) formatter).createFormatterStream(obj, null, tokenStream, !options.isFormatting());
    else
        formatterTokenStream = formatter.createFormatterStream(null, tokenStream, !options.isFormatting());
    ISerializationContext context = getIContext(obj);
    ISequenceAcceptor acceptor = new TokenStreamSequenceAdapter(formatterTokenStream, grammar.getGrammar(), errors);
    serialize(context, obj, acceptor, errors);
    formatterTokenStream.flush();
}
Also used : ISerializationDiagnostic(org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic) ITokenStream(org.eclipse.xtext.parsetree.reconstr.ITokenStream) ISerializationContext(org.eclipse.xtext.serializer.ISerializationContext) IFormatterExtension(org.eclipse.xtext.formatting.IFormatterExtension) ISequenceAcceptor(org.eclipse.xtext.serializer.acceptor.ISequenceAcceptor) TokenStreamSequenceAdapter(org.eclipse.xtext.serializer.acceptor.TokenStreamSequenceAdapter)

Aggregations

IFormatterExtension (org.eclipse.xtext.formatting.IFormatterExtension)2 ITokenStream (org.eclipse.xtext.parsetree.reconstr.ITokenStream)2 IOException (java.io.IOException)1 EObject (org.eclipse.emf.ecore.EObject)1 TokenStringBuffer (org.eclipse.xtext.parsetree.reconstr.impl.TokenStringBuffer)1 ISerializationContext (org.eclipse.xtext.serializer.ISerializationContext)1 ISequenceAcceptor (org.eclipse.xtext.serializer.acceptor.ISequenceAcceptor)1 TokenStreamSequenceAdapter (org.eclipse.xtext.serializer.acceptor.TokenStreamSequenceAdapter)1 ISerializationDiagnostic (org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic)1 ITextRegion (org.eclipse.xtext.util.ITextRegion)1