All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.dk.cachet.carp.common.infrastructure.reflect.ReflectionAvailable.kt Maven / Gradle / Ivy

Go to download

Helper classes and base types relied upon by all subsystems. This library does not contain any domain logic.

The newest version!
package dk.cachet.carp.common.infrastructure.reflect

import kotlin.reflect.KCallable
import kotlin.reflect.KClass


/**
 * Provides access to reflection functionality, but only on JVM and when reflection is loaded, in common multiplatform sources.
 * Since this is not true multiplatform, this should only be used for implementation verification purposes
 * which can be executed on a JVM runtime, and thus not for functional logic required on all target platforms.
 */
fun reflectIfAvailable(): ReflectionAvailable? =
    if ( Reflection.isReflectionAvailable ) ReflectionAvailable() else null

class ReflectionAvailable internal constructor()
{
    inline fun  extendsType( klass: KClass<*> ): Boolean = Reflection.extendsType( klass )

    inline fun  members(): Collection> = members( T::class )
    fun members( klass: KClass<*> ): Collection> = Reflection.members( klass )
}


@PublishedApi
internal expect object Reflection
{
    /**
     * Returns true when called from a JVM runtime environment and `kotlin.reflect` is available at runtime.
     */
    val isReflectionAvailable: Boolean

    /**
     * Determines whether [klass] extends from [T].
     */
    @PublishedApi
    internal inline fun  extendsType( klass: KClass<*> ): Boolean

    /**
     * All functions and properties accessible in this class, including those declared in this class and all of its
     * superclasses. Does not include constructors.
     */
    internal fun members( klass: KClass<*> ): Collection>
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy