1   /*
2    * SPDX-FileCopyrightText: none
3    * SPDX-License-Identifier: CC0-1.0
4    */
5   
6   package dev.metaschema.core.metapath.cst.path;
7   
8   import java.util.List;
9   
10  import dev.metaschema.core.metapath.IExpression;
11  import dev.metaschema.core.metapath.cst.ExpressionUtils;
12  import dev.metaschema.core.metapath.item.node.INodeItem;
13  import edu.umd.cs.findbugs.annotations.NonNull;
14  
15  /**
16   * A base class for Metapath expressions based on the XPath 3.1
17   * <a href= "https://www.w3.org/TR/xpath-31/#id-path-operator">path
18   * operator</a>.
19   */
20  public abstract class AbstractRootPathExpression
21      extends AbstractSearchPathExpression {
22    @NonNull
23    private final IExpression expression;
24  
25    /**
26     * Construct a new relative path expression of "/expression".
27     *
28     * @param text
29     *          the parsed text of the expression
30     * @param expression
31     *          the path expression to evaluate from the root
32     */
33    @SuppressWarnings("null")
34    public AbstractRootPathExpression(
35        @NonNull String text,
36        @NonNull IExpression expression) {
37      super(text, ExpressionUtils.analyzeStaticResultType(INodeItem.class, List.of(expression)));
38      this.expression = expression;
39    }
40  
41    /**
42     * Get the path expression.
43     *
44     * @return the expression
45     */
46    @NonNull
47    public IExpression getExpression() {
48      return expression;
49    }
50  
51    @SuppressWarnings("null")
52    @Override
53    public List<? extends IExpression> getChildren() {
54      return List.of(expression);
55    }
56  }