Skip to content

Kotlin Compiler Plugin that automatically adds missing annotations to your codebase based on configurable criteria

License

Notifications You must be signed in to change notification settings

shalaga44/missing-annotations-therapist

Repository files navigation

missing-annotations-therapist

Maven Central

Important

It's working now! but still a FIRST draft!, so think twice before using it! be careful.

Kotlin Compiler Plugin that automatically adds missing annotations to your codebase based on configurable criteria. This plugin supports all Kotlin platforms: JVM, JS, and Native, and utilizes the IR backend for the Kotlin compiler.

Example

Given the following code:

package com.project.common.dto

class LoginRequestDto(
    val etc: String
)

With the missing-annotations-therapist plugin configured as follows:

configure<MissingAnnotationsTherapist> {
    annotations = listOf(
        Annotate(
            annotationsToAdd = listOf(Annotation(fqName = "kotlin.js.JsExport")),
            packageTarget = listOf(PackageTarget(pattern = "com.project.common.dto")),
            classTargets = listOf(ClassTypeTarget.REGULAR_CLASS),
            sourceSets = listOf("commonMain", "jsMain"),
        ),
    )
}

The transformed code will include the specified annotation:

package com.project.common.dto

@kotlin.js.JsExport
class LoginRequestDto(
    val etc: String
)

Gradle Plugin

The Gradle plugin is available through the [Gradle Plugin Portal][missing-annotations-therapist-gradle].

plugins {
    id("io.github.shalaga44.missing-annotations-therapist") version "0.1.0"
    kotlin("multiplatform") version "2.0.21"
}

Also add the Github Maven repository to your repositories to be able to use it.

repositories {
    maven {
        url = uri("https://maven.pkg.github.com/shalaga44/missing-annotations-therapist")
    }
}

Configure the plugin in your build.gradle.kts file:

import dev.shalaga44.mat.*

configure<MissingAnnotationsTherapist> {
    annotations = listOf(
        Annotate(
            annotationsToAdd = listOf(Annotation(fqName = "kotlin.js.JsExport")),
            classTargets = listOf(ClassTypeTarget.REGULAR_CLASS),
            packageTarget = listOf(PackageTarget(pattern = "com.project.common.dto")),
            sourceSets = listOf("commonMain", "jsMain"),
        )
    )
}

For Groovy DSL:

kotlinMissingAnnotationsTherapist {
    annotations = [
            Annotate(
                    annotationsToAdd = [Annotation("kotlin.js.JsExport")],
                    classTargets = [ClassTypeTarget.REGULAR_CLASS],
                    packageTarget = [PackageTarget("com.project.common.dto")],
                    sourceSets = ["commonMain", "jsMain"]
            )
    ]
}

Compatibility

The Kotlin compiler plugin API is unstable, and each new version of Kotlin can bring breaking changes. Make sure you are using the correct version of this plugin for your version of Kotlin. Check the table below for compatibility.

Kotlin Version Plugin Version
2.0.21 0.1.0
2.1.0 soon

Kotlin IR

This plugin supports all IR-based compiler backends: JVM, JS, and Native. Ensure IR is enabled for Kotlin/JS by using the following configuration:

target {
    js(IR) {
    }
}

Read the tests for use cases.

A working example is [available] in this repository in the sample directory.

About

Kotlin Compiler Plugin that automatically adds missing annotations to your codebase based on configurable criteria

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages