7
7
import io .cucumber .core .backend .DocStringTypeDefinition ;
8
8
import io .cucumber .core .backend .Glue ;
9
9
import io .cucumber .core .backend .HookDefinition ;
10
+ import io .cucumber .core .backend .JavaMethodReference ;
10
11
import io .cucumber .core .backend .ParameterTypeDefinition ;
11
12
import io .cucumber .core .backend .ScenarioScoped ;
13
+ import io .cucumber .core .backend .StackTraceElementReference ;
12
14
import io .cucumber .core .backend .StepDefinition ;
13
15
import io .cucumber .core .eventbus .EventBus ;
14
16
import io .cucumber .core .gherkin .Step ;
24
26
import io .cucumber .datatable .TableCellByTypeTransformer ;
25
27
import io .cucumber .datatable .TableEntryByTypeTransformer ;
26
28
import io .cucumber .messages .Messages ;
29
+ import io .cucumber .messages .Messages .Envelope ;
30
+ import io .cucumber .messages .Messages .Hook ;
31
+ import io .cucumber .messages .Messages .JavaStackTraceElement ;
32
+ import io .cucumber .messages .Messages .Location ;
33
+ import io .cucumber .messages .Messages .SourceReference ;
34
+ import io .cucumber .messages .Messages .StepDefinition .Builder ;
27
35
import io .cucumber .messages .Messages .StepDefinition .StepDefinitionPattern ;
28
36
import io .cucumber .messages .Messages .StepDefinition .StepDefinitionPattern .StepDefinitionPatternType ;
29
37
import io .cucumber .plugin .event .StepDefinedEvent ;
@@ -259,10 +267,13 @@ private void emitParameterTypeDefined(ParameterType<?> parameterType) {
259
267
}
260
268
261
269
private void emitHook (CoreHookDefinition hook ) {
270
+ Hook .Builder hookDefinitionBuilder = Hook .newBuilder ()
271
+ .setId (hook .getId ().toString ())
272
+ .setTagExpression (hook .getTagExpression ());
273
+ hook .getDefinitionLocation ()
274
+ .ifPresent (reference -> hookDefinitionBuilder .setSourceReference (createSourceReference (reference )));
262
275
bus .send (Messages .Envelope .newBuilder ()
263
- .setHook (Messages .Hook .newBuilder ()
264
- .setId (hook .getId ().toString ())
265
- .setTagExpression (hook .getTagExpression ()))
276
+ .setHook (hookDefinitionBuilder )
266
277
.build ());
267
278
}
268
279
@@ -272,16 +283,43 @@ private void emitStepDefined(CoreStepDefinition stepDefinition) {
272
283
new io .cucumber .plugin .event .StepDefinition (
273
284
stepDefinition .getStepDefinition ().getLocation (),
274
285
stepDefinition .getExpression ().getSource ())));
275
- bus .send (Messages .Envelope .newBuilder ()
276
- .setStepDefinition (
277
- Messages .StepDefinition .newBuilder ()
278
- .setId (stepDefinition .getId ().toString ())
279
- .setPattern (StepDefinitionPattern .newBuilder ()
280
- .setSource (stepDefinition .getExpression ().getSource ())
281
- .setType (getExpressionType (stepDefinition ))))
286
+
287
+ Builder stepDefinitionBuilder = Messages .StepDefinition .newBuilder ()
288
+ .setId (stepDefinition .getId ().toString ())
289
+ .setPattern (StepDefinitionPattern .newBuilder ()
290
+ .setSource (stepDefinition .getExpression ().getSource ())
291
+ .setType (getExpressionType (stepDefinition )));
292
+ stepDefinition .getDefinitionLocation ()
293
+ .ifPresent (reference -> stepDefinitionBuilder .setSourceReference (createSourceReference (reference )));
294
+ bus .send (Envelope .newBuilder ()
295
+ .setStepDefinition (stepDefinitionBuilder )
282
296
.build ());
283
297
}
284
298
299
+ private SourceReference .Builder createSourceReference (io .cucumber .core .backend .SourceReference reference ) {
300
+ SourceReference .Builder sourceReferenceBuilder = SourceReference .newBuilder ();
301
+ if (reference instanceof JavaMethodReference ) {
302
+ JavaMethodReference methodReference = (JavaMethodReference ) reference ;
303
+ sourceReferenceBuilder .setJavaMethod (Messages .JavaMethod .newBuilder ()
304
+ .setClassName (methodReference .className ())
305
+ .setMethodName (methodReference .methodName ())
306
+ .addAllMethodParameterTypes (methodReference .methodParameterTypes ()));
307
+ }
308
+
309
+ if (reference instanceof StackTraceElementReference ) {
310
+ StackTraceElementReference stackReference = (StackTraceElementReference ) reference ;
311
+ JavaStackTraceElement .Builder stackTraceElementBuilder = JavaStackTraceElement .newBuilder ()
312
+ .setClassName (stackReference .className ())
313
+ .setMethodName (stackReference .methodName ());
314
+ stackReference .fileName ().ifPresent (stackTraceElementBuilder ::setFileName );
315
+ sourceReferenceBuilder
316
+ .setJavaStackTraceElement (stackTraceElementBuilder )
317
+ .setLocation (Location .newBuilder ()
318
+ .setLine (stackReference .lineNumber ()));
319
+ }
320
+ return sourceReferenceBuilder ;
321
+ }
322
+
285
323
private StepDefinitionPatternType getExpressionType (CoreStepDefinition stepDefinition ) {
286
324
Class <? extends Expression > expressionType = stepDefinition .getExpression ().getExpressionType ();
287
325
if (expressionType .isAssignableFrom (RegularExpression .class )) {
0 commit comments