Skip to content

Commit 5d2c570

Browse files
committed
Revert to using kotlin reflection instead of java
1 parent 249d733 commit 5d2c570

File tree

5 files changed

+187
-185
lines changed

5 files changed

+187
-185
lines changed
Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package io.github.serpro69.kfaker.app.cli
22

33
import io.github.serpro69.kfaker.Faker
4-
import io.github.serpro69.kfaker.provider.AbstractFakeDataProvider
5-
import java.lang.reflect.Modifier
4+
import io.github.serpro69.kfaker.provider.FakeDataProvider
5+
import kotlin.reflect.KProperty
6+
import kotlin.reflect.KVisibility
7+
import kotlin.reflect.full.declaredMemberFunctions
8+
import kotlin.reflect.full.declaredMemberProperties
9+
import kotlin.reflect.full.isSubtypeOf
10+
import kotlin.reflect.full.starProjectedType
611

712
/**
813
* Introspects [Faker] and it's descendants.
914
*/
1015
class Introspector(private val faker: Faker) {
1116
// Get a list of all publicly visible providers
12-
val providers = faker.javaClass.declaredMethods.filter {
13-
Modifier.isPublic(it.modifiers) && it.returnType.superclass == AbstractFakeDataProvider::class.java
17+
val providers: List<KProperty<*>> = faker::class.declaredMemberProperties.filter {
18+
it.visibility == KVisibility.PUBLIC && it.returnType.isSubtypeOf(FakeDataProvider::class.starProjectedType)
1419
}
1520

1621
// Get a list of all publicly visible functions in each provider
1722
val providerFunctions = providers.associateBy { provider ->
18-
provider.invoke(faker)!!.javaClass.declaredMethods.filter {
19-
Modifier.isPublic(it.modifiers)
20-
&& !it.annotations.any { ann -> ann is Deprecated }
21-
&& it.returnType == String::class.java
23+
provider.getter.call(faker)!!::class.declaredMemberFunctions.filter {
24+
it.visibility == KVisibility.PUBLIC && !it.annotations.any { ann -> ann is Deprecated }
2225
}
2326
}.map { it.value to it.key }.toMap()
24-
}
27+
}

cli-bot/src/main/kotlin/io/github/serpro69/kfaker/app/subcommands/List.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import kotlin.system.exitProcess
1010

1111
@CommandLine.Command(
1212
name = "list",
13-
description = ["list available providers and their functions"]
13+
description = ["list available providers and their functions"],
14+
mixinStandardHelpOptions = true
1415
)
1516
object List : Runnable {
1617

@@ -37,9 +38,9 @@ object List : Runnable {
3738
introspector.providerFunctions.map { (provider, functions) ->
3839
val renderedFunctions = functions.map {
3940
val value = when (it.parameters.size) {
40-
1 -> it.invoke(provider.invoke(faker)).toString()
41-
2 -> it.invoke(provider.invoke(faker), "").toString()
42-
3 -> it.invoke(provider.invoke(faker), "", "").toString()
41+
1 -> it.call(provider.getter.call(faker)).toString()
42+
2 -> it.call(provider.getter.call(faker), "").toString()
43+
3 -> it.call(provider.getter.call(faker), "", "").toString()
4344
else -> exitProcess(3)
4445
}
4546

cli-bot/src/main/kotlin/io/github/serpro69/kfaker/app/subcommands/Lookup.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import kotlin.system.exitProcess
1010

1111
@CommandLine.Command(
1212
name = "lookup",
13-
description = ["lookup functions by name"]
13+
description = ["lookup functions by name"],
14+
mixinStandardHelpOptions = true
1415
)
1516
object Lookup : Runnable {
1617

@@ -40,9 +41,9 @@ object Lookup : Runnable {
4041
filteredMap.map { (provider, functions) ->
4142
val renderedFunctions = functions.map {
4243
val value = when (it.parameters.size) {
43-
1 -> it.invoke(provider.invoke(faker)).toString()
44-
2 -> it.invoke(provider.invoke(faker), "").toString()
45-
3 -> it.invoke(provider.invoke(faker), "", "").toString()
44+
1 -> it.call(provider.getter.call(faker)).toString()
45+
2 -> it.call(provider.getter.call(faker), "").toString()
46+
3 -> it.call(provider.getter.call(faker), "", "").toString()
4647
else -> exitProcess(3)
4748
}
4849

@@ -68,6 +69,5 @@ object Lookup : Runnable {
6869

6970
override fun run() {
7071
printMatchingFunctions()
71-
println(Faker().address.city())
7272
}
7373
}

0 commit comments

Comments
 (0)