fluid-meta

Converts Kotlin metadata into an easily usable data model

License

License

Categories

Categories

Data
GroupId

GroupId

io.fluidsonic.meta
ArtifactId

ArtifactId

fluid-meta-metadata
Last Version

Last Version

0.11.0
Release Date

Release Date

Type

Type

module
Description

Description

fluid-meta
Converts Kotlin metadata into an easily usable data model
Project URL

Project URL

https://github.com/fluidsonic/fluid-meta
Source Code Management

Source Code Management

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

Download fluid-meta-metadata

Dependencies

compile (1)

Group / Artifact Type Version
org.jetbrains.kotlin : kotlin-stdlib jar 1.4.10

Project Modules

There are no modules declared in this project.

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

Versions

Version
0.11.0
0.10.2
0.10.1