Skip to content

Commit f3cc6b0

Browse files
authored
java: Replace custom Func with Supplier (cucumber#389)
The `Func` class was a necessary in Java 7, but with Java 8+ can be replaced with a functional interface.
1 parent bbfafed commit f3cc6b0

File tree

3 files changed

+59
-123
lines changed

3 files changed

+59
-123
lines changed

java/gherkin-java.razor

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ import java.util.ArrayList;
4141
import java.util.LinkedList;
4242
import java.util.List;
4343
import java.util.Queue;
44+
import java.util.function.Supplier;
4445

4546
import static java.util.Arrays.asList;
4647

@@ -146,13 +147,13 @@ class @Model.ParserClassName<T> {
146147
throw new ParserException.CompositeParserException(context.errors);
147148
}
148149

149-
private <V> V handleAstError(ParserContext context, final Func<V> action) {
150-
return handleExternalError(context, action, null);
150+
private void handleAstError(ParserContext context, final Supplier<Void> action) {
151+
handleExternalError(context, null, action);
151152
}
152153

153-
private <V> V handleExternalError(ParserContext context, Func<V> action, V defaultValue) {
154+
private <V> V handleExternalError(ParserContext context, V defaultValue, Supplier<V> action) {
154155
try {
155-
return action.call();
156+
return action.get();
156157
} catch (ParserException.CompositeParserException compositeParserException) {
157158
for (ParserException error : compositeParserException.errors) {
158159
addError(context, error);
@@ -164,49 +165,39 @@ class @Model.ParserClassName<T> {
164165
}
165166

166167
private void build(final ParserContext context, final Token token) {
167-
handleAstError(context, new Func<Void>() {
168-
public Void call() {
169-
builder.build(token);
170-
return null;
171-
}
168+
handleAstError(context, () -> {
169+
builder.build(token);
170+
return null;
172171
});
173172
}
174173

175174
private void startRule(final ParserContext context, final RuleType ruleType) {
176-
handleAstError(context, new Func<Void>() {
177-
public Void call() {
178-
builder.startRule(ruleType);
179-
return null;
180-
}
175+
handleAstError(context, () -> {
176+
builder.startRule(ruleType);
177+
return null;
181178
});
182179
}
183180

184181
private void endRule(final ParserContext context, final RuleType ruleType) {
185-
handleAstError(context, new Func<Void>() {
186-
public Void call() {
187-
builder.endRule(ruleType);
188-
return null;
189-
}
182+
handleAstError(context, () -> {
183+
builder.endRule(ruleType);
184+
return null;
190185
});
191186
}
192187

193188
private Token readToken(ParserContext context) {
194189
return context.tokenQueue.isEmpty() ? context.tokenScanner.read() : context.tokenQueue.remove();
195190
}
196-
197191
@foreach(var rule in Model.RuleSet.TokenRules)
198192
{<text>
199193
private boolean match_@(rule.Name.Replace("#", ""))(final ParserContext context, final Token token) {
200194
@if (rule.Name != "#EOF")
201195
{
202196
@:if (token.isEOF()) return false;
203197
}
204-
return handleExternalError(context, new Func<Boolean>() {
205-
public Boolean call() {
206-
return context.tokenMatcher.match_@(rule.Name.Replace("#", ""))(token);
207-
}
208-
}, false);
209-
}</text>
198+
return handleExternalError(context, false, () -> context.tokenMatcher.match_@(rule.Name.Replace("#", ""))(token));
199+
}
200+
</text>
210201
}
211202

212203
private int matchToken(int state, Token token, ParserContext context) {
@@ -223,7 +214,6 @@ class @Model.ParserClassName<T> {
223214
}
224215
return newState;
225216
}
226-
227217
@foreach(var state in Model.States.Values.Where(s => !s.IsEndState))
228218
{
229219
<text>

java/src/main/java/io/cucumber/gherkin/Func.java

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

java/src/main/java/io/cucumber/gherkin/Parser.java

Lines changed: 42 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.LinkedList;
1414
import java.util.List;
1515
import java.util.Queue;
16+
import java.util.function.Supplier;
1617

1718
import static java.util.Arrays.asList;
1819

@@ -160,13 +161,13 @@ private void addError(ParserContext context, ParserException error) {
160161
throw new ParserException.CompositeParserException(context.errors);
161162
}
162163

163-
private <V> V handleAstError(ParserContext context, final Func<V> action) {
164-
return handleExternalError(context, action, null);
164+
private void handleAstError(ParserContext context, final Supplier<Void> action) {
165+
handleExternalError(context, null, action);
165166
}
166167

167-
private <V> V handleExternalError(ParserContext context, Func<V> action, V defaultValue) {
168+
private <V> V handleExternalError(ParserContext context, V defaultValue, Supplier<V> action) {
168169
try {
169-
return action.call();
170+
return action.get();
170171
} catch (ParserException.CompositeParserException compositeParserException) {
171172
for (ParserException error : compositeParserException.errors) {
172173
addError(context, error);
@@ -178,148 +179,99 @@ private <V> V handleExternalError(ParserContext context, Func<V> action, V defau
178179
}
179180

180181
private void build(final ParserContext context, final Token token) {
181-
handleAstError(context, new Func<Void>() {
182-
public Void call() {
183-
builder.build(token);
184-
return null;
185-
}
182+
handleAstError(context, () -> {
183+
builder.build(token);
184+
return null;
186185
});
187186
}
188187

189188
private void startRule(final ParserContext context, final RuleType ruleType) {
190-
handleAstError(context, new Func<Void>() {
191-
public Void call() {
192-
builder.startRule(ruleType);
193-
return null;
194-
}
189+
handleAstError(context, () -> {
190+
builder.startRule(ruleType);
191+
return null;
195192
});
196193
}
197194

198195
private void endRule(final ParserContext context, final RuleType ruleType) {
199-
handleAstError(context, new Func<Void>() {
200-
public Void call() {
201-
builder.endRule(ruleType);
202-
return null;
203-
}
196+
handleAstError(context, () -> {
197+
builder.endRule(ruleType);
198+
return null;
204199
});
205200
}
206201

207202
private Token readToken(ParserContext context) {
208203
return context.tokenQueue.isEmpty() ? context.tokenScanner.read() : context.tokenQueue.remove();
209204
}
210205

211-
212206
private boolean match_EOF(final ParserContext context, final Token token) {
213-
return handleExternalError(context, new Func<Boolean>() {
214-
public Boolean call() {
215-
return context.tokenMatcher.match_EOF(token);
216-
}
217-
}, false);
207+
return handleExternalError(context, false, () -> context.tokenMatcher.match_EOF(token));
218208
}
209+
219210
private boolean match_Empty(final ParserContext context, final Token token) {
220211
if (token.isEOF()) return false;
221-
return handleExternalError(context, new Func<Boolean>() {
222-
public Boolean call() {
223-
return context.tokenMatcher.match_Empty(token);
224-
}
225-
}, false);
212+
return handleExternalError(context, false, () -> context.tokenMatcher.match_Empty(token));
226213
}
214+
227215
private boolean match_Comment(final ParserContext context, final Token token) {
228216
if (token.isEOF()) return false;
229-
return handleExternalError(context, new Func<Boolean>() {
230-
public Boolean call() {
231-
return context.tokenMatcher.match_Comment(token);
232-
}
233-
}, false);
217+
return handleExternalError(context, false, () -> context.tokenMatcher.match_Comment(token));
234218
}
219+
235220
private boolean match_TagLine(final ParserContext context, final Token token) {
236221
if (token.isEOF()) return false;
237-
return handleExternalError(context, new Func<Boolean>() {
238-
public Boolean call() {
239-
return context.tokenMatcher.match_TagLine(token);
240-
}
241-
}, false);
222+
return handleExternalError(context, false, () -> context.tokenMatcher.match_TagLine(token));
242223
}
224+
243225
private boolean match_FeatureLine(final ParserContext context, final Token token) {
244226
if (token.isEOF()) return false;
245-
return handleExternalError(context, new Func<Boolean>() {
246-
public Boolean call() {
247-
return context.tokenMatcher.match_FeatureLine(token);
248-
}
249-
}, false);
227+
return handleExternalError(context, false, () -> context.tokenMatcher.match_FeatureLine(token));
250228
}
229+
251230
private boolean match_RuleLine(final ParserContext context, final Token token) {
252231
if (token.isEOF()) return false;
253-
return handleExternalError(context, new Func<Boolean>() {
254-
public Boolean call() {
255-
return context.tokenMatcher.match_RuleLine(token);
256-
}
257-
}, false);
232+
return handleExternalError(context, false, () -> context.tokenMatcher.match_RuleLine(token));
258233
}
234+
259235
private boolean match_BackgroundLine(final ParserContext context, final Token token) {
260236
if (token.isEOF()) return false;
261-
return handleExternalError(context, new Func<Boolean>() {
262-
public Boolean call() {
263-
return context.tokenMatcher.match_BackgroundLine(token);
264-
}
265-
}, false);
237+
return handleExternalError(context, false, () -> context.tokenMatcher.match_BackgroundLine(token));
266238
}
239+
267240
private boolean match_ScenarioLine(final ParserContext context, final Token token) {
268241
if (token.isEOF()) return false;
269-
return handleExternalError(context, new Func<Boolean>() {
270-
public Boolean call() {
271-
return context.tokenMatcher.match_ScenarioLine(token);
272-
}
273-
}, false);
242+
return handleExternalError(context, false, () -> context.tokenMatcher.match_ScenarioLine(token));
274243
}
244+
275245
private boolean match_ExamplesLine(final ParserContext context, final Token token) {
276246
if (token.isEOF()) return false;
277-
return handleExternalError(context, new Func<Boolean>() {
278-
public Boolean call() {
279-
return context.tokenMatcher.match_ExamplesLine(token);
280-
}
281-
}, false);
247+
return handleExternalError(context, false, () -> context.tokenMatcher.match_ExamplesLine(token));
282248
}
249+
283250
private boolean match_StepLine(final ParserContext context, final Token token) {
284251
if (token.isEOF()) return false;
285-
return handleExternalError(context, new Func<Boolean>() {
286-
public Boolean call() {
287-
return context.tokenMatcher.match_StepLine(token);
288-
}
289-
}, false);
252+
return handleExternalError(context, false, () -> context.tokenMatcher.match_StepLine(token));
290253
}
254+
291255
private boolean match_DocStringSeparator(final ParserContext context, final Token token) {
292256
if (token.isEOF()) return false;
293-
return handleExternalError(context, new Func<Boolean>() {
294-
public Boolean call() {
295-
return context.tokenMatcher.match_DocStringSeparator(token);
296-
}
297-
}, false);
257+
return handleExternalError(context, false, () -> context.tokenMatcher.match_DocStringSeparator(token));
298258
}
259+
299260
private boolean match_TableRow(final ParserContext context, final Token token) {
300261
if (token.isEOF()) return false;
301-
return handleExternalError(context, new Func<Boolean>() {
302-
public Boolean call() {
303-
return context.tokenMatcher.match_TableRow(token);
304-
}
305-
}, false);
262+
return handleExternalError(context, false, () -> context.tokenMatcher.match_TableRow(token));
306263
}
264+
307265
private boolean match_Language(final ParserContext context, final Token token) {
308266
if (token.isEOF()) return false;
309-
return handleExternalError(context, new Func<Boolean>() {
310-
public Boolean call() {
311-
return context.tokenMatcher.match_Language(token);
312-
}
313-
}, false);
267+
return handleExternalError(context, false, () -> context.tokenMatcher.match_Language(token));
314268
}
269+
315270
private boolean match_Other(final ParserContext context, final Token token) {
316271
if (token.isEOF()) return false;
317-
return handleExternalError(context, new Func<Boolean>() {
318-
public Boolean call() {
319-
return context.tokenMatcher.match_Other(token);
320-
}
321-
}, false);
272+
return handleExternalError(context, false, () -> context.tokenMatcher.match_Other(token));
322273
}
274+
323275
private int matchToken(int state, Token token, ParserContext context) {
324276
int newState;
325277
switch (state) {
@@ -455,7 +407,6 @@ private int matchToken(int state, Token token, ParserContext context) {
455407
return newState;
456408
}
457409

458-
459410
// Start
460411
private int matchTokenAt_0(Token token, ParserContext context) {
461412
if (match_EOF(context, token))

0 commit comments

Comments
 (0)