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

arrow.common.utils.ClassOrPackageDataWrapper.kt Maven / Gradle / Ivy

package arrow.common.utils

import me.eugeniomarletti.kotlin.metadata.ClassData
import me.eugeniomarletti.kotlin.metadata.PackageData
import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Constructor
import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Function
import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Property
import me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.TypeParameter
import me.eugeniomarletti.kotlin.metadata.shadow.metadata.deserialization.NameResolver

sealed class ClassOrPackageDataWrapper {
  abstract val `package`: String
  abstract val nameResolver: NameResolver
  abstract val constructorList: List
  abstract val functionList: List
  abstract val propertyList: List
  abstract val typeParameters: List
  abstract fun getTypeParameter(typeParameterIndex: Int): TypeParameter?

  class Package(
    override val nameResolver: NameResolver,
    val packageProto: me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Package,
    override val `package`: String
  ) : ClassOrPackageDataWrapper() {
    override val constructorList: List get() = emptyList()
    override val functionList: List get() = packageProto.functionList
    override val propertyList: List get() = packageProto.propertyList
    override val typeParameters: List = emptyList()
    override fun getTypeParameter(typeParameterIndex: Int): TypeParameter? = null
  }

  class Class(
    override val nameResolver: NameResolver,
    val classProto: me.eugeniomarletti.kotlin.metadata.shadow.metadata.ProtoBuf.Class,
    override val `package`: String
  ) : ClassOrPackageDataWrapper() {
    override val constructorList: List get() = classProto.constructorList
    override val functionList: List get() = classProto.functionList
    override val propertyList: List get() = classProto.propertyList
    override val typeParameters: List = classProto.typeParameterList
    override fun getTypeParameter(typeParameterIndex: Int): TypeParameter? =
      classProto.typeParameterList.getOrNull(typeParameterIndex)
  }
}

fun ClassData.asClassOrPackageDataWrapper(`package`: String) =
  ClassOrPackageDataWrapper.Class(nameResolver, classProto, `package`)

fun PackageData.asClassOrPackageDataWrapper(`package`: String) =
  ClassOrPackageDataWrapper.Package(nameResolver, packageProto, `package`)




© 2015 - 2025 Weber Informatics LLC | Privacy Policy