Skip to content

Commit 34ae451

Browse files
U117293U117293
U117293
authored and
U117293
committed
fix: corrected test-case and improved Locale creation performance for #2902
1 parent 0d1dea8 commit 34ae451

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

Diff for: cucumber-core/src/main/java/io/cucumber/core/runner/CachingGlue.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,11 @@ final class CachingGlue implements Glue {
8787
private final EventBus bus;
8888
private StepTypeRegistry stepTypeRegistry;
8989
private Locale locale = null;
90+
private int parameterTypeDefinitionsHashCode = 0;
91+
private int stepDefinitionsHashCode = 0;
92+
private int dataTableTypeDefinitionsHashCode = 0;
93+
private int docStringTypeDefinitionsHashCode = 0;
94+
private StepExpressionFactory stepExpressionFactory = null;
9095

9196
CachingGlue(EventBus bus) {
9297
this.bus = bus;
@@ -237,12 +242,7 @@ List<DocStringTypeDefinition> getDocStringTypeDefinitions() {
237242
StepTypeRegistry getStepTypeRegistry() {
238243
return stepTypeRegistry;
239244
}
240-
int parameterTypeDefinitionsHashCode = 0;
241-
int stepDefinitionsHashCode = 0;
242-
int dataTableTypeDefinitionsHashCode = 0;
243-
int docStringTypeDefinitionsHashCode = 0;
244245

245-
StepExpressionFactory stepExpressionFactory = null;
246246
void prepareGlue(Locale locale) throws DuplicateStepDefinitionException {
247247
int parameterTypeDefinitionsHashCodeNew = parameterTypeDefinitions.hashCode();
248248
int dataTableTypeDefinitionsHashCodeNew = dataTableTypeDefinitions.hashCode();

Diff for: cucumber-core/src/main/java/io/cucumber/core/runner/Runner.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,10 @@
2121
import java.net.URI;
2222
import java.util.ArrayList;
2323
import java.util.Collection;
24+
import java.util.HashMap;
2425
import java.util.List;
2526
import java.util.Locale;
27+
import java.util.Map;
2628
import java.util.Objects;
2729
import java.util.stream.Collectors;
2830

@@ -39,6 +41,7 @@ public final class Runner {
3941
private final Collection<? extends Backend> backends;
4042
private final Options runnerOptions;
4143
private final ObjectFactory objectFactory;
44+
private final Map<String, Locale> localeCache = new HashMap<>();
4245
private List<SnippetGenerator> snippetGenerators;
4346

4447
public Runner(
@@ -80,7 +83,7 @@ public void runPickle(Pickle pickle) {
8083

8184
private Locale localeForPickle(Pickle pickle) {
8285
String language = pickle.getLanguage();
83-
return new Locale(language);
86+
return localeCache.computeIfAbsent(language, (lang) -> new Locale(language));
8487
}
8588

8689
public void runBeforeAllHooks() {

0 commit comments

Comments
 (0)