11package com .github .danielwegener .intellij .cucumber .scala .steps
22
3- import org .jetbrains .plugins .cucumber .steps .AbstractStepDefinition
4- import org .jetbrains .plugins .scala .lang .psi .api .expr .ScMethodCall
5- import org .jetbrains .annotations .Nullable
6- import com .intellij .psi .PsiElement
7- import org .jetbrains .plugins .scala .lang .psi .api .base .ScLiteral
83import java .util
9- import com .intellij .openapi .diagnostic .Logger
104import java .util .Collections
115
6+ import com .intellij .openapi .diagnostic .Logger
7+ import com .intellij .psi .PsiElement
8+ import org .jetbrains .annotations .Nullable
9+ import org .jetbrains .plugins .cucumber .steps .AbstractStepDefinition
10+ import org .jetbrains .plugins .scala .lang .psi .api .expr .ScMethodCall
11+ import org .jetbrains .plugins .scala .lang .psi .util .ScalaConstantExpressionEvaluator
12+
1213object ScalaStepDefinition {
1314 val LOG : Logger = Logger .getInstance(classOf [ScalaStepDefinition ])
1415
@@ -18,6 +19,8 @@ object ScalaStepDefinition {
1819class ScalaStepDefinition (scMethod : ScMethodCall ) extends AbstractStepDefinition (scMethod) {
1920 import ScalaStepDefinition ._
2021
22+ private final val evaluator = new ScalaConstantExpressionEvaluator ()
23+
2124 override def getVariableNames : util.List [String ] = {
2225 val r = for {
2326 // WHEN("""regexp""") { (arg0:Int, arg1:String) <-- we want to match these
@@ -32,15 +35,15 @@ class ScalaStepDefinition(scMethod: ScMethodCall) extends AbstractStepDefinition
3235
3336 @ Nullable
3437 override def getCucumberRegexFromElement (element : PsiElement ): String = {
35-
3638 element match {
3739 case mc : ScMethodCall =>
38- val x = for {
40+ val literals = for {
3941 innerMethodCall <- Some (mc.getEffectiveInvokedExpr).toSeq.collect { case some : ScMethodCall => some }
40- literalParameter @ (someOther : ScLiteral ) <- innerMethodCall.args.exprs
41- if literalParameter.isString
42- } yield literalParameter.getValue.toString
43- x.headOption.orNull
42+ expression <- innerMethodCall.args.exprs
43+ literal <- Option (evaluator.computeConstantExpression(expression, throwExceptionOnOverflow = false )).toSeq
44+ } yield literal.toString
45+
46+ literals.headOption.orNull
4447 case _ => null
4548 }
4649 }
0 commit comments