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

commonMain.co.touchlab.skie.kir.descriptor.DescriptorProvider.kt Maven / Gradle / Ivy

The newest version!
package co.touchlab.skie.kir.descriptor

import co.touchlab.skie.kir.descriptor.cache.CachedObjCExportMapper
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
import org.jetbrains.kotlin.descriptors.ClassConstructorDescriptor
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.descriptors.SourceFile
import org.jetbrains.kotlin.library.KotlinLibrary
import org.jetbrains.kotlin.utils.ResolvedDependency

interface DescriptorProvider {

    val mapper: CachedObjCExportMapper

    val builtIns: KotlinBuiltIns

    val extraDescriptorBuiltins: ExtraDescriptorBuiltins

    val exposedModules: Set

    val exposedClasses: Set

    val exposedFiles: Set

    val exposedCategoryMembers: Set

    val exposedTopLevelMembers: Set

    val externalDependencies: Set

    val buildInLibraries: Set

    val resolvedLibraries: List

    val externalLibraries: Set

    val localLibraries: Set

    fun isFromLocalModule(declarationDescriptor: DeclarationDescriptor): Boolean

    fun isExposed(callableMemberDescriptor: CallableMemberDescriptor): Boolean

    fun getFileModule(file: SourceFile): ModuleDescriptor

    /**
     * Functions/properties without extensions and constructors (including overridden ones)
     */
    fun getExposedClassMembers(classDescriptor: ClassDescriptor): List

    /**
     * Functions/properties extensions for classes (not interfaces or generics)
     */
    fun getExposedCategoryMembers(classDescriptor: ClassDescriptor): List

    fun getExposedConstructors(classDescriptor: ClassDescriptor): List

    fun getExposedStaticMembers(file: SourceFile): List

    fun getReceiverClassDescriptorOrNull(descriptor: CallableMemberDescriptor): ClassDescriptor?
}

fun DescriptorProvider.getAllExposedMembers(classDescriptor: ClassDescriptor): List =
    this.getExposedClassMembers(classDescriptor) +
        this.getExposedCategoryMembers(classDescriptor) +
        this.getExposedConstructors(classDescriptor)

val DescriptorProvider.allExposedMembers: Set
    get() = this.exposedTopLevelMembers +
        this.exposedClasses.flatMap { this.getExposedClassMembers(it) + this.getExposedConstructors(it) } +
        this.exposedCategoryMembers




© 2015 - 2024 Weber Informatics LLC | Privacy Policy