From cf57e5a7a18c312e1938e003d40ca8844593f3ae Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Wed, 5 Jul 2017 21:40:11 +0300 Subject: [PATCH] Script templates: search for parameterless constructor of resolver --- .../KotlinScriptDefinitionFromAnnotatedTemplate.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt b/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt index fa7db21fd4f..a155719809d 100644 --- a/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt +++ b/compiler/frontend.script/src/org/jetbrains/kotlin/script/KotlinScriptDefinitionFromAnnotatedTemplate.kt @@ -25,7 +25,6 @@ import kotlin.reflect.KClass import kotlin.reflect.KFunction import kotlin.reflect.KParameter import kotlin.reflect.full.memberFunctions -import kotlin.reflect.full.primaryConstructor import kotlin.script.dependencies.DependenciesResolver import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.templates.AcceptedAnnotations @@ -71,15 +70,17 @@ open class KotlinScriptDefinitionFromAnnotatedTemplate( } private fun instantiateResolver(resolverClass: KClass): T? { - // TODO: logScriptDefMessage missing or invalid constructor - return try { - resolverClass.primaryConstructor?.call().also { - if (it == null) log.warn("[kts] No default constructor found for ${resolverClass.qualifiedName}") + try { + val constructorWithoutParameters = resolverClass.constructors.find { it.parameters.all { it.isOptional } } + if (constructorWithoutParameters == null) { + log.warn("[kts] ${resolverClass.qualifiedName} must have a constructor without parameters") + return null } + return constructorWithoutParameters.call() } catch (ex: ClassCastException) { log.warn("[kts] Script def error ${ex.message}") - null + return null } }