File tree Expand file tree Collapse file tree 2 files changed +20
-13
lines changed
main/kotlin/com/nhaarman/mockito_kotlin Expand file tree Collapse file tree 2 files changed +20
-13
lines changed Original file line number Diff line number Diff line change @@ -59,7 +59,7 @@ fun <T : Any> createInstance(kClass: KClass<T>): T {
5959 kClass.isPrimitive() -> kClass.toDefaultPrimitiveValue()
6060 kClass.isEnum() -> kClass.java.enumConstants.first()
6161 kClass.isArray() -> kClass.toArrayInstance()
62- kClass.isClassObject() -> kClass.toClassObject()
62+ kClass.isClassObject() -> kClass.toClassObject()
6363 else -> kClass.easiestConstructor().newInstance()
6464 }
6565}
@@ -68,20 +68,14 @@ fun <T : Any> createInstance(kClass: KClass<T>): T {
6868 * Tries to find the easiest constructor which it can instantiate.
6969 */
7070private fun <T : Any > KClass<T>.easiestConstructor (): KFunction <T > {
71- return constructors.firstOrDefault(
72- {
73- it.parameters.filter {
74- it.type.toString().toLowerCase().contains(" array" )
75- }.isEmpty()
76- },
77- {
78- constructors.sortedBy { it.parameters.size }.first()
79- }
80- )
71+ return constructors
72+ .sortedBy { it.parameters.size }
73+ .withoutArrayParameters()
74+ .firstOrNull() ? : constructors.sortedBy { it.parameters.size }.first()
8175}
8276
83- private fun <T > Collection<T>. firstOrDefault ( predicate : ( T ) -> Boolean , default : () -> T ): T {
84- return firstOrNull(predicate) ? : default ()
77+ private fun <T > List<KFunction<T>>. withoutArrayParameters () = filter {
78+ it.parameters.filter { parameter -> parameter.type.toString().toLowerCase().contains( " array " ) }.isEmpty ()
8579}
8680
8781@Suppress(" SENSELESS_COMPARISON" )
Original file line number Diff line number Diff line change @@ -424,6 +424,15 @@ class CreateInstanceTest {
424424 }
425425 }
426426
427+ @Test
428+ fun defaultEmptyConstructor_takesSimplestConstructor () {
429+ /* When */
430+ val result = createInstance(WithDefaultEmptyConstructor ::class )
431+
432+ /* Then */
433+ expect(result).toNotBeNull()
434+ }
435+
427436 private class PrivateClass private constructor(val data : String )
428437
429438 class ClosedClass
@@ -459,5 +468,9 @@ class CreateInstanceTest {
459468 }
460469 }
461470
471+ class WithDefaultEmptyConstructor () {
472+ constructor (c: ForbiddenConstructor ) : this ()
473+ }
474+
462475 enum class MyEnum { VALUE , ANOTHER_VALUE }
463476}
You can’t perform that action at this time.
0 commit comments