@Override
  public JsExpr computeForJsSrc(List<JsExpr> args) {

    BidiGlobalDir bidiGlobalDir = bidiGlobalDirProvider.get();
    if (bidiGlobalDir.isStaticValue()) {
      return new JsExpr(
          (bidiGlobalDir.getStaticValue() < 0) ? "'right'" : "'left'", Integer.MAX_VALUE);
    }
    return new JsExpr(
        "(" + bidiGlobalDir.getCodeSnippet() + ") < 0 ? 'right' : 'left'",
        Operator.CONDITIONAL.getPrecedence());
  }
  @Override
  public GoExpr computeForGoSrc(List<GoExpr> args) {

    BidiGlobalDir bidiGlobalDir = bidiGlobalDirProvider.get();
    if (bidiGlobalDir.isStaticValue()) {
      return toStringGoExpr(
          GoCodeUtils.genNewStringData(
              (bidiGlobalDir.getStaticValue() < 0) ? "\"right\"" : "\"left\""));
    }

    return toStringGoExpr(
        GoCodeUtils.genNewStringData(
            GoCodeUtils.genFunctionCall(
                GoCodeUtils.UTILS_LIB + ".BidiStartEdge", bidiGlobalDir.getCodeSnippet())));
  }
  @Override
  public JavaExpr computeForJavaSrc(List<JavaExpr> args) {

    BidiGlobalDir bidiGlobalDir = bidiGlobalDirProvider.get();
    if (bidiGlobalDir.isStaticValue()) {
      return toStringJavaExpr(
          JavaCodeUtils.genNewStringData(
              (bidiGlobalDir.getStaticValue() < 0) ? "\"right\"" : "\"left\""));
    }

    String bidiFunctionName =
        SoyBidiUtils.class.getName()
            + ".getBidiFormatter("
            + bidiGlobalDir.getCodeSnippet()
            + ").startEdge";
    return toStringJavaExpr(
        JavaCodeUtils.genNewStringData(JavaCodeUtils.genFunctionCall(bidiFunctionName)));
  }