void collectExpressions()

in extensions/joor/deployment/src/main/java/org/apache/camel/quarkus/component/joor/deployment/JoorProcessor.java [72:120]


    void collectExpressions(JoorExpressionConfig config,
            ExpressionExtractionResultBuildItem result,
            List<ExpressionBuildItem> expressions,
            List<ScriptBuildItem> scripts,
            BuildProducer<JoorExpressionSourceBuildItem> producer) throws Exception {
        if (result.isSuccess()) {
            List<ExpressionBuildItem> joorExpressions = expressions.stream()
                    .filter(exp -> "joor".equals(exp.getLanguage()))
                    .collect(Collectors.toList());
            List<ScriptBuildItem> joorScripts = scripts.stream()
                    .filter(exp -> "joor".equals(exp.getLanguage()))
                    .collect(Collectors.toList());
            if (joorExpressions.isEmpty() && joorScripts.isEmpty()) {
                return;
            }
            // Don't close it as it won't be started and some log entries are added on close/stop
            CamelContext ctx = new DefaultCamelContext();
            try (JoorLanguage language = new JoorLanguage()) {
                language.setCamelContext(ctx);
                language.setSingleQuotes(config.singleQuotes);
                config.configResource.ifPresent(language::setConfigResource);
                language.setPreCompile(false);
                language.init();
                JoorCompiler compiler = language.getCompiler();
                for (ExpressionBuildItem expression : joorExpressions) {
                    JoorExpression exp = (JoorExpression) language.createExpression(expression.getExpression(),
                            expression.getProperties());
                    ExpressionUID id = new ExpressionUID(expression.getExpression(), exp.isSingleQuotes());
                    String name = String.format("%s.%s", PACKAGE_NAME, id);
                    String content = compiler.evalCode(ctx, name, expression.getExpression(), exp.isSingleQuotes());
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("Compiling expression:\n\n{}\n", content);
                    }
                    producer.produce(new JoorExpressionSourceBuildItem(id, name, content));
                }
                JoorScriptingCompiler scriptingCompiler = language.getScriptingCompiler();
                for (ScriptBuildItem script : joorScripts) {
                    ScriptUID id = new ScriptUID(script.getContent(), script.getBindings(), language.isSingleQuotes());
                    String name = String.format("%s.%s", PACKAGE_NAME, id);
                    String content = scriptingCompiler.evalCode(ctx, name, script.getContent(), script.getBindings(),
                            language.isSingleQuotes());
                    if (LOG.isDebugEnabled()) {
                        LOG.debug("Compiling script:\n\n{}\n", content);
                    }
                    producer.produce(new JoorExpressionSourceBuildItem(id, name, content));
                }
            }
        }
    }