ExpressionExtractionResultBuildItem extractExpressions()

in extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java [39:102]


    ExpressionExtractionResultBuildItem extractExpressions(CamelConfig config,
            List<CamelRoutesBuilderClassBuildItem> routesBuilderClasses,
            BuildProducer<ExpressionBuildItem> expressions,
            BuildProducer<ScriptBuildItem> scripts) throws Exception {
        CamelConfig.ExpressionConfig expression = config.expression();
        if (expression.extractionEnabled()) {
            final ClassLoader loader = Thread.currentThread().getContextClassLoader();
            if (!(loader instanceof QuarkusClassLoader)) {
                throw new IllegalStateException(
                        QuarkusClassLoader.class.getSimpleName() + " expected as the context class loader");
            }
            final List<Class<?>> routeBuilderClasses = new ArrayList<>(routesBuilderClasses.size());
            for (CamelRoutesBuilderClassBuildItem routesBuilderClass : routesBuilderClasses) {
                final String className = routesBuilderClass.getDotName().toString();
                final Class<?> cl = loader.loadClass(className);

                if (RouteBuilder.class.isAssignableFrom(cl)) {
                    routeBuilderClasses.add(cl);
                } else {
                    LOG.warnf("Language expressions occurring in %s won't be compiled at build time", cl);
                }
            }
            try {
                DryModeMain main = new DryModeMain("Expression Extractor", routeBuilderClasses.toArray(new Class<?>[0]));
                main.start();
                main.run();
                for (DryModeLanguage language : main.getLanguages()) {
                    final String name = language.getName();
                    for (ExpressionHolder holder : language.getPredicates()) {
                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
                                holder.getProperties(), true));
                    }
                    for (ExpressionHolder holder : language.getExpressions()) {
                        expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
                                holder.getProperties(), false));
                    }
                    for (ScriptHolder script : language.getScripts()) {
                        scripts.produce(
                                new ScriptBuildItem(name, script.getContent(), script.getLoadedContent(),
                                        script.getBindings()));
                    }
                }
                return new ExpressionExtractionResultBuildItem(true);
            } catch (Exception e) {
                switch (expression.onBuildTimeAnalysisFailure()) {
                case fail:
                    throw new RuntimeException(
                            "Could not extract language expressions."
                                    + "You may want to set quarkus.camel.expression.on-build-time-analysis-failure to warn or ignore if you do not use languages in your routes",
                            e);
                case warn:
                    LOG.warn("Could not extract language expressions.", e);
                    break;
                case ignore:
                    LOG.debug("Could not extract language expressions", e);
                    break;
                default:
                    throw new IllegalStateException("Unexpected " + CamelConfig.FailureRemedy.class.getSimpleName() + ": "
                            + expression.onBuildTimeAnalysisFailure());
                }
            }
        }
        return new ExpressionExtractionResultBuildItem(false);
    }