Skip to content

Commit

Permalink
RUM-8582: Add kotlin compiler plugin environment
Browse files Browse the repository at this point in the history
  • Loading branch information
ambushwork committed Feb 18, 2025
1 parent d5346cd commit 37c7e86
Show file tree
Hide file tree
Showing 6 changed files with 75 additions and 0 deletions.
1 change: 1 addition & 0 deletions LICENSE-3rdparty.csv
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import,com.android.tools.build,Apache-2.0,Copyright (C) 2013 The Android Open So
import,com.squareup.okhttp3,Apache-2.0,"Copyright 2019 Square, Inc"
import,org.jetbrains,Apache-2.0,Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors
import,org.jetbrains.kotlin,Apache-2.0,Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors
import,com.google.auto.service,Apache-2.0,Copyright 2013 Google LLC
import,org.json,JSON,Copyright (c) 2002 JSON.org
import(test),com.github.xgouchet.Elmyr,MIT,Copyright 2017-2019 Xavier F. Gouchet
import(test),net.wuerl.kotlin,Apache-2.0,Copyright 2016 Andreas Würl
Expand Down
5 changes: 5 additions & 0 deletions dd-sdk-android-gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ plugins {
// Build
id("java-gradle-plugin")
kotlin("jvm")
kotlin("kapt")

// Publish
`maven-publish`
Expand Down Expand Up @@ -46,6 +47,10 @@ dependencies {
testImplementation(libs.okHttpMock)
testImplementation(libs.androidToolsPluginGradle)
testImplementation(libs.kotlinPluginGradle)

compileOnly(libs.kotlinCompilerEmbeddable)
compileOnly(libs.autoServiceAnnotation)
kapt(libs.autoService)
}

kotlinConfig()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.datadog.gradle.plugin.kcp

import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.cli.common.messages.MessageCollector

// TODO RUM-8583: Implement Compose semantics tag instrumentation.
@Suppress("UnusedPrivateProperty")
internal class ComposeTagTransformer(
private val messageCollector: MessageCollector,
private val pluginContext: IrPluginContext
) : IrElementTransformerVoidWithContext()
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.datadog.gradle.plugin.kcp

import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment

/**
* The extension registers all the visitors that need to explore the code being compiled.
*/
@FirIncompatiblePluginAPI
class DatadogIrExtension(private val messageCollector: MessageCollector) : IrGenerationExtension {

override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
val composeTagTransformer = ComposeTagTransformer(messageCollector, pluginContext)

moduleFragment.accept(composeTagTransformer, null)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.datadog.gradle.plugin.kcp

import com.google.auto.service.AutoService
import org.jetbrains.kotlin.backend.common.extensions.FirIncompatiblePluginAPI
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar
import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi
import org.jetbrains.kotlin.config.CompilerConfiguration

/**
* The Registrar makes the plugin visible to the Kotlin Compiler, and provides the extensions to use.
*/
@OptIn(ExperimentalCompilerApi::class)
@AutoService(CompilerPluginRegistrar::class)
class DatadogPluginRegistrar : CompilerPluginRegistrar() {

// Supports Kotlin 2.x compiler
override val supportsK2 = true

@OptIn(FirIncompatiblePluginAPI::class)
override fun ExtensionStorage.registerExtensions(configuration: CompilerConfiguration) {
val messageCollector =
configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
IrGenerationExtension.registerExtension(DatadogIrExtension(messageCollector))
}
}
9 changes: 9 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@ kotlinGrammarParser = "c35b50fa44"
datadogSdk = "2.18.0"
datadogPluginGradle = "1.15.0"

# Kotlin Compiler Plugin
kotlinCompilerEmbeddable = "1.8.20"
autoService = "1.0.1"

[libraries]

# Classpaths
Expand Down Expand Up @@ -93,6 +97,11 @@ fuzzyWuzzy = { module = "me.xdrop:fuzzywuzzy", version.ref = "fuzzyWuzzy" }
datadogSdkRum = { module = "com.datadoghq:dd-sdk-android-rum", version.ref = "datadogSdk" }
datadogPluginGradle = { module = "com.datadoghq:dd-sdk-android-gradle-plugin", version.ref = "datadogPluginGradle" }

# Kotlin Compiler Plugin
kotlinCompilerEmbeddable = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlinCompilerEmbeddable" }
autoService = { module = "com.google.auto.service:auto-service", version.ref = "autoService" }
autoServiceAnnotation = { module = "com.google.auto.service:auto-service-annotations", version.ref = "autoService" }

[bundles]

jUnit5 = [
Expand Down

0 comments on commit 37c7e86

Please sign in to comment.