From 49ca3647a0de67ef4535d898f6c8109c335ab1e9 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 08:20:46 -0400 Subject: [PATCH 1/7] Change capitalization of version to be idiomatic constant --- mockingbird-plugin/plugin/build.gradle.kts | 2 +- .../mockingbird/plugin/MockingbirdPlugin.kt | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/mockingbird-plugin/plugin/build.gradle.kts b/mockingbird-plugin/plugin/build.gradle.kts index a76a642..b7167d6 100644 --- a/mockingbird-plugin/plugin/build.gradle.kts +++ b/mockingbird-plugin/plugin/build.gradle.kts @@ -13,7 +13,7 @@ buildConfig { internalVisibility = true } - buildConfigField("String", "mockingbirdVersion", "\"${property("VERSION").toString()}\"") + buildConfigField("String", "MOCKINGBIRD_VERSION", "\"${property("VERSION").toString()}\"") } kotlin { diff --git a/mockingbird-plugin/plugin/src/main/java/com/anthonycr/mockingbird/plugin/MockingbirdPlugin.kt b/mockingbird-plugin/plugin/src/main/java/com/anthonycr/mockingbird/plugin/MockingbirdPlugin.kt index 4036b67..4e5424f 100644 --- a/mockingbird-plugin/plugin/src/main/java/com/anthonycr/mockingbird/plugin/MockingbirdPlugin.kt +++ b/mockingbird-plugin/plugin/src/main/java/com/anthonycr/mockingbird/plugin/MockingbirdPlugin.kt @@ -17,19 +17,19 @@ class MockingbirdPlugin : KotlinCompilerPluginSupportPlugin { pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { extensions.getByType(KotlinBaseExtension::class.java).apply { sourceSets.getByName(COMMON_TEST_SOURCE_SET_NAME).dependencies { - implementation("com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") + implementation("com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") } } } pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { - dependencies.add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") + dependencies.add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") } pluginManager.withPlugin("org.jetbrains.kotlin.android") { dependencies.apply { - add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") - add("androidTestImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") + add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") + add("androidTestImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") } } @@ -37,8 +37,8 @@ class MockingbirdPlugin : KotlinCompilerPluginSupportPlugin { target.pluginManager.withPlugin("com.android.base") { if (target.plugins.hasPlugin(KotlinBaseApiPlugin::class.java)) { target.dependencies.apply { - add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") - add("androidTestImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.mockingbirdVersion}") + add("testImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") + add("androidTestImplementation", "com.anthonycr.mockingbird:core:${BuildConfig.MOCKINGBIRD_VERSION}") } } } @@ -53,7 +53,7 @@ class MockingbirdPlugin : KotlinCompilerPluginSupportPlugin { override fun getCompilerPluginId(): String = "com.anthonycr.mockingbird.plugin" override fun getPluginArtifact(): SubpluginArtifact = SubpluginArtifact( - groupId = "com.anthonycr.mockingbird", artifactId = "compiler-plugin", version = BuildConfig.mockingbirdVersion + groupId = "com.anthonycr.mockingbird", artifactId = "compiler-plugin", version = BuildConfig.MOCKINGBIRD_VERSION ) override fun isApplicable(kotlinCompilation: KotlinCompilation<*>): Boolean = true From 23f91c92c7d108125d440dbb4e811a00bdf94e42 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 08:20:58 -0400 Subject: [PATCH 2/7] Change map setting to idiomatic access --- .../mockingbird/compiler/ir/MockingbirdFunctionCollector.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/MockingbirdFunctionCollector.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/MockingbirdFunctionCollector.kt index 8d74278..6c622d5 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/MockingbirdFunctionCollector.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/MockingbirdFunctionCollector.kt @@ -23,7 +23,7 @@ class MockingbirdFunctionCollector( val prefixedFqName = FqName( "$GENERATED_PREFIX.${expression.type.classFqName!!.asString()}" ) - typesToGenerate.put(prefixedFqName, expression.type) + typesToGenerate[prefixedFqName] = expression.type messageCollector.debug("Collected type from call ${expression.type.classFqName!!}") } return super.visitCall(expression) From fa9cf3c8e00c64780d5a54d74ed0cca9c8ff6955 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 08:21:06 -0400 Subject: [PATCH 3/7] Switch from java to kotlin foreach --- .../mockingbird/compiler/MockingbirdIrGenerationExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt index 92a8eb8..ef39ab9 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt @@ -24,7 +24,7 @@ class MockingbirdIrGenerationExtension( val collector = MockingbirdFunctionCollector(messageCollector) moduleFragment.accept(collector, null) - collector.typesToGenerate.forEach { name, type -> + collector.typesToGenerate.forEach { (name, type) -> val fakeNewPath = Path(name.parent().asString().replace(".", "/")) .resolve(name.shortName().asString() + "_Fake.kt") // Idea taken from https://github.com/ZacSweers/metro/blob/0.6.8/compiler/src/main/kotlin/dev/zacsweers/metro/compiler/ir/transformers/HintGenerator.kt From c2a5b4b24a9cf14018333b466572c20ad0639040 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 08:30:36 -0400 Subject: [PATCH 4/7] Remove unused parameter --- .../mockingbird/compiler/MockingbirdIrGenerationExtension.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt index ef39ab9..6edeb84 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdIrGenerationExtension.kt @@ -24,7 +24,7 @@ class MockingbirdIrGenerationExtension( val collector = MockingbirdFunctionCollector(messageCollector) moduleFragment.accept(collector, null) - collector.typesToGenerate.forEach { (name, type) -> + collector.typesToGenerate.forEach { (name, _) -> val fakeNewPath = Path(name.parent().asString().replace(".", "/")) .resolve(name.shortName().asString() + "_Fake.kt") // Idea taken from https://github.com/ZacSweers/metro/blob/0.6.8/compiler/src/main/kotlin/dev/zacsweers/metro/compiler/ir/transformers/HintGenerator.kt From be973a0cbf3b718f5fb9ff20f9971c083e592cad Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 08:32:55 -0400 Subject: [PATCH 5/7] Support Kotlin 2.4.20 --- gradle/libs.versions.toml | 2 +- kotlin-js-store/yarn.lock | 16 ++++++++-------- .../compiler/MockingbirdComponentRegistrar.kt | 2 ++ .../mockingbird/compiler/ir/declarations.kt | 18 +++++++++--------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a838141..536d575 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] junit = "4.13.2" -jetbrainsKotlin = "2.4.10" +jetbrainsKotlin = "2.4.20" kotlinpoet = "2.4.0" ksp = "2.3.11" jvm = "21" diff --git a/kotlin-js-store/yarn.lock b/kotlin-js-store/yarn.lock index 3297918..62df1f6 100644 --- a/kotlin-js-store/yarn.lock +++ b/kotlin-js-store/yarn.lock @@ -254,10 +254,10 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -kotlin-web-helpers@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.0.0.tgz#3ed6b48f694f74bb60a737a9d7e2c0e3b29abdb9" - integrity sha512-kdQO4AJQkUPvpLh9aglkXDRyN+CfXO7pKq+GESEnxooBFkQpytLrqZis3ABvmFN1cGw/ZQ/K38u5sRGW+NfBnw== +kotlin-web-helpers@3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/kotlin-web-helpers/-/kotlin-web-helpers-3.3.0.tgz#4c0bf6bcfa64752f6f1531e4c84583943bc7e9d6" + integrity sha512-sXnwHZ2YGMtIia+NQlf/c0UDtwVNHhXsIH+uHkTv87AvvZQJjJ+XbdkvUUuomPWgBC5TgcQLDEGLcjL48QkFkQ== dependencies: format-util "^1.0.5" @@ -293,10 +293,10 @@ minimatch@^9.0.4, minimatch@^9.0.5: resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== -mocha@11.7.5: - version "11.7.5" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.5.tgz#58f5bbfa5e0211ce7e5ee6128107cefc2515a627" - integrity sha512-mTT6RgopEYABzXWFx+GcJ+ZQ32kp4fMf0xvpZIIfSq9Z8lC/++MtcCnQ9t5FP2veYEP95FIYSvW+U9fV4xrlig== +mocha@11.7.6: + version "11.7.6" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-11.7.6.tgz#ebbe22989d04cbb9424a36307320476624c41a33" + integrity sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA== dependencies: browser-stdout "^1.3.1" chokidar "^4.0.1" diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt index 9bb053b..b41d373 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.compiler.plugin.CompilerPluginRegistrar import org.jetbrains.kotlin.compiler.plugin.ExperimentalCompilerApi import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.config.MessageCollectorAccess @OptIn(ExperimentalCompilerApi::class) class MockingbirdComponentRegistrar : CompilerPluginRegistrar() { @@ -14,6 +15,7 @@ class MockingbirdComponentRegistrar : CompilerPluginRegistrar() { override val supportsK2: Boolean get() = true + @OptIn(MessageCollectorAccess::class) override fun ExtensionStorage.registerExtensions( configuration: CompilerConfiguration ) { diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/declarations.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/declarations.kt index dd69ed2..92740b3 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/declarations.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/ir/declarations.kt @@ -18,7 +18,7 @@ class PropertyDeclaration( val callableId: CallableId, ) { val symbol by lazy { - pluginContext.referenceProperties(callableId).first() + pluginContext.finderForBuiltins().findProperties(callableId).first() } val getter by lazy { symbol.owner.getter!! @@ -36,7 +36,7 @@ class FunctionDeclaration( pluginContext: IrPluginContext, selector: Collection.() -> IrSimpleFunctionSymbol ) : this( - { pluginContext.referenceFunctions(callableId).selector() } + { pluginContext.finderForBuiltins().findFunctions(callableId).selector() } ) val symbol by lazy { @@ -62,10 +62,10 @@ class Verification { class Verifiable(private val pluginContext: IrPluginContext) { val classId = - ClassId.Companion.topLevel(FqName("com.anthonycr.mockingbird.core.internal.Verifiable")) + ClassId.topLevel(FqName("com.anthonycr.mockingbird.core.internal.Verifiable")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } val invocations by lazy { @@ -101,7 +101,7 @@ class Verifiable(private val pluginContext: IrPluginContext) { val classId = verifiable.classId.createNestedClassId(Name.identifier("Invocation")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } } @@ -111,7 +111,7 @@ class Verifiable(private val pluginContext: IrPluginContext) { val classId = verifiable.classId.createNestedClassId(Name.identifier("Matcher")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } class Equals(private val pluginContext: IrPluginContext) { @@ -120,7 +120,7 @@ class Verifiable(private val pluginContext: IrPluginContext) { val classId = matcher.classId.createNestedClassId(Name.identifier("Equals")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } val value by lazy { @@ -134,7 +134,7 @@ class Verifiable(private val pluginContext: IrPluginContext) { val classId = matcher.classId.createNestedClassId(Name.identifier("SameAs")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } } @@ -144,7 +144,7 @@ class Verifiable(private val pluginContext: IrPluginContext) { val classId = matcher.classId.createNestedClassId(Name.identifier("Anything")) val symbol by lazy { - pluginContext.referenceClass(classId)!! + pluginContext.finderForBuiltins().findClass(classId)!! } } } From e7a6476958b16123c5663528691c0733c3775c66 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Wed, 9 Sep 2026 23:32:29 -0400 Subject: [PATCH 6/7] Switch to map accessor --- .../mockingbird/compiler/MockingbirdComponentRegistrar.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt index b41d373..e9abecb 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt @@ -19,10 +19,7 @@ class MockingbirdComponentRegistrar : CompilerPluginRegistrar() { override fun ExtensionStorage.registerExtensions( configuration: CompilerConfiguration ) { - val messageCollector = configuration.get( - CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY, - MessageCollector.NONE - ) + val messageCollector = configuration[CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE] IrGenerationExtension.registerExtension(MockingbirdIrGenerationExtension(messageCollector)) } } From 685523f010d36f68a94a7e18b2777404e3ed0034 Mon Sep 17 00:00:00 2001 From: Anthony Restaino Date: Thu, 10 Sep 2026 00:00:04 -0400 Subject: [PATCH 7/7] Add todo --- .../mockingbird/compiler/MockingbirdComponentRegistrar.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt index e9abecb..0729c62 100644 --- a/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt +++ b/mockingbird/compiler/src/main/kotlin/com/anthonycr/mockingbird/compiler/MockingbirdComponentRegistrar.kt @@ -19,6 +19,7 @@ class MockingbirdComponentRegistrar : CompilerPluginRegistrar() { override fun ExtensionStorage.registerExtensions( configuration: CompilerConfiguration ) { + // TODO: Remove debug logs and switch to DiagnosticReporter on IrPluginContext for error reporting. val messageCollector = configuration[CommonConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE] IrGenerationExtension.registerExtension(MockingbirdIrGenerationExtension(messageCollector)) }