Hi all, I am trying to pass an argument to a Kotli...
# scripting
m
Hi all, I am trying to pass an argument to a KotlinScript (1.3.72) but it seems the generated script class has only a default constructor
Copy code
@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`:
Copy code
object SiteCostScriptEvaluationConfiguration : ScriptEvaluationConfiguration({
    constructorArgs("hugo")
})
however, if the script is evaluated using the following code
Copy 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)
Copy code
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
?
✔️ 2
I found it … using `BasicJvmScriptingHost().evalWithTemplate<SiteCostScript>`and removing the two configurations from the `SiteCostScript`class resolved the issue