diff --git a/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithOtherAnnotation.kt b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithOtherAnnotation.kt new file mode 100644 index 00000000000..f2e85b1118c --- /dev/null +++ b/plugins/scripting/scripting-cli/testData/lazyDefinitions/definitions/TestScriptWithOtherAnnotation.kt @@ -0,0 +1,5 @@ + +import kotlin.script.templates.* + +@ScriptTemplateDefinition +abstract class TestScriptWithOtherAnnotation diff --git a/plugins/scripting/scripting-cli/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt b/plugins/scripting/scripting-cli/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt index d8dc6b809c0..cd74c13f7fa 100644 --- a/plugins/scripting/scripting-cli/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt +++ b/plugins/scripting/scripting-cli/tests/org/jetbrains/kotlin/scripting/compiler/plugin/ScriptingCompilerPluginTest.kt @@ -156,6 +156,42 @@ class ScriptingCompilerPluginTest : TestCaseWithTmpdir() { Assert.assertEquals(ExitCode.OK, exitCode) } + + fun testLazyScriptDefinitionOtherAnnotation() { + + val defsOut = File(tmpdir, "testLazyScriptDefinition/out/otherAnn") + val defsSrc = File(TEST_DATA_DIR, "lazyDefinitions/definitions") + val defClasses = listOf("TestScriptWithOtherAnnotation") + + val messageCollector = TestMessageCollector() + + val definitionsCompileResult = KotlinToJVMBytecodeCompiler.compileBunchOfSources( + createEnvironment(defClasses.map { File(defsSrc, "$it.kt").canonicalPath }, defsOut, messageCollector) { + addJvmClasspathRoots(runtimeClasspath) + addJvmClasspathRoots(scriptingClasspath) + } + ) + + assertTrue(definitionsCompileResult) { + "Compilation of script definitions failed: $messageCollector" + } + + val templatesDir = File(defsOut, SCRIPT_DEFINITION_MARKERS_PATH).also { it.mkdirs() } + for (def in defClasses) { + File(templatesDir, def).createNewFile() + } + + messageCollector.clear() + + discoverScriptTemplatesInClasspath(listOf(defsOut), emptyList(), this::class.java.classLoader, emptyMap(), messageCollector).toList() + + assertTrue( + messageCollector.messages.isNotEmpty() + && messageCollector.messages.all { it.message.contains("s not marked with any known kotlin script annotation") } + ) { + "Unexpected messages from discovery sequence:\n$messageCollector" + } + } } class TestMessageCollector : MessageCollector {