Package com.google.template.soy.exprtree

Examples of com.google.template.soy.exprtree.DataRefNode


  }


  public void testParseDataReference() throws Exception {

    DataRefNode dataRef = (new ExpressionParser("$boo.0[$foo]")).parseDataReference().getChild(0);
    assertFalse(dataRef.isIjDataRef());
    assertFalse(dataRef.isNullSafeIjDataRef());
    assertEquals("boo", dataRef.getFirstKey());
    assertEquals(2, dataRef.numChildren());
    DataRefAccessIndexNode access0 = (DataRefAccessIndexNode) dataRef.getChild(0);
    assertFalse(access0.isNullSafe());
    assertEquals(0, access0.getIndex());
    DataRefAccessExprNode access1 = (DataRefAccessExprNode) dataRef.getChild(1);
    assertFalse(access1.isNullSafe());
    assertEquals("$foo", access1.getChild(0).toSourceString());

    dataRef = (new ExpressionParser("$boo?.0?[$foo]")).parseDataReference().getChild(0);
    assertFalse(dataRef.isIjDataRef());
    assertFalse(dataRef.isNullSafeIjDataRef());
    assertEquals("boo", dataRef.getFirstKey());
    assertEquals(2, dataRef.numChildren());
    access0 = (DataRefAccessIndexNode) dataRef.getChild(0);
    assertTrue(access0.isNullSafe());
    assertEquals(0, access0.getIndex());
    access1 = (DataRefAccessExprNode) dataRef.getChild(1);
    assertTrue(access1.isNullSafe());
    assertEquals("$foo", access1.getChild(0).toSourceString());

    dataRef = (new ExpressionParser("$ij?.boo?.0[$ij.foo]")).parseDataReference().getChild(0);
    assertTrue(dataRef.isIjDataRef());
    assertTrue(dataRef.isNullSafeIjDataRef());
    assertEquals("boo", dataRef.getFirstKey());
    assertEquals(2, dataRef.numChildren());
    access0 = (DataRefAccessIndexNode) dataRef.getChild(0);
    assertTrue(access0.isNullSafe());
    assertEquals(0, access0.getIndex());
    access1 = (DataRefAccessExprNode) dataRef.getChild(1);
    assertFalse(access1.isNullSafe());
    DataRefNode childDataRef = (DataRefNode) access1.getChild(0);
    assertTrue(childDataRef.isIjDataRef());
    assertFalse(childDataRef.isNullSafeIjDataRef());
    assertEquals("$ij.foo", childDataRef.toSourceString());
  }
View Full Code Here


      }
      ExprRootNode<?> valueExprRoot = ((CallParamValueNode) param).getValueExprUnion().getExpr();
      if (valueExprRoot == null) {
        return;
      }
      DataRefNode valueDataRef = (DataRefNode) valueExprRoot.getChild(0);
      if (valueDataRef.isLocalVarDataRef() || valueDataRef.isIjDataRef()) {
        return;
      }
    }

    // Change this call to pass data="all" and remove all params. (We reuse the node id.)
View Full Code Here

    private boolean isLoopVariableInScope(ExprNode loopVariable) {
      if (!(loopVariable instanceof DataRefNode)) {
        return false;
      }
      DataRefNode loopVariableRef = (DataRefNode) loopVariable;
      if (loopVariableRef.isIjDataRef()) {
        return false;
      }
      if (loopVariableRef.numChildren() != 0) {
        return false;
      }
      String loopVariableName = loopVariableRef.getFirstKey();
      for (ParentSoyNode<?> ancestor = container.getParent(); ancestor != null;
           ancestor = ancestor.getParent()) {
        if (ancestor instanceof ForeachNonemptyNode) {
          String iteratorVariableName = ((ForeachNonemptyNode) ancestor).getVarName();
          if (loopVariableName.equals(iteratorVariableName)) {
View Full Code Here

  static String genBaseNameFromExpr(ExprRootNode<?> exprRoot, String fallbackBaseName) {

    ExprNode exprNode = exprRoot.getChild(0);

    if (exprNode instanceof DataRefNode) {
      DataRefNode dataRefNode = (DataRefNode) exprNode;

      if (dataRefNode.numChildren() > 0) {
        ExprNode lastChild = dataRefNode.getChild(dataRefNode.numChildren() - 1);
        // Only handle if last child is a key. Else, fall through.
        if (lastChild instanceof DataRefAccessKeyNode) {
          return BaseUtils.convertToUpperUnderscore(((DataRefAccessKeyNode) lastChild).getKey());
        }
      } else {
        // No children, so the first key is the last key.
        return BaseUtils.convertToUpperUnderscore(dataRefNode.getFirstKey());
      }

    } else if (exprNode instanceof GlobalNode) {
      String globalName = ((GlobalNode) exprNode).getName();
      return BaseUtils.convertToUpperUnderscore(BaseUtils.extractPartAfterLastDot(globalName));
View Full Code Here

  private SoyData visitIsFirstFunction(FunctionNode node) {

    int localVarIndex;
    try {
      DataRefNode dataRef = (DataRefNode) node.getChild(0);
      String localVarName = dataRef.getFirstKey();
      localVarIndex = getLocalVar(localVarName + "__index").integerValue();
    } catch (Exception e) {
      throw new RenderException("Failed to evaluate function call " + node.toSourceString() + ".");
    }
    return convertResult(localVarIndex == 0);
View Full Code Here

  private SoyData visitIsLastFunction(FunctionNode node) {

    int localVarIndex, localVarLastIndex;
    try {
      DataRefNode dataRef = (DataRefNode) node.getChild(0);
      String localVarName = dataRef.getFirstKey();
      localVarIndex = getLocalVar(localVarName + "__index").integerValue();
      localVarLastIndex = getLocalVar(localVarName + "__lastIndex").integerValue();
    } catch (Exception e) {
      throw new RenderException("Failed to evaluate function call " + node.toSourceString() + ".");
    }
View Full Code Here

  private SoyData visitIndexFunction(FunctionNode node) {

    int localVarIndex;
    try {
      DataRefNode dataRef = (DataRefNode) node.getChild(0);
      String localVarName = dataRef.getFirstKey();
      localVarIndex = getLocalVar(localVarName + "__index").integerValue();
    } catch (Exception e) {
      throw new RenderException("Failed to evaluate function call " + node.toSourceString() + ".");
    }
    return convertResult(localVarIndex);
View Full Code Here

        (attributes.get("kind") != null) ?
        NodeContentKinds.forAttributeValue(attributes.get("kind")) :
        null;

    // Check the validity of the key name.
    DataRefNode dataRef = ExprParseUtils.parseDataRefElseThrowSoySyntaxException(
        "$" + key,
        "Invalid key in 'param' command text \"" + commandText + "\".")
        .getChild(0);
    if (dataRef.numChildren() > 1 || dataRef.isIjDataRef()) {
      throw SoySyntaxException.createWithoutMetaInfo(
          "The key in a 'param' tag must be top level, i.e. not contain multiple keys" +
              " (invalid 'param' command text \"" + commandText + "\").");
    }
View Full Code Here

        "  {$boo}{$moo}\n" +
        "{/foreach}\n" +
        "{$boo}{$moo}\n";
    SoyFileSetNode soyTree = SharedTestUtils.parseSoyCode(soyCode);

    DataRefNode boo1 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 0)).getExprUnion().getExpr().getChild(0);
    DataRefNode moo1 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 1)).getExprUnion().getExpr().getChild(0);
    DataRefNode boozeInForeachTag = (DataRefNode)
        ((ForeachNonemptyNode) SharedTestUtils.getNode(soyTree, 2, 0)).getExpr().getChild(0);
    DataRefNode boo2 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo2 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode mooseInForTag = (DataRefNode)
        ((ForNode) SharedTestUtils.getNode(soyTree, 2, 0, 2)).getRangeArgs().get(1).getChild(0);
    DataRefNode booInForTag = (DataRefNode)
        ((ForNode) SharedTestUtils.getNode(soyTree, 2, 0, 2)).getRangeArgs().get(2).getChild(0);
    DataRefNode boo3 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 2, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo3 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 0, 2, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode boo4 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 1, 0))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode moo4 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 2, 1, 1))
            .getExprUnion().getExpr().getChild(0);
    DataRefNode boo5 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 3)).getExprUnion().getExpr().getChild(0);
    DataRefNode moo5 = (DataRefNode)
        ((PrintNode) SharedTestUtils.getNode(soyTree, 4)).getExprUnion().getExpr().getChild(0);

    assertNull(boo1.isLocalVarDataRef());
    assertNull(boozeInForeachTag.isLocalVarDataRef());
    assertNull(moo2.isLocalVarDataRef());
    assertNull(mooseInForTag.isLocalVarDataRef());
    assertNull(booInForTag.isLocalVarDataRef());
    assertNull(boo3.isLocalVarDataRef());
    assertNull(moo4.isLocalVarDataRef());
    assertNull(boo4.isLocalVarDataRef());

    (new MarkLocalVarDataRefsVisitor()).exec(soyTree);

    assertFalse(boo1.isLocalVarDataRef());
    assertFalse(moo1.isLocalVarDataRef());
    assertFalse(boozeInForeachTag.isLocalVarDataRef());
    assertTrue(boo2.isLocalVarDataRef());
    assertFalse(moo2.isLocalVarDataRef());
    assertFalse(mooseInForTag.isLocalVarDataRef());
    assertTrue(booInForTag.isLocalVarDataRef());
    assertTrue(boo3.isLocalVarDataRef());
    assertTrue(moo3.isLocalVarDataRef());
    assertFalse(boo4.isLocalVarDataRef());
    assertFalse(moo4.isLocalVarDataRef());
    assertFalse(boo5.isLocalVarDataRef());
    assertFalse(moo5.isLocalVarDataRef());

    (new UnmarkLocalVarDataRefsVisitor()).exec(soyTree);

    assertNull(boo1.isLocalVarDataRef());
    assertNull(boozeInForeachTag.isLocalVarDataRef());
View Full Code Here

TOP

Related Classes of com.google.template.soy.exprtree.DataRefNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.