mike_shysh
01/25/2018, 1:04 PMCzar
01/25/2018, 1:18 PMClassLoader.getSystemClassLoader().getResource("/path/to/resource/")
or
ClassLoader.getSystemResourceAsStream("/path/to/resource")mike_shysh
01/25/2018, 1:31 PMmike_shysh
01/25/2018, 1:32 PMjava.lang.IllegalStateException: ClassLoader.getSystemCla…Loader().getResource(url) must not be nullmike_shysh
01/25/2018, 1:37 PMCzar
01/25/2018, 1:38 PMgildor
01/25/2018, 1:45 PMgildor
01/25/2018, 1:46 PMobject {}.classloader, but to be honest always used currentThread instead, I don't have such complicated classloader casesmike_shysh
01/25/2018, 1:54 PMobject {}.classloader Should it be called in inline func?Czar
01/25/2018, 1:55 PMobject resourceAsStream {
operator fun invoke(path: String) : InputStream = javaClass.getResourceAsStream(path)
}
fun <T> fromYamlList(resourceStream: InputStream): List<T> {
TODO("You'll have to implement this")
}
inline fun <reified T> fromTestDataYamlList(url: String): List<T> {
return fromYamlList(resourceAsStream("/path/to/resource/in/the/classpath"))
}mike_shysh
01/25/2018, 2:07 PMobject resourceAsStream {
operator fun invoke(path: String) : InputStream = javaClass.getResourceAsStream(path)
}mike_shysh
01/25/2018, 2:09 PMmike_shysh
01/25/2018, 2:09 PMCzar
01/25/2018, 2:10 PMjavaClass is roughly analogous to java's this.getClass() and operator fun invoke to make it look good 🙂 Read about it here: https://kotlinlang.org/docs/reference/operator-overloading.html#invokemike_shysh
01/25/2018, 2:10 PMCzar
01/25/2018, 2:12 PMresourceAsStream object does not contain state, and invoke is a function which does it job based on input and returns its result as output, without keeping state in the instance.mike_shysh
01/25/2018, 2:16 PMgildor
01/25/2018, 2:25 PMobject has the same problem as currentThread. You will get resource from classloader of an object who created this object (in this case who first used this object), not from classloader of your function.
But in most cases it's not a big problemmike_shysh
01/25/2018, 2:28 PMinline fun <reified T> fromTestDataYamlListmike_shysh
01/25/2018, 2:29 PMmike_shysh
01/25/2018, 2:30 PMgildor
01/25/2018, 2:30 PMgildor
01/25/2018, 2:30 PMobject declarationgildor
01/25/2018, 2:34 PMgildor
01/25/2018, 2:34 PMmike_shysh
01/25/2018, 2:39 PMmike_shysh
01/25/2018, 2:42 PMclass ResourcePath {
operator fun invoke(path: String): String = javaClass.getResource(path).path
}
inline fun <reified T> fromTestDataYamlList(url: String): ArrayList<T> {
return fromYamlList(ResourcePath().invoke("/testData$url"))
}mike_shysh
01/25/2018, 2:43 PMgildor
01/25/2018, 2:43 PMgildor
01/25/2018, 2:43 PMmike_shysh
01/25/2018, 2:44 PMgildor
01/25/2018, 2:44 PMmike_shysh
01/25/2018, 2:45 PMclass Resources {
fun getPath(path: String): String = javaClass.getResource(path).path
}
inline fun <reified T> fromTestDataYamlList(url: String): ArrayList<T> {
return fromYamlList(Resources().getPath("/testData$url"))
}mike_shysh
01/25/2018, 2:45 PMgildor
01/25/2018, 2:46 PMgildor
01/25/2018, 2:46 PMmike_shysh
01/25/2018, 2:47 PMfromYamlListmike_shysh
01/25/2018, 2:47 PMgildor
01/25/2018, 2:47 PMmike_shysh
01/25/2018, 2:47 PMfromTestDataYamlList<UserInfo>("/user/request/addUsers.yaml")mike_shysh
01/25/2018, 2:47 PMgildor
01/25/2018, 2:48 PMmike_shysh
01/25/2018, 2:48 PMmike_shysh
01/25/2018, 2:48 PMgildor
01/25/2018, 2:49 PMCzar
01/25/2018, 4:02 PMinline fun getPath(url: String) = object {}.javaClass.getResource("/testData$url").path
inline fun <reified T> fromTestDataYamlList(url: String): ArrayList<T> {
return fromYamlList(getPath(url))
}