Skip to content

Commit 7bd40bb

Browse files
committed
Remove redundant AST class
1 parent b62c523 commit 7bd40bb

File tree

8 files changed

+152
-159
lines changed

8 files changed

+152
-159
lines changed

java/src/main/java/io/cucumber/cucumberexpressions/Ast.java

Lines changed: 0 additions & 145 deletions
This file was deleted.

java/src/main/java/io/cucumber/cucumberexpressions/CucumberExpressionException.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.cucumber.cucumberexpressions;
22

3-
import io.cucumber.cucumberexpressions.Ast.Located;
4-
import io.cucumber.cucumberexpressions.Ast.Token;
53
import org.apiguardian.api.API;
64

75
@API(status = API.Status.STABLE)

java/src/main/java/io/cucumber/cucumberexpressions/CucumberExpressionParser.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.cucumber.cucumberexpressions;
22

3-
import io.cucumber.cucumberexpressions.Ast.Token;
43
import org.apiguardian.api.API;
54

65
import java.util.ArrayList;
@@ -11,14 +10,14 @@
1110
import static io.cucumber.cucumberexpressions.Node.Type.EXPRESSION_NODE;
1211
import static io.cucumber.cucumberexpressions.Node.Type.OPTIONAL_NODE;
1312
import static io.cucumber.cucumberexpressions.Node.Type.TEXT_NODE;
14-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.ALTERNATION;
15-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.BEGIN_OPTIONAL;
16-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.BEGIN_PARAMETER;
17-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.END_OF_LINE;
18-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.END_OPTIONAL;
19-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.END_PARAMETER;
20-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.START_OF_LINE;
21-
import static io.cucumber.cucumberexpressions.Ast.Token.Type.WHITE_SPACE;
13+
import static io.cucumber.cucumberexpressions.Token.Type.ALTERNATION;
14+
import static io.cucumber.cucumberexpressions.Token.Type.BEGIN_OPTIONAL;
15+
import static io.cucumber.cucumberexpressions.Token.Type.BEGIN_PARAMETER;
16+
import static io.cucumber.cucumberexpressions.Token.Type.END_OF_LINE;
17+
import static io.cucumber.cucumberexpressions.Token.Type.END_OPTIONAL;
18+
import static io.cucumber.cucumberexpressions.Token.Type.END_PARAMETER;
19+
import static io.cucumber.cucumberexpressions.Token.Type.START_OF_LINE;
20+
import static io.cucumber.cucumberexpressions.Token.Type.WHITE_SPACE;
2221
import static io.cucumber.cucumberexpressions.CucumberExpressionException.createAlternationNotAllowedInOptional;
2322
import static io.cucumber.cucumberexpressions.CucumberExpressionException.createInvalidParameterTypeName;
2423
import static io.cucumber.cucumberexpressions.CucumberExpressionException.createMissingEndToken;

java/src/main/java/io/cucumber/cucumberexpressions/CucumberExpressionTokenizer.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.cucumber.cucumberexpressions;
22

3-
import io.cucumber.cucumberexpressions.Ast.Token;
43
import org.jspecify.annotations.Nullable;
54

65
import java.util.ArrayList;
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.cucumber.cucumberexpressions;
2+
3+
interface Located {
4+
5+
int start();
6+
7+
int end();
8+
9+
}

java/src/main/java/io/cucumber/cucumberexpressions/Node.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import static org.apiguardian.api.API.Status.EXPERIMENTAL;
1212

1313
@API(since = "18.1", status = EXPERIMENTAL)
14-
public final class Node implements Ast.Located {
14+
public final class Node implements Located {
1515

1616
private final Type type;
1717
private final @Nullable List<Node> nodes;
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
package io.cucumber.cucumberexpressions;
2+
3+
import org.jspecify.annotations.Nullable;
4+
5+
import java.util.Objects;
6+
import java.util.StringJoiner;
7+
8+
import static java.util.Objects.requireNonNull;
9+
10+
final class Token implements Located {
11+
12+
private static final char escapeCharacter = '\\';
13+
private static final char alternationCharacter = '/';
14+
private static final char beginParameterCharacter = '{';
15+
private static final char endParameterCharacter = '}';
16+
private static final char beginOptionalCharacter = '(';
17+
private static final char endOptionalCharacter = ')';
18+
19+
final String text;
20+
final Type type;
21+
final int start;
22+
final int end;
23+
24+
Token(String text, Type type, int start, int end) {
25+
this.text = requireNonNull(text);
26+
this.type = requireNonNull(type);
27+
this.start = start;
28+
this.end = end;
29+
}
30+
31+
static boolean canEscape(Integer token) {
32+
if (Character.isWhitespace(token)) {
33+
return true;
34+
}
35+
return switch (token) {
36+
case (int) escapeCharacter,
37+
(int) alternationCharacter,
38+
(int) beginParameterCharacter,
39+
(int) endParameterCharacter,
40+
(int) beginOptionalCharacter,
41+
(int) endOptionalCharacter -> true;
42+
default -> false;
43+
};
44+
}
45+
46+
static Type typeOf(Integer token) {
47+
if (Character.isWhitespace(token)) {
48+
return Type.WHITE_SPACE;
49+
}
50+
return switch (token) {
51+
case (int) alternationCharacter -> Type.ALTERNATION;
52+
case (int) beginParameterCharacter -> Type.BEGIN_PARAMETER;
53+
case (int) endParameterCharacter -> Type.END_PARAMETER;
54+
case (int) beginOptionalCharacter -> Type.BEGIN_OPTIONAL;
55+
case (int) endOptionalCharacter -> Type.END_OPTIONAL;
56+
default -> Type.TEXT;
57+
};
58+
}
59+
60+
static boolean isEscapeCharacter(int token) {
61+
return token == escapeCharacter;
62+
}
63+
64+
@Override
65+
public int start() {
66+
return start;
67+
}
68+
69+
@Override
70+
public int end() {
71+
return end;
72+
}
73+
74+
@Override
75+
public boolean equals(Object o) {
76+
if (this == o)
77+
return true;
78+
if (o == null || getClass() != o.getClass())
79+
return false;
80+
Token token = (Token) o;
81+
return start == token.start &&
82+
end == token.end &&
83+
text.equals(token.text) &&
84+
type == token.type;
85+
}
86+
87+
@Override
88+
public int hashCode() {
89+
return Objects.hash(start, end, text, type);
90+
}
91+
92+
@Override
93+
public String toString() {
94+
return new StringJoiner(", ", "{", "}")
95+
.add("\"type\": \"" + type + "\"")
96+
.add("\"start\": " + start)
97+
.add("\"end\": " + end)
98+
.add("\"text\": \"" + text + "\"")
99+
.toString();
100+
}
101+
102+
enum Type {
103+
START_OF_LINE,
104+
END_OF_LINE,
105+
WHITE_SPACE,
106+
BEGIN_OPTIONAL("" + beginOptionalCharacter, "optional text"),
107+
END_OPTIONAL("" + endOptionalCharacter, "optional text"),
108+
BEGIN_PARAMETER("" + beginParameterCharacter, "a parameter"),
109+
END_PARAMETER("" + endParameterCharacter, "a parameter"),
110+
ALTERNATION("" + alternationCharacter, "alternation"),
111+
TEXT;
112+
113+
private final @Nullable String symbol;
114+
private final @Nullable String purpose;
115+
116+
Type() {
117+
this(null, null);
118+
}
119+
120+
Type(@Nullable String symbol, @Nullable String purpose) {
121+
this.symbol = symbol;
122+
this.purpose = purpose;
123+
}
124+
125+
String purpose() {
126+
return requireNonNull(purpose, name() + " does not have a purpose");
127+
}
128+
129+
String symbol() {
130+
return requireNonNull(symbol, name() + " does not have a symbol");
131+
}
132+
}
133+
134+
}

java/src/test/java/io/cucumber/cucumberexpressions/CucumberExpressionTokenizerTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.cucumber.cucumberexpressions;
22

3-
import io.cucumber.cucumberexpressions.Ast.Token;
43
import org.jspecify.annotations.NullMarked;
54
import org.jspecify.annotations.Nullable;
65
import org.junit.jupiter.api.extension.ParameterContext;

0 commit comments

Comments
 (0)