Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-7235

Ternary operator in when clause throws UnsupportedOperationException

    XMLWordPrintable

Details

    • Bug
    • Resolution: Won't Do
    • Major
    • None
    • 8.30.0.Final
    • core engine
    • None
    • 2022 Week 44-46 (from Oct 31)
    • NEW
    • NEW
    • ---
    • ---

    Description

      In a drools rule I'm trying to build logic using Java's ternary operator like this:

      rule "ternary"
      when
          $foo: Number() from 0
          $bar: Boolean() from ($foo > 0 ? true : false)
      then
          System.out.println("value of $bar: " + $bar);
      end 

      The compilation of the rule fails with the following exception:

      2022-11-10 08:37:46,380 ERROR [io.qua.dep.dev.IsolatedDevModeMain] (main) Failed to start quarkus: java.lang.RuntimeException: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
          [error]: Build step org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor#generateSources threw an exception: org.kie.kogito.codegen.rules.RuleCodegenError: Errors were generated during the code-generation process:
      null    at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:115)
          at org.kie.kogito.codegen.core.AbstractGenerator.generate(AbstractGenerator.java:69)
          at org.kie.kogito.codegen.core.ApplicationGenerator.lambda$generateComponents$0(ApplicationGenerator.java:95)
          at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
          at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
          at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
          at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
          at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
          at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
          at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generateComponents(ApplicationGenerator.java:97)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generate(ApplicationGenerator.java:74)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateFiles(KogitoAssetsProcessor.java:263)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateSources(KogitoAssetsProcessor.java:140)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
          at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.base/java.lang.reflect.Method.invoke(Method.java:568)
          at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
          at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
          at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
          at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
          at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
          at java.base/java.lang.Thread.run(Thread.java:833)
          at org.jboss.threads.JBossThread.run(JBossThread.java:501)
      Caused by: java.lang.UnsupportedOperationException
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpressionRec(ExpressionTyper.java:386)
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpression(ExpressionTyper.java:161)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileToJavaRecursive(ConstraintParser.java:292)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileStart(ConstraintParser.java:200)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:150)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:142)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:138)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createArg(FromVisitor.java:282)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.addLambdaToFromExpression(FromVisitor.java:264)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpressionUsingArguments(FromVisitor.java:199)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.lambda$fromExpression$0(FromVisitor.java:140)
          at java.base/java.util.Optional.orElseGet(Optional.java:364)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpression(FromVisitor.java:140)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createSingleFrom(FromVisitor.java:109)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.visit(FromVisitor.java:82)
          at java.base/java.util.Optional.flatMap(Optional.java:289)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildFromDeclaration(PatternDSL.java:104)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.initPattern(PatternDSL.java:87)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildPattern(PatternDSL.java:304)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:131)
          at org.drools.drl.ast.descr.PatternDescr.accept(PatternDescr.java:275)
          at org.drools.model.codegen.execmodel.generator.visitor.AndVisitor.visit(AndVisitor.java:51)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:69)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:228)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:213)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:200)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:153)
          at org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
          at org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:59)
          at org.drools.model.codegen.tool.ExplicitCanonicalModelCompiler.process(ExplicitCanonicalModelCompiler.java:138)
          at org.drools.model.codegen.project.DroolsModelBuilder.build(DroolsModelBuilder.java:122)
          at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:113)
          ... 24 more    at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:335)
          at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:252)
          at io.quarkus.runner.bootstrap.AugmentActionImpl.createInitialRuntimeApplication(AugmentActionImpl.java:60)
          at io.quarkus.deployment.dev.IsolatedDevModeMain.firstStart(IsolatedDevModeMain.java:86)
          at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:447)
          at io.quarkus.deployment.dev.IsolatedDevModeMain.accept(IsolatedDevModeMain.java:59)
          at io.quarkus.bootstrap.app.CuratedApplication.runInCl(CuratedApplication.java:149)
          at io.quarkus.bootstrap.app.CuratedApplication.runInAugmentClassLoader(CuratedApplication.java:104)
          at io.quarkus.deployment.dev.DevModeMain.start(DevModeMain.java:131)
          at io.quarkus.deployment.dev.DevModeMain.main(DevModeMain.java:62)
      Caused by: io.quarkus.builder.BuildException: Build failure: Build failed due to errors
          [error]: Build step org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor#generateSources threw an exception: org.kie.kogito.codegen.rules.RuleCodegenError: Errors were generated during the code-generation process:
      null    at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:115)
          at org.kie.kogito.codegen.core.AbstractGenerator.generate(AbstractGenerator.java:69)
          at org.kie.kogito.codegen.core.ApplicationGenerator.lambda$generateComponents$0(ApplicationGenerator.java:95)
          at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
          at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
          at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
          at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
          at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
          at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
          at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generateComponents(ApplicationGenerator.java:97)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generate(ApplicationGenerator.java:74)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateFiles(KogitoAssetsProcessor.java:263)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateSources(KogitoAssetsProcessor.java:140)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
          at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.base/java.lang.reflect.Method.invoke(Method.java:568)
          at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
          at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
          at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
          at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
          at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
          at java.base/java.lang.Thread.run(Thread.java:833)
          at org.jboss.threads.JBossThread.run(JBossThread.java:501)
      Caused by: java.lang.UnsupportedOperationException
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpressionRec(ExpressionTyper.java:386)
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpression(ExpressionTyper.java:161)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileToJavaRecursive(ConstraintParser.java:292)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileStart(ConstraintParser.java:200)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:150)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:142)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:138)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createArg(FromVisitor.java:282)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.addLambdaToFromExpression(FromVisitor.java:264)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpressionUsingArguments(FromVisitor.java:199)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.lambda$fromExpression$0(FromVisitor.java:140)
          at java.base/java.util.Optional.orElseGet(Optional.java:364)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpression(FromVisitor.java:140)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createSingleFrom(FromVisitor.java:109)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.visit(FromVisitor.java:82)
          at java.base/java.util.Optional.flatMap(Optional.java:289)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildFromDeclaration(PatternDSL.java:104)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.initPattern(PatternDSL.java:87)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildPattern(PatternDSL.java:304)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:131)
          at org.drools.drl.ast.descr.PatternDescr.accept(PatternDescr.java:275)
          at org.drools.model.codegen.execmodel.generator.visitor.AndVisitor.visit(AndVisitor.java:51)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:69)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:228)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:213)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:200)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:153)
          at org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
          at org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:59)
          at org.drools.model.codegen.tool.ExplicitCanonicalModelCompiler.process(ExplicitCanonicalModelCompiler.java:138)
          at org.drools.model.codegen.project.DroolsModelBuilder.build(DroolsModelBuilder.java:122)
          at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:113)
          ... 24 more    at io.quarkus.builder.Execution.run(Execution.java:123)
          at io.quarkus.builder.BuildExecutionBuilder.execute(BuildExecutionBuilder.java:79)
          at io.quarkus.deployment.QuarkusAugmentor.run(QuarkusAugmentor.java:160)
          at io.quarkus.runner.bootstrap.AugmentActionImpl.runAugment(AugmentActionImpl.java:331)
          ... 9 more
      Caused by: org.kie.kogito.codegen.rules.RuleCodegenError: Errors were generated during the code-generation process:
      null    at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:115)
          at org.kie.kogito.codegen.core.AbstractGenerator.generate(AbstractGenerator.java:69)
          at org.kie.kogito.codegen.core.ApplicationGenerator.lambda$generateComponents$0(ApplicationGenerator.java:95)
          at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:273)
          at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
          at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
          at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
          at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
          at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
          at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generateComponents(ApplicationGenerator.java:97)
          at org.kie.kogito.codegen.core.ApplicationGenerator.generate(ApplicationGenerator.java:74)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateFiles(KogitoAssetsProcessor.java:263)
          at org.kie.kogito.quarkus.common.deployment.KogitoAssetsProcessor.generateSources(KogitoAssetsProcessor.java:140)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
          at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.base/java.lang.reflect.Method.invoke(Method.java:568)
          at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:909)
          at io.quarkus.builder.BuildContext.run(BuildContext.java:281)
          at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
          at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2449)
          at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1478)
          at java.base/java.lang.Thread.run(Thread.java:833)
          at org.jboss.threads.JBossThread.run(JBossThread.java:501)
      Caused by: java.lang.UnsupportedOperationException
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpressionRec(ExpressionTyper.java:386)
          at org.drools.model.codegen.execmodel.generator.expressiontyper.ExpressionTyper.toTypedExpression(ExpressionTyper.java:161)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileToJavaRecursive(ConstraintParser.java:292)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.compileStart(ConstraintParser.java:200)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:150)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:142)
          at org.drools.model.codegen.execmodel.generator.drlxparse.ConstraintParser.drlxParse(ConstraintParser.java:138)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createArg(FromVisitor.java:282)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.addLambdaToFromExpression(FromVisitor.java:264)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpressionUsingArguments(FromVisitor.java:199)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.lambda$fromExpression$0(FromVisitor.java:140)
          at java.base/java.util.Optional.orElseGet(Optional.java:364)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.fromExpression(FromVisitor.java:140)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.createSingleFrom(FromVisitor.java:109)
          at org.drools.model.codegen.execmodel.generator.visitor.FromVisitor.visit(FromVisitor.java:82)
          at java.base/java.util.Optional.flatMap(Optional.java:289)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildFromDeclaration(PatternDSL.java:104)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.initPattern(PatternDSL.java:87)
          at org.drools.model.codegen.execmodel.generator.visitor.pattern.PatternDSL.buildPattern(PatternDSL.java:304)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:131)
          at org.drools.drl.ast.descr.PatternDescr.accept(PatternDescr.java:275)
          at org.drools.model.codegen.execmodel.generator.visitor.AndVisitor.visit(AndVisitor.java:51)
          at org.drools.model.codegen.execmodel.generator.visitor.ModelGeneratorVisitor.visit(ModelGeneratorVisitor.java:69)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRule(ModelGenerator.java:228)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRuleDescr(ModelGenerator.java:213)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.processRules(ModelGenerator.java:200)
          at org.drools.model.codegen.execmodel.generator.ModelGenerator.generateModel(ModelGenerator.java:153)
          at org.drools.model.codegen.execmodel.processors.ModelGeneratorPhase.process(ModelGeneratorPhase.java:48)
          at org.drools.compiler.builder.impl.processors.IteratingPhase.process(IteratingPhase.java:59)
          at org.drools.model.codegen.tool.ExplicitCanonicalModelCompiler.process(ExplicitCanonicalModelCompiler.java:138)
          at org.drools.model.codegen.project.DroolsModelBuilder.build(DroolsModelBuilder.java:122)
          at org.kie.kogito.codegen.rules.RuleCodegen.internalGenerate(RuleCodegen.java:113)
          ... 24 more 

      Looking at the ExpressionTyper class this looks like a yet unsupported case to me.

      Ternaries in general seem to work - an expression like $bar: Boolean() from (1 > 0 ? true : false) compiles fine.

      Attachments

        Issue Links

          Activity

            People

              mfusco@redhat.com Mario Fusco
              dirk.olmes Dirk Olmes (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: