Search in sources :

Example 21 with Token

use of net.morimekta.providence.serializer.pretty.Token in project providence by morimekta.

the class ThriftTokenizerTest method testJavaComments.

@Test
public void testJavaComments() throws IOException {
    try {
        tokenizer("/").next();
        fail("no exception");
    } catch (ParseException e) {
        assertThat(e.asString(), is("Error on line 1, pos 2: Expected java-style comment, got end of file\n" + "/\n" + "-^"));
    }
    try {
        tokenizer("/b").next();
        fail("no exception");
    } catch (ParseException e) {
        assertThat(e.asString(), is("Error on line 1, pos 1: Expected java-style comment, got 'b' after '/'\n" + "/b\n" + "^^"));
    }
    Token token = tokenizer("\n\n// b\n").next();
    assertThat(token, is(notNullValue()));
    assertThat(token.asString(), is("//"));
}
Also used : Token(net.morimekta.providence.serializer.pretty.Token) ParseException(net.morimekta.providence.reflect.parser.ParseException) Test(org.junit.Test)

Example 22 with Token

use of net.morimekta.providence.serializer.pretty.Token in project providence by morimekta.

the class ThriftTokenizer method parseValue.

public Token parseValue() throws IOException {
    Stack<Character> enclosures = new Stack<>();
    int startLineNo = 0;
    int startLinePos = 0;
    int offset = -1;
    while (true) {
        Token token = expect("const value");
        if (offset < 0) {
            offset = token.getOffset();
            startLineNo = token.getLineNo();
            startLinePos = token.getLinePos();
        }
        if (token.strEquals(kBlockCommentStart)) {
            // ignore.
            parseDocBlock();
            continue;
        } else if (token.strEquals(kLineCommentStart)) {
            IOUtils.readString(this, Token.kNewLine);
            continue;
        } else if (token.isSymbol(Token.kMessageStart)) {
            enclosures.push(Token.kMessageEnd);
        } else if (token.isSymbol(Token.kListStart)) {
            enclosures.push(Token.kListEnd);
        } else if ((token.isSymbol(Token.kMessageEnd) || token.isSymbol(Token.kListEnd)) && enclosures.peek().equals(token.charAt(0))) {
            enclosures.pop();
        }
        if (enclosures.isEmpty()) {
            return token(offset, (token.getOffset() - offset) + token.length(), startLineNo, startLinePos);
        }
    }
}
Also used : Token(net.morimekta.providence.serializer.pretty.Token) Stack(java.util.Stack)

Aggregations

Token (net.morimekta.providence.serializer.pretty.Token)22 TokenizerException (net.morimekta.providence.serializer.pretty.TokenizerException)8 PMessage (net.morimekta.providence.PMessage)6 LinkedHashMap (java.util.LinkedHashMap)3 TreeSet (java.util.TreeSet)3 EnumType (net.morimekta.providence.model.EnumType)3 ServiceType (net.morimekta.providence.model.ServiceType)3 Tokenizer (net.morimekta.providence.serializer.pretty.Tokenizer)3 IOException (java.io.IOException)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 Map (java.util.Map)2 TreeMap (java.util.TreeMap)2 Nonnull (javax.annotation.Nonnull)2 PMessageBuilder (net.morimekta.providence.PMessageBuilder)2 PEnumDescriptor (net.morimekta.providence.descriptor.PEnumDescriptor)2 PField (net.morimekta.providence.descriptor.PField)2 PMessageDescriptor (net.morimekta.providence.descriptor.PMessageDescriptor)2 ConstType (net.morimekta.providence.model.ConstType)2 Declaration (net.morimekta.providence.model.Declaration)2