mr_kay
05/20/2020, 6:51 PM@KotlinScript(
fileExtension = "siteCost.kts",
compilationConfiguration = SiteCostScriptCompilationConfiguration::class,
evaluationConfiguration = SiteCostScriptEvaluationConfiguration::class
)
abstract class SiteCostScript(val arg: String)
for the time being, the constructor arg is directly passed in the `EvaluationConfiguration`:
object SiteCostScriptEvaluationConfiguration : ScriptEvaluationConfiguration({
constructorArgs("hugo")
})
however, if the script is evaluated using the following code
fun <T> eval(scriptString: String, resultClass: Class<T>): T {
val jvmScriptingHost = BasicJvmScriptingHost().eval(
scriptString.toScriptSource(),
SiteCostScriptCompilationConfiguration,
SiteCostScriptEvaluationConfiguration
)
return (resultWithDiag.valueOrThrow().returnValue as ResultValue.Value).value as T
}
I get an Exception (abbreviated)
java.lang.RuntimeException: java.lang.IllegalArgumentException: wrong number of arguments
at kotlin.script.experimental.api.ErrorHandlingKt.valueOrThrow(errorHandling.kt:240)
at com.zitecs.ologis.modules.ologisscriptengine.sitecost.control.kotlinscripting.SiteCostScriptingHost.eval(SiteCostScriptingHost.kt:19)
at com.zitecs.ologis.modules.ologisscriptengine.sitecost.control.kotlinscripting.SiteCostScriptingHostTest.return ScCostAssessment(SiteCostScriptingHostTest.kt:40)
....
at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:58)
Caused by: java.lang.IllegalArgumentException: wrong number of arguments
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at kotlin.script.experimental.jvm.BasicJvmScriptEvaluator.evalWithConfigAndOtherScriptsResults(BasicJvmScriptEvaluator.kt:95)
It seems BasicJvmScriptEvaluator.evalWithConfigAndOtherScriptsResults
tries to invoke a default constructor (without args) which does not exist.
What am I doing wrong? Am I supposed to implement my own ScriptEvaluator
?mr_kay
05/20/2020, 7:04 PM