Hello,

* what is the purpose of CompilationCustomizer.getPhase(), which is not 
described at 
https://docs.groovy-lang.org/4.0.0/html/api/org/codehaus/groovy/control/customizers/CompilationCustomizer.html#getPhase()
 ?

OpenHAB integrates Groovy 4.0.28 ala JSR223 by utilizing two files - 
https://github.com/openhab/openhab-addons/tree/main/bundles/org.openhab.automation.groovyscripting/src/main/java/org/openhab/automation/groovyscripting/internal
 .

When a .groovy input file is proceeded, first some default things are inserted 
into the scripting engine in GroovyScriptEngineFactory.scopeValues().  If the 
thing is a variable, then it is inserted with scriptEngine.put(variable-name, 
value).  If the thing is a class, then the class is added to an 
ImportCustomizer, and the latter is at the end 
.addCompilationCustomizers(importCustomizer).  This works!

After the script execution has started, in OpenHAB JSR223 one can execute 
`se.importPreset("RuleSupport")` - cf 
https://www.openhab.org/docs/configuration/jsr223.html - to add further things 
in the context.  Currently GroovyScriptEngineFactory.scopeValues() does again 
for classes create a new ImportCustomizer, addImport, e.g. 
addImport("TriggerBuilder", org.openhab.core.automation.util.TriggerBuilder).  
This does not work, however, and the question is why: with the content of file 
t.groovy:n

se.importPreset("RuleSupport")
var k = TriggerBuilder.create()

produces an error:

javax.script.ScriptException: groovy.lang.MissingPropertyException: No such 
property: TriggerBuilder for class: t

* As far as I see ImportCustomizer has always phase=CONVERSION.  Does this 
mean, that ImportCustomizer can only be adjusted before script execution has 
started?
* What should above `se.importPreset("RuleSupport")` do, so that the second 
line assumes that `import org.openhab.core.automation.util.TriggerBuilder;` is 
executed after the first line and before the second line?

Thanks // Дилян

Reply via email to