Skip to content

Commit 8526623

Browse files
committed
Refactor steps parameters infos computation
1 parent 90e9290 commit 8526623

File tree

4 files changed

+31
-27
lines changed

4 files changed

+31
-27
lines changed

scala/sources/src/main/scala/io/cucumber/scala/ScalaDsl.scala

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.cucumber.scala
22

3-
import java.lang.reflect.{ParameterizedType, Type}
4-
53
import io.cucumber.scala.Aliases._
64

75
import scala.reflect.ClassTag
@@ -912,25 +910,10 @@ private[scala] trait StepDsl extends BaseScalaDsl {
912910
}
913911
}
914912

915-
private def register(ms: Manifest[_ <: Any]*)(pf: PartialFunction[List[Any], Any]): Unit = {
916-
val types = ms.map(m => toJavaType(m)).toArray
917-
registry.stepDefinitions += ScalaStepDetails(Utils.frame(self), name, regex, types, pf)
913+
private def register(manifests: Manifest[_ <: Any]*)(pf: PartialFunction[List[Any], Any]): Unit = {
914+
registry.stepDefinitions += ScalaStepDetails(Utils.frame(self), name, regex, manifests, pf)
918915
}
919916

920-
private def toJavaType(m: Manifest[_]): Type = {
921-
val typeArgs = m.typeArguments
922-
if (typeArgs.isEmpty) {
923-
m.runtimeClass
924-
} else {
925-
new ParameterizedType {
926-
override def getActualTypeArguments: Array[Type] = typeArgs.map(toJavaType).toArray
927-
928-
override def getRawType: Type = m.runtimeClass
929-
930-
override def getOwnerType: Type = ???
931-
}
932-
}
933-
}
934917
}
935918

936919
}

scala/sources/src/main/scala/io/cucumber/scala/ScalaStepDefinition.scala

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.cucumber.scala
22

3-
import java.lang.reflect.Type
43
import java.util.{List => JList}
54

65
import io.cucumber.core.backend.{ParameterInfo, ScenarioScoped, StepDefinition}
@@ -14,10 +13,11 @@ trait ScalaStepDefinition extends StepDefinition with AbstractGlueDefinition {
1413

1514
override val location: StackTraceElement = stepDetails.frame
1615

17-
val parametersInfo: JList[ParameterInfo] = fromTypes(stepDetails.types)
16+
override val parameterInfos: JList[ParameterInfo] = fromTypes(stepDetails.types)
1817

19-
private def fromTypes(types: Array[Type]): JList[ParameterInfo] = {
18+
private def fromTypes(types: Seq[Manifest[_]]): JList[ParameterInfo] = {
2019
types
20+
.map(ScalaTypeHelper.asJavaType)
2121
.map(new ScalaTypeResolver(_))
2222
.map(new ScalaParameterInfo(_))
2323
.toList
@@ -34,8 +34,6 @@ trait ScalaStepDefinition extends StepDefinition with AbstractGlueDefinition {
3434

3535
override def getPattern: String = stepDetails.pattern
3636

37-
override def parameterInfos(): JList[ParameterInfo] = parametersInfo
38-
3937
// Easier to just print out fileName and lineNumber
4038
override def getLocation(): String = stepDetails.frame.getFileName + ":" + stepDetails.frame.getLineNumber
4139

scala/sources/src/main/scala/io/cucumber/scala/ScalaStepDetails.scala

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package io.cucumber.scala
22

3-
import java.lang.reflect.Type
4-
53
/**
64
* Implementation of step definition for scala.
75
*
@@ -15,5 +13,5 @@ import java.lang.reflect.Type
1513
case class ScalaStepDetails(frame: StackTraceElement,
1614
name: String,
1715
pattern: String,
18-
types: Array[Type],
16+
types: Seq[Manifest[_]],
1917
body: List[Any] => Any)
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package io.cucumber.scala
2+
3+
import java.lang.reflect.{ParameterizedType, Type}
4+
5+
object ScalaTypeHelper {
6+
7+
def asJavaType(m: Manifest[_]): Type = {
8+
if (m.typeArguments.isEmpty) {
9+
m.runtimeClass
10+
} else {
11+
new ScalaParameterizedType(m)
12+
}
13+
}
14+
15+
}
16+
17+
class ScalaParameterizedType(manifest: Manifest[_]) extends ParameterizedType {
18+
19+
override def getActualTypeArguments: Array[Type] = manifest.typeArguments.map(ScalaTypeHelper.asJavaType).toArray
20+
21+
override def getRawType: Type = manifest.runtimeClass
22+
23+
override def getOwnerType: Type = null
24+
25+
}

0 commit comments

Comments
 (0)