Script templates: search for parameterless constructor of resolver

This commit is contained in:
Pavel V. Talanov
2017-07-05 21:40:11 +03:00
committed by Pavel V. Talanov
parent 10e14103b6
commit cf57e5a7a1
@@ -25,7 +25,6 @@ import kotlin.reflect.KClass
import kotlin.reflect.KFunction import kotlin.reflect.KFunction
import kotlin.reflect.KParameter import kotlin.reflect.KParameter
import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberFunctions
import kotlin.reflect.full.primaryConstructor
import kotlin.script.dependencies.DependenciesResolver import kotlin.script.dependencies.DependenciesResolver
import kotlin.script.dependencies.ScriptDependenciesResolver import kotlin.script.dependencies.ScriptDependenciesResolver
import kotlin.script.templates.AcceptedAnnotations import kotlin.script.templates.AcceptedAnnotations
@@ -71,15 +70,17 @@ open class KotlinScriptDefinitionFromAnnotatedTemplate(
} }
private fun <T : Any> instantiateResolver(resolverClass: KClass<T>): T? { private fun <T : Any> instantiateResolver(resolverClass: KClass<T>): T? {
// TODO: logScriptDefMessage missing or invalid constructor try {
return try { val constructorWithoutParameters = resolverClass.constructors.find { it.parameters.all { it.isOptional } }
resolverClass.primaryConstructor?.call().also { if (constructorWithoutParameters == null) {
if (it == null) log.warn("[kts] No default constructor found for ${resolverClass.qualifiedName}") log.warn("[kts] ${resolverClass.qualifiedName} must have a constructor without parameters")
return null
} }
return constructorWithoutParameters.call()
} }
catch (ex: ClassCastException) { catch (ex: ClassCastException) {
log.warn("[kts] Script def error ${ex.message}") log.warn("[kts] Script def error ${ex.message}")
null return null
} }
} }