Skip to content

ConstantFoldingOptimizer fails when optimizing "in" operator over non-literal list #198

Description

@oridag
import dev.cel.bundle.CelFactory
import dev.cel.common.types.{ListType, SimpleType}
import dev.cel.optimizer.CelOptimizerFactory
import dev.cel.optimizer.optimizers.ConstantFoldingOptimizer


object Repro extends App {

  val cel = CelFactory
    .standardCelBuilder
    .addVar("arg", ListType.create(SimpleType.STRING))
    .build()

  val optimizer = CelOptimizerFactory.standardCelOptimizerBuilder(cel)
    .addAstOptimizers(ConstantFoldingOptimizer.INSTANCE)
    .build()


  optimizer.optimize(cel.compile("'abc' in arg").getAst)

}
Exception in thread "main" java.lang.ExceptionInInitializerError
	at Repro.main(Repro.scala)
Caused by: dev.cel.optimizer.CelOptimizationException: Optimization failure: IDENT
	at dev.cel.optimizer.CelOptimizerImpl.optimize(CelOptimizerImpl.java:52)
	at Repro$.<clinit>(Repro.scala:19)
	... 1 more
Caused by: java.lang.UnsupportedOperationException: IDENT
	at dev.cel.common.ast.AutoOneOf_CelExpr_ExprKind$Parent_.createList(AutoOneOf_CelExpr_ExprKind.java:96)
	at dev.cel.common.ast.CelExpr.createList(CelExpr.java:106)
	at dev.cel.optimizer.optimizers.ConstantFoldingOptimizer.maybePruneBranches(ConstantFoldingOptimizer.java:302)
	at dev.cel.optimizer.optimizers.ConstantFoldingOptimizer.optimize(ConstantFoldingOptimizer.java:84)
	at dev.cel.optimizer.CelOptimizerImpl.optimize(CelOptimizerImpl.java:45)
	... 2 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions