Skip to content

Commit 65bbb26

Browse files
committed
returns a boolean indicating whether or not stepdefs/hooks for that class should be registered.
1 parent d55bcae commit 65bbb26

File tree

13 files changed

+45
-32
lines changed

13 files changed

+45
-32
lines changed

History.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
## [1.2.4-SNAPSHOT](https://github.com/cucumber/cucumber-jvm/compare/v1.2.3...master) (In Git)
22

3+
* [Java] `ObjectFactory.addClass` returns a boolean indicating whether or not stepdefs/hooks for that class should be registered. (Aslak Hellesøy)
34
* [examples] Fix to allow lein test to to run successfully ([#805](https://github.com/cucumber/cucumber-jvm/pull/805) Chris Howe-Jones)
45

56
## [1.2.3](https://github.com/cucumber/cucumber-jvm/compare/v1.2.2...v1.2.3) (2015-07-07)
67

78
* [Core] Make the Rerun Formatter consistent with the exit code ([#871](https://github.com/cucumber/cucumber-jvm/pull/871) Björn Rasmusson)
89
* [OSGi] Cucumber is ready to run in OSGi containers ([#873](https://github.com/cucumber/cucumber-jvm/pull/873), [#799](https://github.com/cucumber/cucumber-jvm/pull/799) @HendrikSP)
9-
* [Core] `cucumber.runtime.java.ObjectFactory` moved to `cucumber.api.java.ObjectFactory`. Custom implementation can
10+
* [Java] `cucumber.runtime.java.ObjectFactory` moved to `cucumber.api.java.ObjectFactory`. Custom implementation can
1011
be specified in `cucumber.properties` with `cucumber.api.java.ObjectFactory=my.special.KindOfObjectFactory`. (Closes [#290](https://github.com/cucumber/cucumber-jvm/issues/290) Aslak Hellesøy)
1112
* [Core] Properly decode jar URLs with spaces (%20) - ([#866](https://github.com/cucumber/cucumber-jvm/issues/866) Aslak Hellesøy)
1213
* [Java] Arity mismatch Java8 Step Definition error ([#852](https://github.com/cucumber/cucumber-jvm/issues/852), [#847](https://github.com/cucumber/cucumber-jvm/pull/847) David Coelho)
@@ -18,10 +19,10 @@
1819
* [Core] Call all formatters, also in case of unimplemented methods ([#842](https://github.com/cucumber/cucumber-jvm/pull/842), [#803](https://github.com/cucumber/cucumber-jvm/issues/803) Björn Rasmusson)
1920
* [TestNG] Run each feature as separate TestNG test ([#817](https://github.com/cucumber/cucumber-jvm/pull/817), [#653](https://github.com/cucumber/cucumber-jvm/pull/653) Dmitry Sidorenko, Björn Rasmusson)
2021
* [Core] Implement TestNG-compatible XML formatter ([#818](https://github.com/cucumber/cucumber-jvm/pull/818), [#621](https://github.com/cucumber/cucumber-jvm/pull/621) Dmitry Berezhony, Björn Rasmusson)
21-
* `DataTable.diff(List)` gives proper error message when the `List` argument is empty (Aslak Hellesøy)
22-
* Execute no scenarios when the rerun file is empty ([#840](https://github.com/cucumber/cucumber-jvm/issues/840) Björn Rasmusson)
23-
* Snippets for quoted arguments changed from `(.*?)` to `([^\"]*)` (which is how it was before 1.1.6). See [cucumber/cucumber#663](https://github.com/cucumber/cucumber/pull/663) (Aslak Hellesøy)
24-
* Fix non running gradle example ([#839](https://github.com/cucumber/cucumber-jvm/pull/839) Ole Christian Langfjæran)
22+
* [Core] `DataTable.diff(List)` gives proper error message when the `List` argument is empty (Aslak Hellesøy)
23+
* [Core] Execute no scenarios when the rerun file is empty ([#840](https://github.com/cucumber/cucumber-jvm/issues/840) Björn Rasmusson)
24+
* [Core] Snippets for quoted arguments changed from `(.*?)` to `([^\"]*)` (which is how it was before 1.1.6). See [cucumber/cucumber#663](https://github.com/cucumber/cucumber/pull/663) (Aslak Hellesøy)
25+
* [Core] Fix non running gradle example ([#839](https://github.com/cucumber/cucumber-jvm/pull/839) Ole Christian Langfjæran)
2526
* [Clojure] Improved documentation for the clojure module ([#864](https://github.com/cucumber/cucumber-jvm/pull/864) Paul Doran)
2627

2728
## [1.2.2](https://github.com/cucumber/cucumber-jvm/compare/v1.2.0...v1.2.2) (2015-01-13)

android/src/main/java/cucumber/runtime/android/AndroidObjectFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ public void stop() {
4848
}
4949

5050
@Override
51-
public void addClass(final Class<?> clazz) {
52-
delegate.addClass(clazz);
51+
public boolean addClass(final Class<?> clazz) {
52+
return delegate.addClass(clazz);
5353
}
5454

5555
@Override

guice/src/main/java/cucumber/runtime/java/guice/impl/GuiceFactory.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ public GuiceFactory() throws IOException {
3131
this.injector = injector;
3232
}
3333

34-
public void addClass(Class<?> clazz) {}
34+
public boolean addClass(Class<?> clazz) {
35+
return true;
36+
}
3537

3638
public void start() {
3739
injector.getInstance(ScenarioScope.class).enterScope();

java/src/main/java/cucumber/api/java/ObjectFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,9 @@ public interface ObjectFactory {
1919
* Collects glue classes in the classpath. Called once on init.
2020
*
2121
* @param glueClass Glue class containing cucumber.api annotations (Before, Given, When, ...)
22+
* @return true if stepdefs and hooks in this class should be used, false if they should be ignored.
2223
*/
23-
void addClass(Class<?> glueClass);
24+
boolean addClass(Class<?> glueClass);
2425

2526
/**
2627
* Provides the glue instances used to execute the current scenario. The instance can be prepared in

java/src/main/java/cucumber/runtime/java/DefaultJavaObjectFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public void stop() {
2222
instances.clear();
2323
}
2424

25-
public void addClass(Class<?> clazz) {
25+
public boolean addClass(Class<?> clazz) {
26+
return true;
2627
}
2728

2829
public <T> T getInstance(Class<T> type) {

java/src/main/java/cucumber/runtime/java/JavaBackend.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,9 @@ public void loadGlue(Glue glue, List<String> gluePaths) {
9393
continue;
9494
}
9595

96-
objectFactory.addClass(glueClass);
97-
glueBaseClasses.add(glueClass);
96+
if (objectFactory.addClass(glueClass)) {
97+
glueBaseClasses.add(glueClass);
98+
}
9899
}
99100
}
100101
}
@@ -146,8 +147,9 @@ public String getSnippet(Step step, FunctionNameGenerator functionNameGenerator)
146147

147148
void addStepDefinition(Annotation annotation, Method method) {
148149
try {
149-
objectFactory.addClass(method.getDeclaringClass());
150-
glue.addStepDefinition(new JavaStepDefinition(method, pattern(annotation), timeoutMillis(annotation), objectFactory));
150+
if (objectFactory.addClass(method.getDeclaringClass())) {
151+
glue.addStepDefinition(new JavaStepDefinition(method, pattern(annotation), timeoutMillis(annotation), objectFactory));
152+
}
151153
} catch (DuplicateStepDefinitionException e) {
152154
throw e;
153155
} catch (Throwable e) {
@@ -164,16 +166,16 @@ public void addStepDefinition(String regexp, long timeoutMillis, StepdefBody bod
164166
}
165167

166168
void addHook(Annotation annotation, Method method) {
167-
objectFactory.addClass(method.getDeclaringClass());
168-
169-
if (annotation.annotationType().equals(Before.class)) {
170-
String[] tagExpressions = ((Before) annotation).value();
171-
long timeout = ((Before) annotation).timeout();
172-
glue.addBeforeHook(new JavaHookDefinition(method, tagExpressions, ((Before) annotation).order(), timeout, objectFactory));
173-
} else {
174-
String[] tagExpressions = ((After) annotation).value();
175-
long timeout = ((After) annotation).timeout();
176-
glue.addAfterHook(new JavaHookDefinition(method, tagExpressions, ((After) annotation).order(), timeout, objectFactory));
169+
if (objectFactory.addClass(method.getDeclaringClass())) {
170+
if (annotation.annotationType().equals(Before.class)) {
171+
String[] tagExpressions = ((Before) annotation).value();
172+
long timeout = ((Before) annotation).timeout();
173+
glue.addBeforeHook(new JavaHookDefinition(method, tagExpressions, ((Before) annotation).order(), timeout, objectFactory));
174+
} else {
175+
String[] tagExpressions = ((After) annotation).value();
176+
long timeout = ((After) annotation).timeout();
177+
glue.addAfterHook(new JavaHookDefinition(method, tagExpressions, ((After) annotation).order(), timeout, objectFactory));
178+
}
177179
}
178180
}
179181

java/src/test/java/cucumber/runtime/java/SingletonFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ public void stop() {
2222
}
2323

2424
@Override
25-
public void addClass(Class<?> clazz) {
25+
public boolean addClass(Class<?> clazz) {
26+
return true;
2627
}
2728

2829
@Override

needle/src/main/java/cucumber/runtime/java/needle/NeedleFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,14 @@ public void stop() {
5353
}
5454

5555
@Override
56-
public void addClass(final Class<?> type) {
56+
public boolean addClass(final Class<?> type) {
5757
logger.trace("addClass(): " + type.getCanonicalName());
5858

5959
// build up cache keys ...
6060
if (!cachedStepsInstances.containsKey(type)) {
6161
cachedStepsInstances.put(type, null);
6262
}
63+
return true;
6364
}
6465

6566
private void assertTypeHasBeenAdded(final Class<?> type) {

openejb/src/main/java/cucumber/runtime/java/openejb/OpenEJBObjectFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ public void stop() {
3939
}
4040

4141
@Override
42-
public void addClass(Class<?> clazz) {
42+
public boolean addClass(Class<?> clazz) {
4343
classes.add(clazz.getName());
44+
return true;
4445
}
4546

4647
@Override

osgi/src/main/java/cucumber/java/runtime/osgi/OsgiObjectFactoryBase.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public void stop() {
2121
}
2222

2323
@Override
24-
public void addClass(Class<?> glueClass) {
24+
public boolean addClass(Class<?> glueClass) {
25+
return true;
2526
}
2627

2728
@Override

picocontainer/src/main/java/cucumber/runtime/java/picocontainer/PicoFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ public void stop() {
2626
pico.dispose();
2727
}
2828

29-
public void addClass(Class<?> clazz) {
29+
public boolean addClass(Class<?> clazz) {
3030
if (Utils.isInstantiable(clazz) && classes.add(clazz)) {
3131
addConstructorDependencies(clazz);
3232
}
33+
return true;
3334
}
3435

3536
public <T> T getInstance(Class<T> type) {

spring/src/main/java/cucumber/runtime/java/spring/SpringFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ public SpringFactory() {
5656
}
5757

5858
@Override
59-
public void addClass(final Class<?> stepClass) {
59+
public boolean addClass(final Class<?> stepClass) {
6060
if (!stepClasses.contains(stepClass)) {
6161
if (dependsOnSpringContext(stepClass)) {
6262
if (stepClassWithSpringContext == null) {
@@ -66,8 +66,8 @@ public void addClass(final Class<?> stepClass) {
6666
}
6767
}
6868
stepClasses.add(stepClass);
69-
7069
}
70+
return true;
7171
}
7272

7373
private void checkAnnotationsEqual(Class<?> stepClassWithSpringContext, Class<?> stepClass) {

weld/src/main/java/cucumber/runtime/java/weld/WeldFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ public void stop() {
4343
}
4444

4545
@Override
46-
public void addClass(Class<?> clazz) {
46+
public boolean addClass(Class<?> clazz) {
47+
return true;
4748
}
4849

4950
@Override

0 commit comments

Comments
 (0)