fluid-meta

Converts Kotlin metadata into an easily usable data model

Лицензия

Лицензия

Категории

Категории

Данные
Группа

Группа

io.fluidsonic.meta
Идентификатор

Идентификатор

fluid-meta-metadata
Последняя версия

Последняя версия

0.11.0
Дата

Дата

Тип

Тип

module
Описание

Описание

fluid-meta
Converts Kotlin metadata into an easily usable data model
Ссылка на сайт

Ссылка на сайт

https://github.com/fluidsonic/fluid-meta
Система контроля версий

Система контроля версий

https://github.com/fluidsonic/fluid-meta

Скачать fluid-meta-metadata

Зависимости

compile (1)

Идентификатор библиотеки Тип Версия
org.jetbrains.kotlin : kotlin-stdlib jar 1.4.10

Модули Проекта

Данный проект не имеет модулей.

fluid-meta

Maven Central JCenter Kotlin #fluid-libraries Slack Channel

Converts Kotlin metadata into a usable data model. Includes pretty printing for easy inspection, see the output for Kotlin's Standard Library for example :)

Installation

build.gradle.kts:

dependencies {
	implementation("io.fluidsonic.meta:fluid-meta:0.11.0")
}

Example

Let's say you want to inspect the type Hello at runtime or during annotation processing and get additional type information which is specific to Kotlin, e.g. nullability, internal visibility, data class, inline and default parameters.

package hello.world

internal data class Hello(
	private val world: String = "cool!",
	val foo: Int?
) {

	constructor() : this(foo = 3)

	inline fun hey() = println("hey")
}

All you need to do is to use Meta.of(…) to inspect the respective KClass (or Element when processing annotations):

package hello.world

import io.fluidsonic.meta.*

fun main() {
	println(Meta.of(Hello::class))
}

And you'll get well-structured metadata objects like MClass which print output like the following when using .toString():

internal data class hello.world.Hello {

	// *** PROPERTIES ***

	// JVM field = foo:Ljava/lang/Integer;
	val foo: Int?

	// JVM field = world:Ljava/lang/String;
	private val world: String


	// *** CONSTRUCTORS ***

	// JVM method = <init>()V
	/* secondary */ constructor()

	// JVM method = <init>(Ljava/lang/String;Ljava/lang/Integer;)V
	constructor(world: String /* = default */, foo: Int?)


	// *** FUNCTIONS ***

	// JVM method = component1()Ljava/lang/String;
	private /* synthesized */ operator fun component1(): String

	// JVM method = component2()Ljava/lang/Integer;
	/* synthesized */ operator fun component2(): Int?

	// JVM method = copy(Ljava/lang/String;Ljava/lang/Integer;)Lhello/world/Hello;
	/* synthesized */ fun copy(world: String /* = default */, foo: Int? /* = default */): hello.world.Hello

	// JVM method = equals(Ljava/lang/Object;)Z
	/* synthesized */ open operator fun equals(other: Any?): Boolean

	// JVM method = hashCode()I
	/* synthesized */ open fun hashCode(): Int

	// JVM method = hey()V
	inline fun hey()

	// JVM method = toString()Ljava/lang/String;
	/* synthesized */ open fun toString(): String
}

License

Apache 2.0

Версии библиотеки

Версия
0.11.0
0.10.2
0.10.1