/**
  * Builds a {@link BindingDescriptor} expression for a given
  * {@link AssetMapping} expression.
  *
  * @param Expression|null $expr The {@link AssetMapping} expression.
  *
  * @return Expression The built expression.
  */
 public function buildExpression(Expression $expr = null)
 {
     if (!$this->defaultExpression) {
         $this->defaultExpression = Expr::method('isEnabled', Expr::same(true))->andMethod('getTypeName', Expr::same(DiscoveryUrlGenerator::BINDING_TYPE))->andMethod('getBinding', Expr::method('getQuery', Expr::endsWith('{,/**/*}')));
     }
     if (!$expr) {
         return $this->defaultExpression;
     }
     $traverser = new ExpressionTraverser();
     $traverser->addVisitor($this);
     return $this->defaultExpression->andX($traverser->traverse($expr));
 }
 /**
  * Builds a {@link BindingDescriptor} expression for a given
  * {@link AssetMapping} expression.
  *
  * @param Expression $expr The {@link AssetMapping} expression.
  *
  * @return Expression The built expression.
  */
 public function buildExpression(Expression $expr = null)
 {
     if (!$this->defaultExpression) {
         $this->defaultExpression = Expr::same(BindingState::ENABLED, BindingDescriptor::STATE)->andSame(DiscoveryUrlGenerator::BINDING_TYPE, BindingDescriptor::TYPE_NAME)->andEndsWith('{,/**/*}', BindingDescriptor::QUERY);
     }
     if (!$expr) {
         return $this->defaultExpression;
     }
     $traverser = new ExpressionTraverser();
     $traverser->addVisitor($this);
     return $this->defaultExpression->andX($traverser->traverse($expr));
 }