Token.java
package io.jstach.rainbowgum.pattern.internal;
import java.util.List;
import org.jspecify.annotations.Nullable;
/*
* Inspired by Logback's own Token class (ch.qos.logback.core.pattern.parser.Token),
* including its token-type int constants below.
*/
class Token {
static final int PERCENT = 37;
// static final int LEFT_PARENTHESIS = 40;
static final int RIGHT_PARENTHESIS = 41;
static final int MINUS = 45;
static final int DOT = 46;
static final int CURLY_LEFT = 123;
static final int CURLY_RIGHT = 125;
static final int LITERAL = 1000;
static final int FORMAT_MODIFIER = 1002;
static final int SIMPLE_KEYWORD = 1004;
static final int COMPOSITE_KEYWORD = 1005;
static final int OPTION = 1006;
static final int EOF = Integer.MAX_VALUE;
static Token EOF_TOKEN = new Token(EOF, "EOF");
static Token RIGHT_PARENTHESIS_TOKEN = new Token(RIGHT_PARENTHESIS);
// BARE as in naked. Used for formatting purposes
static Token BARE_COMPOSITE_KEYWORD_TOKEN = new Token(COMPOSITE_KEYWORD, "BARE");
static Token PERCENT_TOKEN = new Token(PERCENT);
private final int type;
private final @Nullable String value;
private final @Nullable List<String> optionsList;
Token(int type) {
this(type, null, null);
}
Token(int type, String value) {
this(type, value, null);
}
Token(int type, List<String> optionsList) {
this(type, null, optionsList);
}
private Token(int type, @Nullable String value, @Nullable List<String> optionsList) {
this.type = type;
this.value = value;
this.optionsList = optionsList;
}
public String value() {
String v = value;
if (v == null) {
throw new IllegalStateException("Parser expected a value but was null. Likely a bug");
}
return v;
}
public List<String> optionsList() {
var list = optionsList;
if (list == null) {
throw new IllegalStateException("Parser expected a option list but was null. Likely a bug");
}
return list;
}
public int type() {
return type;
}
public @Nullable String valueOrNull() {
return value;
}
public @Nullable List<String> optionsListOrNull() {
return optionsList;
}
}