docs: @Override
      public DirectCompilerResult visitInterval(FEEL_1_1Parser.IntervalContext ctx) {
          DirectCompilerResult start = visit(ctx.start);
          DirectCompilerResult end = visit(ctx.end);
  
          Expression lowBoundary = expressionBoundaryOf(
                  RangeNode.IntervalBoundary.low(ctx.low.getText()));
          Expression lowEndPoint = start.getExpression();
          Expression highEndPoint = end.getExpression();
          Expression highBoundary = expressionBoundaryOf(
                  RangeNode.IntervalBoundary.high(ctx.up.getText()));
  
          // if this is a range of type i..j with i,j numbers:
          // then we make it a constant; otherwise we fallback
          // to the general case of creating the Range object at runtime
          if (isNumericConstant(start) && isNumericConstant(end)) {
              ObjectCreationExpr initializer =
                      new ObjectCreationExpr()
                              .setType(JavaParser.parseClassOrInterfaceType(RangeImpl.class.getCanonicalName()))
                              .addArgument(lowBoundary)
                              .addArgument(new CastExpr(TYPE_COMPARABLE, lowEndPoint))
                              .addArgument(new CastExpr(TYPE_COMPARABLE, highEndPoint))
                              .addArgument(highBoundary);
  
              FieldDeclaration rangeField =
                      fieldDeclarationOf(
                              "RANGE",
                              ParserHelper.getOriginalText(ctx),
                              initializer);
              Set<FieldDeclaration> fieldDeclarations =
                      DirectCompilerResult.mergeFDs(start, end);
              fieldDeclarations.add(rangeField);
  
              return DirectCompilerResult.of(
                      new NameExpr(
                              rangeField.getVariable(0)
                                      .getName().asString()),
                      BuiltInType.RANGE,
                      fieldDeclarations);
          } else {
              MethodCallExpr initializer =
                      new MethodCallExpr(
                              null,
                              "range", new NodeList<>(
                              new NameExpr("feelExprCtx"),
                              lowBoundary,
                              lowEndPoint,
                              highEndPoint,
                              highBoundary));
  
              return DirectCompilerResult.of(
                      initializer,
                      BuiltInType.RANGE,
                      DirectCompilerResult.mergeFDs(start, end));
          }
      }