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 {
59
59
kClass.isPrimitive() -> kClass.toDefaultPrimitiveValue()
60
60
kClass.isEnum() -> kClass.java.enumConstants.first()
61
61
kClass.isArray() -> kClass.toArrayInstance()
62
- kClass.isClassObject() -> kClass.toClassObject()
62
+ kClass.isClassObject() -> kClass.toClassObject()
63
63
else -> kClass.easiestConstructor().newInstance()
64
64
}
65
65
}
@@ -68,20 +68,14 @@ fun <T : Any> createInstance(kClass: KClass<T>): T {
68
68
* Tries to find the easiest constructor which it can instantiate.
69
69
*/
70
70
private 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()
81
75
}
82
76
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 ()
85
79
}
86
80
87
81
@Suppress(" SENSELESS_COMPARISON" )
Original file line number Diff line number Diff line change @@ -424,6 +424,15 @@ class CreateInstanceTest {
424
424
}
425
425
}
426
426
427
+ @Test
428
+ fun defaultEmptyConstructor_takesSimplestConstructor () {
429
+ /* When */
430
+ val result = createInstance(WithDefaultEmptyConstructor ::class )
431
+
432
+ /* Then */
433
+ expect(result).toNotBeNull()
434
+ }
435
+
427
436
private class PrivateClass private constructor(val data : String )
428
437
429
438
class ClosedClass
@@ -459,5 +468,9 @@ class CreateInstanceTest {
459
468
}
460
469
}
461
470
471
+ class WithDefaultEmptyConstructor () {
472
+ constructor (c: ForbiddenConstructor ) : this ()
473
+ }
474
+
462
475
enum class MyEnum { VALUE , ANOTHER_VALUE }
463
476
}
You can’t perform that action at this time.
0 commit comments