feat: refactor build and flesh out Gradle plugin
This commit is contained in:
parent
1663cc6b22
commit
084387dfda
|
@ -46,3 +46,6 @@ bin/
|
||||||
|
|
||||||
### Mac OS ###
|
### Mac OS ###
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
|
### Android Studio ###
|
||||||
|
local.properties
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
package $basePackage
|
||||||
|
|
||||||
|
internal object ArtifactInfo {
|
||||||
|
const val GROUP = "$publishGroup"
|
||||||
|
const val VERSION = "$publishVersion"
|
||||||
|
|
||||||
|
const val COMPILER_PLUGIN_ARTIFACT = "compiler-plugin"
|
||||||
|
const val GRADLE_PLUGIN_ARTIFACT = "gradle-plugin"
|
||||||
|
const val RUNTIME_ARTIFACT = "runtime"
|
||||||
|
|
||||||
|
const val DEFAULT_TRACELOG_ENABLED = true
|
||||||
|
const val DEFAULT_TRACELOG_ANNOTATION = "dev/msfjarvis/tracelog/runtime/annotations/DebugLog"
|
||||||
|
}
|
|
@ -1,6 +1,18 @@
|
||||||
plugins { `kotlin-dsl` }
|
plugins { `kotlin-dsl` }
|
||||||
|
|
||||||
dependencies {
|
dependencies { implementation(libs.kotlin.gradlePlugin.api) }
|
||||||
implementation(libs.android.gradle.plugin)
|
|
||||||
implementation(libs.kotlin.gradlePlugin)
|
kotlin.jvmToolchain(11)
|
||||||
|
|
||||||
|
gradlePlugin {
|
||||||
|
plugins {
|
||||||
|
create("build") {
|
||||||
|
id = "dev.msfjarvis.tracelog.build"
|
||||||
|
implementationClass = "dev.msfjarvis.tracelog.build.TraceLogBuildPlugin"
|
||||||
|
}
|
||||||
|
create("settings") {
|
||||||
|
id = "dev.msfjarvis.tracelog.settings"
|
||||||
|
implementationClass = "dev.msfjarvis.tracelog.build.TraceLogSettingsPlugin"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,6 @@ dependencyResolutionManagement {
|
||||||
versionCatalogs { maybeCreate("libs").apply { from(files("../gradle/libs.versions.toml")) } }
|
versionCatalogs { maybeCreate("libs").apply { from(files("../gradle/libs.versions.toml")) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.name = "buildSrc"
|
rootProject.name = "build-logic"
|
||||||
|
|
||||||
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
|
enableFeaturePreview("STABLE_CONFIGURATION_CACHE")
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package dev.msfjarvis.tracelog.build
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
|
|
||||||
|
class ArtifactInfoCopyAction(
|
||||||
|
private val project: Project,
|
||||||
|
private val basePackage: String,
|
||||||
|
) : Action<Copy> {
|
||||||
|
|
||||||
|
override fun execute(t: Copy) {
|
||||||
|
t.expand(
|
||||||
|
mapOf(
|
||||||
|
"basePackage" to basePackage,
|
||||||
|
"publishGroup" to "${project.rootProject.findProperty("GROUP")}",
|
||||||
|
"publishVersion" to "${project.rootProject.findProperty("VERSION_NAME")}",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
t.filteringCharset = "UTF-8"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
package dev.msfjarvis.tracelog.build
|
||||||
|
|
||||||
|
interface TraceLogBuildExtension {
|
||||||
|
fun publishing()
|
||||||
|
fun generateArtifactInfo(basePackage: String)
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
package dev.msfjarvis.tracelog.build
|
||||||
|
|
||||||
|
import org.gradle.api.Action
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.plugins.AppliedPlugin
|
||||||
|
import org.gradle.api.tasks.Copy
|
||||||
|
import org.gradle.api.tasks.SourceSetContainer
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtensionConfig
|
||||||
|
|
||||||
|
class TraceLogBuildExtensionImpl(
|
||||||
|
private val project: Project,
|
||||||
|
) : TraceLogBuildExtension {
|
||||||
|
override fun publishing() {
|
||||||
|
project.pluginManager.apply("com.vanniktech.maven.publish")
|
||||||
|
project.pluginManager.apply("org.jetbrains.dokka")
|
||||||
|
project.pluginManager.apply("org.jetbrains.kotlinx.binary-compatibility-validator")
|
||||||
|
|
||||||
|
// Published modules should be explicit about their API visibility.
|
||||||
|
val kotlinPluginHandler = Action<AppliedPlugin> {
|
||||||
|
val kotlin = project.extensions.getByType(
|
||||||
|
KotlinTopLevelExtensionConfig::class.java
|
||||||
|
)
|
||||||
|
kotlin.explicitApi()
|
||||||
|
}
|
||||||
|
project.pluginManager.withPlugin("org.jetbrains.kotlin.jvm", kotlinPluginHandler)
|
||||||
|
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform", kotlinPluginHandler)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun generateArtifactInfo(basePackage: String) {
|
||||||
|
val generateArtifactInfoProvider = project.tasks.register(
|
||||||
|
"generateArtifactInfo",
|
||||||
|
Copy::class.java,
|
||||||
|
ArtifactInfoCopyAction(project, basePackage),
|
||||||
|
)
|
||||||
|
generateArtifactInfoProvider.configure {
|
||||||
|
from(project.rootProject.layout.projectDirectory.dir("artifact-info-template"))
|
||||||
|
into(project.layout.buildDirectory.dir("generated/source/artifact-info-template/main"))
|
||||||
|
}
|
||||||
|
project.extensions.configure<SourceSetContainer>("sourceSets") {
|
||||||
|
getByName("main").java.srcDir(generateArtifactInfoProvider)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
package dev.msfjarvis.tracelog.build
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.kotlin.dsl.withType
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinCompile
|
||||||
|
|
||||||
|
class TraceLogBuildPlugin : Plugin<Project> {
|
||||||
|
override fun apply(target: Project) {
|
||||||
|
target.extensions.add(
|
||||||
|
TraceLogBuildExtension::class.java,
|
||||||
|
"traceLogBuild",
|
||||||
|
TraceLogBuildExtensionImpl(target)
|
||||||
|
)
|
||||||
|
|
||||||
|
commonKotlinConfiguration(target)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun commonKotlinConfiguration(project: Project) {
|
||||||
|
project.tasks.withType<KotlinCompile<*>>().configureEach {
|
||||||
|
kotlinOptions.freeCompilerArgs += "-progressive"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package dev.msfjarvis.tracelog.build
|
||||||
|
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.initialization.Settings
|
||||||
|
|
||||||
|
class TraceLogSettingsPlugin : Plugin<Settings> {
|
||||||
|
override fun apply(target: Settings) {
|
||||||
|
target.gradle.allprojects {
|
||||||
|
pluginManager.apply("dev.msfjarvis.tracelog.build")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +0,0 @@
|
||||||
plugins { `maven-publish` }
|
|
||||||
|
|
||||||
group = "dev.msfjarvis.tracelog"
|
|
||||||
|
|
||||||
version = "1.0.0-SNAPSHOT"
|
|
|
@ -1,9 +0,0 @@
|
||||||
plugins {
|
|
||||||
id("org.jetbrains.kotlin.jvm")
|
|
||||||
id("tracelog-common")
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
jvmToolchain(11)
|
|
||||||
explicitApi()
|
|
||||||
}
|
|
|
@ -1,28 +0,0 @@
|
||||||
plugins {
|
|
||||||
id("org.jetbrains.kotlin.multiplatform")
|
|
||||||
id("com.android.library")
|
|
||||||
id("tracelog-common")
|
|
||||||
}
|
|
||||||
|
|
||||||
kotlin {
|
|
||||||
jvmToolchain(11)
|
|
||||||
explicitApi()
|
|
||||||
jvm()
|
|
||||||
androidTarget()
|
|
||||||
iosX64()
|
|
||||||
iosArm64()
|
|
||||||
tvosX64()
|
|
||||||
tvosArm64()
|
|
||||||
watchosX64()
|
|
||||||
watchosArm32()
|
|
||||||
watchosArm64()
|
|
||||||
macosX64()
|
|
||||||
macosArm64()
|
|
||||||
iosSimulatorArm64()
|
|
||||||
watchosSimulatorArm64()
|
|
||||||
tvosSimulatorArm64()
|
|
||||||
mingwX64()
|
|
||||||
linuxX64()
|
|
||||||
androidNativeArm32()
|
|
||||||
androidNativeArm64()
|
|
||||||
}
|
|
|
@ -1,13 +1,17 @@
|
||||||
plugins {
|
plugins {
|
||||||
alias(libs.plugins.spotless)
|
alias(libs.plugins.spotless)
|
||||||
id("tracelog-jvm-library") apply false
|
alias(libs.plugins.android.library) apply false
|
||||||
id("tracelog-kmp-library") apply false
|
alias(libs.plugins.dokka) apply false
|
||||||
|
alias(libs.plugins.kotlinx.binaryCompatibilityValidator) apply false
|
||||||
|
alias(libs.plugins.kotlin.jvm) apply false
|
||||||
|
alias(libs.plugins.kotlin.multiplatform) apply false
|
||||||
|
alias(libs.plugins.mavenPublish) apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
spotless {
|
spotless {
|
||||||
kotlin {
|
kotlin {
|
||||||
target("**/*.kt")
|
target("**/*.kt")
|
||||||
targetExclude("**/build/")
|
targetExclude("**/build/", "**/artifact-info-template/*")
|
||||||
ktfmt().googleStyle()
|
ktfmt().googleStyle()
|
||||||
}
|
}
|
||||||
kotlinGradle {
|
kotlinGradle {
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
public final class dev/msfjarvis/tracelog/compiler/plugin/DebugLogTransformer : org/jetbrains/kotlin/backend/common/IrElementTransformerVoidWithContext {
|
||||||
|
public fun <init> (Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;Lorg/jetbrains/kotlin/ir/symbols/IrClassSymbol;Lorg/jetbrains/kotlin/ir/symbols/IrSimpleFunctionSymbol;)V
|
||||||
|
public fun visitFunctionNew (Lorg/jetbrains/kotlin/ir/declarations/IrFunction;)Lorg/jetbrains/kotlin/ir/IrStatement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingCommandLineProcessor : org/jetbrains/kotlin/compiler/plugin/CommandLineProcessor {
|
||||||
|
public fun <init> ()V
|
||||||
|
public fun getPluginId ()Ljava/lang/String;
|
||||||
|
public fun getPluginOptions ()Ljava/util/Collection;
|
||||||
|
public fun processOption (Lorg/jetbrains/kotlin/compiler/plugin/AbstractCliOption;Ljava/lang/String;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingCompilerPluginRegistrar : org/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar {
|
||||||
|
public fun <init> ()V
|
||||||
|
public fun getSupportsK2 ()Z
|
||||||
|
public fun registerExtensions (Lorg/jetbrains/kotlin/compiler/plugin/CompilerPluginRegistrar$ExtensionStorage;Lorg/jetbrains/kotlin/config/CompilerConfiguration;)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public final class dev/msfjarvis/tracelog/compiler/plugin/TracingIrGenerationExtension : org/jetbrains/kotlin/backend/common/extensions/IrGenerationExtension {
|
||||||
|
public fun <init> (Lorg/jetbrains/kotlin/cli/common/messages/MessageCollector;Ljava/lang/String;Ljava/lang/String;)V
|
||||||
|
public fun generate (Lorg/jetbrains/kotlin/ir/declarations/IrModuleFragment;Lorg/jetbrains/kotlin/backend/common/extensions/IrPluginContext;)V
|
||||||
|
public fun resolveSymbol (Lorg/jetbrains/kotlin/ir/symbols/IrSymbol;Lorg/jetbrains/kotlin/ir/builders/TranslationPluginContext;)Lorg/jetbrains/kotlin/ir/declarations/IrDeclaration;
|
||||||
|
}
|
||||||
|
|
|
@ -1,17 +1,15 @@
|
||||||
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
import org.gradle.api.tasks.testing.logging.TestLogEvent
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("tracelog-jvm-library")
|
alias(libs.plugins.kotlin.jvm)
|
||||||
alias(libs.plugins.ksp)
|
alias(libs.plugins.ksp)
|
||||||
alias(libs.plugins.buildconfig)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
buildConfig {
|
kotlin.jvmToolchain(11)
|
||||||
packageName("${group}.compiler.plugin")
|
|
||||||
useKotlinOutput { internalVisibility = true }
|
traceLogBuild {
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${project.group}\"")
|
publishing()
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${project.name}\"")
|
generateArtifactInfo("dev.msfjarvis.tracelog")
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${project.version}\"")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.test.configure {
|
tasks.test.configure {
|
||||||
|
@ -20,7 +18,6 @@ tasks.test.configure {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(platform(embeddedKotlin("bom")))
|
|
||||||
compileOnly(libs.kotlin.compiler)
|
compileOnly(libs.kotlin.compiler)
|
||||||
ksp(libs.auto.ksp)
|
ksp(libs.auto.ksp)
|
||||||
compileOnly(libs.auto.annotations)
|
compileOnly(libs.auto.annotations)
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
POM_ARTIFACT_ID=compiler-plugin
|
|
@ -1,6 +1,7 @@
|
||||||
package dev.msfjarvis.tracelog.compiler.plugin
|
package dev.msfjarvis.tracelog.compiler.plugin
|
||||||
|
|
||||||
import com.google.auto.service.AutoService
|
import com.google.auto.service.AutoService
|
||||||
|
import dev.msfjarvis.tracelog.ArtifactInfo
|
||||||
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
|
import org.jetbrains.kotlin.compiler.plugin.AbstractCliOption
|
||||||
import org.jetbrains.kotlin.compiler.plugin.CliOption
|
import org.jetbrains.kotlin.compiler.plugin.CliOption
|
||||||
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
|
import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
|
||||||
|
@ -25,7 +26,7 @@ public class TracingCommandLineProcessor : CommandLineProcessor {
|
||||||
val OPTION_ANNOTATION_NAME =
|
val OPTION_ANNOTATION_NAME =
|
||||||
CliOption(
|
CliOption(
|
||||||
optionName = "debugAnnotation",
|
optionName = "debugAnnotation",
|
||||||
valueDescription = "${BuildConfig.KOTLIN_PLUGIN_GROUP}.runtime.annotations.DebugLog",
|
valueDescription = ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION,
|
||||||
description = ANNOTATION_NAME.toString(),
|
description = ANNOTATION_NAME.toString(),
|
||||||
required = true,
|
required = true,
|
||||||
allowMultipleOccurrences = false,
|
allowMultipleOccurrences = false,
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
../artifact-info-template
|
|
@ -1,25 +1,43 @@
|
||||||
|
@file:Suppress("UnstableApiUsage")
|
||||||
|
|
||||||
|
import java.util.Properties
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("tracelog-jvm-library")
|
alias(libs.plugins.kotlin.jvm)
|
||||||
`java-gradle-plugin`
|
`java-gradle-plugin`
|
||||||
alias(libs.plugins.buildconfig)
|
|
||||||
alias(libs.plugins.ksp)
|
alias(libs.plugins.ksp)
|
||||||
|
alias(libs.plugins.mavenPublish).apply(false)
|
||||||
|
alias(libs.plugins.dokka).apply(false)
|
||||||
|
alias(libs.plugins.kotlinx.binaryCompatibilityValidator).apply(false)
|
||||||
}
|
}
|
||||||
|
|
||||||
buildConfig {
|
kotlin.jvmToolchain(11)
|
||||||
packageName("${group}.gradle.plugin")
|
|
||||||
useKotlinOutput { internalVisibility = true }
|
fun loadParentProperties() {
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_GROUP", "\"${project.group}\"")
|
val properties = Properties()
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_NAME", "\"${project.name}\"")
|
file("../gradle.properties").inputStream().use { properties.load(it) }
|
||||||
buildConfigField("String", "KOTLIN_PLUGIN_VERSION", "\"${project.version}\"")
|
|
||||||
|
properties.forEach { (k, v) ->
|
||||||
|
val key = k.toString()
|
||||||
|
val value = providers.gradleProperty(name).getOrElse(v.toString())
|
||||||
|
extra.set(key, value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
loadParentProperties()
|
||||||
|
|
||||||
|
traceLogBuild {
|
||||||
|
publishing()
|
||||||
|
generateArtifactInfo("dev.msfjarvis.tracelog")
|
||||||
}
|
}
|
||||||
|
|
||||||
gradlePlugin.plugins.register("dev.msfjarvis.tracelog") {
|
gradlePlugin.plugins.register("dev.msfjarvis.tracelog") {
|
||||||
id = group.toString()
|
id = properties["GROUP"].toString()
|
||||||
implementationClass = "$group.gradle.plugin.TraceLogGradlePlugin"
|
implementationClass = "${properties["GROUP"]}.gradle.plugin.TraceLogGradlePlugin"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(platform(embeddedKotlin("bom")))
|
compileOnly(gradleKotlinDsl())
|
||||||
compileOnly(libs.auto.annotations)
|
compileOnly(libs.auto.annotations)
|
||||||
compileOnly(libs.kotlin.gradlePlugin.api)
|
compileOnly(libs.kotlin.gradlePlugin.api)
|
||||||
compileOnly(libs.kotlin.stdlib)
|
compileOnly(libs.kotlin.stdlib)
|
||||||
|
|
|
@ -1 +1,2 @@
|
||||||
|
POM_ARTIFACT_ID=gradle-plugin
|
||||||
kotlin.stdlib.default.dependency=false
|
kotlin.stdlib.default.dependency=false
|
||||||
|
|
|
@ -48,6 +48,8 @@ dependencyResolutionManagement {
|
||||||
versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } }
|
versionCatalogs { create("libs") { from(files("../gradle/libs.versions.toml")) } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins { id("dev.msfjarvis.tracelog.settings") }
|
||||||
|
|
||||||
rootProject.name = "TraceLog-Gradle-Plugin"
|
rootProject.name = "TraceLog-Gradle-Plugin"
|
||||||
|
|
||||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
package dev.msfjarvis.tracelog.gradle.plugin
|
||||||
|
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
|
||||||
|
public abstract class TraceLogExtension {
|
||||||
|
|
||||||
|
public abstract val annotationClass: Property<String>
|
||||||
|
|
||||||
|
public abstract val loggerFunction: Property<String>
|
||||||
|
}
|
|
@ -1,31 +1,75 @@
|
||||||
package dev.msfjarvis.tracelog.gradle.plugin
|
package dev.msfjarvis.tracelog.gradle.plugin
|
||||||
|
|
||||||
import com.google.auto.service.AutoService
|
import com.google.auto.service.AutoService
|
||||||
|
import dev.msfjarvis.tracelog.ArtifactInfo
|
||||||
import org.gradle.api.Plugin
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.plugins.JavaPlugin.IMPLEMENTATION_CONFIGURATION_NAME
|
||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
|
import org.gradle.kotlin.dsl.create
|
||||||
|
import org.gradle.kotlin.dsl.getByType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilerPluginSupportPlugin
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
|
import org.jetbrains.kotlin.gradle.plugin.SubpluginArtifact
|
||||||
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
|
import org.jetbrains.kotlin.gradle.plugin.SubpluginOption
|
||||||
|
|
||||||
@AutoService(Plugin::class)
|
@AutoService(Plugin::class)
|
||||||
public class TraceLogGradlePlugin : KotlinCompilerPluginSupportPlugin {
|
public class TraceLogGradlePlugin : KotlinCompilerPluginSupportPlugin {
|
||||||
|
|
||||||
override fun applyToCompilation(
|
override fun apply(target: Project) {
|
||||||
kotlinCompilation: KotlinCompilation<*>
|
val extension = target.extensions.create<TraceLogExtension>("traceLog")
|
||||||
): Provider<List<SubpluginOption>> {
|
extension.loggerFunction.convention("kotlin.io.println")
|
||||||
return kotlinCompilation.target.project.provider {
|
extension.annotationClass.convention(ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION)
|
||||||
buildList { add(SubpluginOption(key = "loggerFunction", value = "kotlin.io.println")) }
|
|
||||||
|
target.afterEvaluate {
|
||||||
|
val useLocal =
|
||||||
|
it.rootProject.findProperty("tracelog.internal.project-dependency").toString().toBoolean()
|
||||||
|
val annotationDependency =
|
||||||
|
when (extension.annotationClass.get()) {
|
||||||
|
ArtifactInfo.DEFAULT_TRACELOG_ANNOTATION ->
|
||||||
|
if (useLocal) {
|
||||||
|
it.project(":runtime")
|
||||||
|
} else {
|
||||||
|
"dev.msfjarvis.tracelog:runtime:1.0.0-SNAPSHOT"
|
||||||
|
}
|
||||||
|
else -> null
|
||||||
|
}
|
||||||
|
if (annotationDependency != null) {
|
||||||
|
if (target.plugins.hasPlugin("org.jetbrains.kotlin.multiplatform")) {
|
||||||
|
val kotlin = target.extensions.getByName("kotlin") as KotlinSourceSetContainer
|
||||||
|
kotlin.sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME) { sourceSet ->
|
||||||
|
sourceSet.dependencies { implementation(annotationDependency) }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
target.dependencies.add(IMPLEMENTATION_CONFIGURATION_NAME, annotationDependency)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCompilerPluginId(): String = BuildConfig.KOTLIN_PLUGIN_GROUP
|
override fun applyToCompilation(
|
||||||
|
kotlinCompilation: KotlinCompilation<*>
|
||||||
|
): Provider<List<SubpluginOption>> {
|
||||||
|
val project = kotlinCompilation.target.project
|
||||||
|
val extension = project.extensions.getByType<TraceLogExtension>()
|
||||||
|
|
||||||
|
return kotlinCompilation.target.project.provider {
|
||||||
|
buildList {
|
||||||
|
add(SubpluginOption(key = "loggerFunction", value = extension.loggerFunction.get()))
|
||||||
|
add(SubpluginOption(key = "debugAnnotation", value = extension.annotationClass.get()))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getCompilerPluginId(): String = ArtifactInfo.GROUP
|
||||||
|
|
||||||
override fun getPluginArtifact(): SubpluginArtifact =
|
override fun getPluginArtifact(): SubpluginArtifact =
|
||||||
SubpluginArtifact(
|
SubpluginArtifact(
|
||||||
groupId = BuildConfig.KOTLIN_PLUGIN_GROUP,
|
groupId = ArtifactInfo.GROUP,
|
||||||
artifactId = BuildConfig.KOTLIN_PLUGIN_NAME,
|
artifactId = ArtifactInfo.COMPILER_PLUGIN_ARTIFACT,
|
||||||
version = BuildConfig.KOTLIN_PLUGIN_VERSION,
|
version = ArtifactInfo.VERSION,
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true
|
override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true
|
||||||
|
|
|
@ -19,3 +19,4 @@ POM_LICENCE_DIST=repo
|
||||||
POM_DEVELOPER_ID=msfjarvis
|
POM_DEVELOPER_ID=msfjarvis
|
||||||
POM_DEVELOPER_NAME=Harsh Shandilya
|
POM_DEVELOPER_NAME=Harsh Shandilya
|
||||||
POM_DEVELOPER_URL=https://msfjarvis.dev
|
POM_DEVELOPER_URL=https://msfjarvis.dev
|
||||||
|
tracelog.internal.project-dependency=true
|
||||||
|
|
|
@ -1,9 +1,17 @@
|
||||||
[versions]
|
[versions]
|
||||||
|
kotlin = "1.9.0"
|
||||||
junit = "5.10.0"
|
junit = "5.10.0"
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
|
android-library = { id = "com.android.library", version = "8.1.1" }
|
||||||
buildconfig = "com.github.gmazzo.buildconfig:4.1.2"
|
buildconfig = "com.github.gmazzo.buildconfig:4.1.2"
|
||||||
|
dokka = { id = "org.jetbrains.dokka", version = "1.8.20" }
|
||||||
|
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
|
||||||
|
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
|
||||||
|
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
|
||||||
|
kotlinx-binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.13.2" }
|
||||||
ksp = "com.google.devtools.ksp:1.9.0-1.0.13"
|
ksp = "com.google.devtools.ksp:1.9.0-1.0.13"
|
||||||
|
mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.25.3" }
|
||||||
spotless = "com.diffplug.spotless:6.21.0"
|
spotless = "com.diffplug.spotless:6.21.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
@ -14,9 +22,9 @@ junit-jupiter-api = { module = "org.junit.jupiter:junit-jupiter-api", version.re
|
||||||
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
|
junit-jupiter-engine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref = "junit" }
|
||||||
junit-legacy = "junit:junit:4.13.2"
|
junit-legacy = "junit:junit:4.13.2"
|
||||||
kct = "dev.zacsweers.kctfork:core:0.3.2"
|
kct = "dev.zacsweers.kctfork:core:0.3.2"
|
||||||
kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable" }
|
kotlin-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler-embeddable", version.ref = "kotlin" }
|
||||||
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin" }
|
kotlin-gradlePlugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
|
||||||
kotlin-gradlePlugin-api = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api" }
|
kotlin-gradlePlugin-api = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin-api", version.ref = "kotlin" }
|
||||||
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib" }
|
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
|
||||||
mordant = "com.github.ajalt.mordant:mordant:2.1.0"
|
mordant = "com.github.ajalt.mordant:mordant:2.1.0"
|
||||||
truth = "com.google.truth:truth:1.1.5"
|
truth = "com.google.truth:truth:1.1.5"
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
public abstract interface class dev/msfjarvis/tracelog/runtime/TracingConsumer {
|
||||||
|
public abstract fun trace (JLjava/lang/String;Ljava/lang/String;B)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract interface annotation class dev/msfjarvis/tracelog/runtime/annotations/DebugLog : java/lang/annotation/Annotation {
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
public abstract interface class dev/msfjarvis/tracelog/runtime/TracingConsumer {
|
||||||
|
public abstract fun trace (JLjava/lang/String;Ljava/lang/String;B)V
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract interface annotation class dev/msfjarvis/tracelog/runtime/annotations/DebugLog : java/lang/annotation/Annotation {
|
||||||
|
}
|
||||||
|
|
|
@ -1,4 +1,31 @@
|
||||||
plugins { id("tracelog-kmp-library") }
|
plugins {
|
||||||
|
alias(libs.plugins.kotlin.multiplatform)
|
||||||
|
alias(libs.plugins.android.library)
|
||||||
|
}
|
||||||
|
|
||||||
|
traceLogBuild { publishing() }
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvmToolchain(11)
|
||||||
|
jvm()
|
||||||
|
androidTarget()
|
||||||
|
iosX64()
|
||||||
|
iosArm64()
|
||||||
|
tvosX64()
|
||||||
|
tvosArm64()
|
||||||
|
watchosX64()
|
||||||
|
watchosArm32()
|
||||||
|
watchosArm64()
|
||||||
|
macosX64()
|
||||||
|
macosArm64()
|
||||||
|
iosSimulatorArm64()
|
||||||
|
watchosSimulatorArm64()
|
||||||
|
tvosSimulatorArm64()
|
||||||
|
mingwX64()
|
||||||
|
linuxX64()
|
||||||
|
androidNativeArm32()
|
||||||
|
androidNativeArm64()
|
||||||
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdk = 33
|
compileSdk = 33
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
POM_ARTIFACT_ID=runtime
|
|
@ -1,24 +1,16 @@
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("tracelog-jvm-library")
|
alias(libs.plugins.kotlin.jvm)
|
||||||
|
id("dev.msfjarvis.tracelog")
|
||||||
application
|
application
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kotlin.jvmToolchain(11)
|
||||||
|
|
||||||
|
traceLog { loggerFunction.set("dev.msfjarvis.tracelog.sample.recordMessage") }
|
||||||
|
|
||||||
application { mainClass.set("dev.msfjarvis.tracelog.sample.MainKt") }
|
application { mainClass.set("dev.msfjarvis.tracelog.sample.MainKt") }
|
||||||
|
|
||||||
tasks.withType<KotlinCompile>().configureEach {
|
|
||||||
compilerOptions.freeCompilerArgs.addAll(
|
|
||||||
"-P",
|
|
||||||
"plugin:dev.msfjarvis.tracelog:loggerFunction=dev.msfjarvis.tracelog.sample.recordMessage",
|
|
||||||
"-P",
|
|
||||||
"plugin:dev.msfjarvis.tracelog:debugAnnotation=dev/msfjarvis/tracelog/runtime/annotations/DebugLog",
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(platform(embeddedKotlin("bom")))
|
|
||||||
kotlinCompilerPluginClasspath(projects.compilerPlugin)
|
|
||||||
implementation(projects.runtime)
|
implementation(projects.runtime)
|
||||||
implementation(libs.mordant)
|
implementation(libs.mordant)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,12 @@
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTargetWithHostTests
|
||||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
|
||||||
|
|
||||||
plugins { kotlin("multiplatform") }
|
plugins {
|
||||||
|
alias(libs.plugins.kotlin.multiplatform)
|
||||||
tasks.withType<KotlinCompile>().configureEach {
|
id("dev.msfjarvis.tracelog")
|
||||||
compilerOptions.freeCompilerArgs.addAll(
|
|
||||||
"-P",
|
|
||||||
"plugin:dev.msfjarvis.tracelog:loggerFunction=recordMessage",
|
|
||||||
"-P",
|
|
||||||
"plugin:dev.msfjarvis.tracelog:debugAnnotation=dev/msfjarvis/tracelog/runtime/annotations/DebugLog",
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
traceLog { loggerFunction.set("recordMessage") }
|
||||||
|
|
||||||
fun KotlinNativeTargetWithHostTests.configureTarget() = binaries {
|
fun KotlinNativeTargetWithHostTests.configureTarget() = binaries {
|
||||||
executable { entryPoint = "main" }
|
executable { entryPoint = "main" }
|
||||||
}
|
}
|
||||||
|
@ -22,8 +17,6 @@ kotlin {
|
||||||
macosX64 { configureTarget() }
|
macosX64 { configureTarget() }
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
commonMainImplementation(platform(embeddedKotlin("bom")))
|
|
||||||
kotlinCompilerPluginClasspath(projects.compilerPlugin)
|
|
||||||
commonMainImplementation(projects.runtime)
|
commonMainImplementation(projects.runtime)
|
||||||
commonMainImplementation(libs.mordant)
|
commonMainImplementation(libs.mordant)
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,7 @@ pluginManagement {
|
||||||
includeGroup("com.android.tools.lint")
|
includeGroup("com.android.tools.lint")
|
||||||
includeGroup("com.android.tools.utp")
|
includeGroup("com.android.tools.utp")
|
||||||
includeGroup("com.google.testing.platform")
|
includeGroup("com.google.testing.platform")
|
||||||
|
includeModule("com.android.library", "com.android.library.gradle.plugin")
|
||||||
includeModule("com.android.tools", "annotations")
|
includeModule("com.android.tools", "annotations")
|
||||||
includeModule("com.android.tools", "common")
|
includeModule("com.android.tools", "common")
|
||||||
includeModule("com.android.tools", "desugar_jdk_libs")
|
includeModule("com.android.tools", "desugar_jdk_libs")
|
||||||
|
@ -61,10 +62,13 @@ dependencyResolutionManagement {
|
||||||
includeGroup("com.android.tools.lint")
|
includeGroup("com.android.tools.lint")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mavenLocal { content { includeModule("dev.msfjarvis.tracelog", "compiler-plugin") } }
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugins { id("dev.msfjarvis.tracelog.settings") }
|
||||||
|
|
||||||
rootProject.name = "TraceLog"
|
rootProject.name = "TraceLog"
|
||||||
|
|
||||||
include(
|
include(
|
||||||
|
|
Loading…
Reference in New Issue