diff --git a/burst-kotlin-plugin-tests/src/test/kotlin/app/cash/burst/kotlin/BurstKotlinPluginTest.kt b/burst-kotlin-plugin-tests/src/test/kotlin/app/cash/burst/kotlin/BurstKotlinPluginTest.kt index c70d392..924cfba 100644 --- a/burst-kotlin-plugin-tests/src/test/kotlin/app/cash/burst/kotlin/BurstKotlinPluginTest.kt +++ b/burst-kotlin-plugin-tests/src/test/kotlin/app/cash/burst/kotlin/BurstKotlinPluginTest.kt @@ -86,7 +86,32 @@ class BurstKotlinPluginTest { } @Test - fun unexpectedArgumentType() { + fun unexpectedClassArgumentType() { + val result = compile( + sourceFile = SourceFile.kotlin( + "CoffeeTest.kt", + """ + import app.cash.burst.Burst + import kotlin.test.Test + + @Burst + class CoffeeTest(espresso: String) { + @Test + fun test() { + } + } + """, + ), + ) + assertEquals(KotlinCompilation.ExitCode.COMPILATION_ERROR, result.exitCode, result.messages) + assertThat(result.messages).contains( + "CoffeeTest.kt:5:18 " + + "@Burst parameter must be a boolean, an enum, or have a burstValues() default value", + ) + } + + @Test + fun unexpectedFunctionArgumentType() { val result = compile( sourceFile = SourceFile.kotlin( "CoffeeTest.kt", diff --git a/burst-kotlin-plugin/src/main/kotlin/app/cash/burst/kotlin/BurstIrGenerationExtension.kt b/burst-kotlin-plugin/src/main/kotlin/app/cash/burst/kotlin/BurstIrGenerationExtension.kt index 5fe872b..56ee81a 100644 --- a/burst-kotlin-plugin/src/main/kotlin/app/cash/burst/kotlin/BurstIrGenerationExtension.kt +++ b/burst-kotlin-plugin/src/main/kotlin/app/cash/burst/kotlin/BurstIrGenerationExtension.kt @@ -45,12 +45,16 @@ class BurstIrGenerationExtension( } if (classHasAtBurst && classDeclaration.modality != Modality.ABSTRACT) { - ClassSpecializer( - pluginContext = pluginContext, - burstApis = burstApis, - originalParent = currentFile, - original = classDeclaration, - ).generateSpecializations() + try { + ClassSpecializer( + pluginContext = pluginContext, + burstApis = burstApis, + originalParent = currentFile, + original = classDeclaration, + ).generateSpecializations() + } catch (e: BurstCompilationException) { + messageCollector.report(e.severity, e.message, currentFile.locationOf(e.element)) + } } // Snapshot the original functions because the loop mutates them.